Re[7]: Присвоение свойств и вызов виртуального метода из кон
От: sharez  
Дата: 16.11.16 09:09
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, sharez, Вы писали:


S>>В общем, всё это делается, да, но не кажется ли, что мы излишне усложнили архитектуру просто из-за надуманного ограничения на задание полей класса до вызова суперконструтора?

F> Не кажется.
F> Вне зависимости от возможности делать виртуальный вызов в конструкторе — контрол (кнопка) будет:
F> 1. Иметь состояние attached/detached (to DOM). Особенно в тех фреймворках кто может аттачится на уже существующий элемент и/или достраивать дом с плэйсхолдеров.
F> 2. Свойства на подобии title и color — они или бесполезные поля, или же имеют аксессоры и ими можно пользоваться как до так и после аттача с отражением изменений в DOM. Опционально — вычитка значений из DOM.
F> 3. События — аналогичны (2) — подписываемся/отписываемся в любое время, но в DOM они должны подписываться/отписываться железобетонно. Иначе ликать будет. (Хотя современные браузеры если ещё нет, то скоро и с этим справятся).
F> Я вообще не вижу зачем тут метод fill особенно в конструкторе.
F> Конструктор должен создавать объект в консистентном состоянии и только. Таким образом все параметры необходимые для конструкции объекта — необходимо передавать через параметры конструктора (парадокс?).
F> Для того что бы не вызывать тонну пропертей после конструкции объекта — можно соорудить ControlParams, ButtonParams или вообще безликий/динамический объект-холдер с настройками при инициализации. Заодно это могло бы упростить создание контрола фабрикой по уже готовому DOM с параметрами (или частью) которые лежат в атрибутах элемента.
F> Собственно нечто подобное я "изобретал" для себя, достаточно неплохо имхо организовано в google closure tools (library).

В таком случае все setTitle(), setColor() внутри помимо изменения DOM-дерева должны будут ещё и проверять, создано ли оно — тоже неплохое такое усложнение, особенно, если таких методов много (а их много).
Основная задумка была в том, что удобно создать this.el со всей внутренней структурой без аттача к DOM-дереву непосредственно документа, и добавлять его только при явном вызове, как-то так:

element.appendChild(button.getElement());


При этом нам ничего не помешает уже на этапе вызова конструктора задавать Title, Color в дереве, хранящемся во внутреннем поле this.el. Можно даже делать addEventListener/removeEventListener.

К сожалению, с Google Closure Tools я не знаком, но посмотрю на досуге.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.