Екатерина обнови решението на 21.11.2014 07:48 (преди около 10 години)
Сама виждам, че този код не е много DRY - например методите horizontal и vertical - и бих била благодарна за някакви идеи/hint-ове как да оправя това (:
Не ми допада това, че Vertical
надледява Horizontal
само за да получи функционалността за добавяне на компоненти. Можеш ли да я изнесеш и да я използваш и на двете места?
Какво те притеснява в методите horizontal
и vertical
? Защо се налага те да връщат обекта, който създават? Можеш да подадеш блока, който получаваш на съответния обект (Horizontal
/ Vertical
) и да instance_eval
-неш в initialize
метода. Така кода в тези два метода ще се сведе до един ред, който добавя елемент в @content
.
Името @content
не ми харесва много. Помисли за нещо по-удачно. Също така Horizontal
и Vertical
са прилагателни. Можеш ли да ги комбинираш с някакво съществително? Не е нужно да са 1:1 с имената на методите от DSL-а и по мое мнение е по-добре името на клас да включва съществително (понякога може и глагол).
Помисли за това какъв трябва да е резултата от horizontal
блок, в който имаш вложен vertical
на някоя от междинните позиции (не първа). Примерно:
horizontal do
label '1'
vertical do
label '2'
label '3'
end
end
:)
Правилно ли разбирам, че при такъв вход:
horizontal do
label text:'a'
label text:'b'
vertical do
label text:'c'
label text:'d'
end
horizontal do
label text:'e'
label text:'f'
end
end
резултатът трябва да бъде:
abcef
d
Правилно. :)