В последнее время (2.x / 3.x) я просто использовал методы xtype & factory, чтобы получить экземпляр класса, который был настолько же быстрым.Теперь я запустил 4.x и свое первое приложение с MVC.Как описано в руководстве, шаблон MVC требует от меня расширения класса для каждого представления, которое я не хочу использовать, даже если я использую его только один раз.Но лучшая практика, написанная самим Сенчей, гласит:
просто расширяют для повторного использования или добавления функциональности
В моем случае мне нужнозарегистрировать целую группу классов, даже если они могут быть созданы из одного базового класса, за исключением некоторых параметров, таких как title, width,...
Еще один момент заключается в том, что контроллер перезаписывает любой StoreId по соглашению и также требует строгой типизации, то естьимя класса должно заканчиваться s
.Но, насколько я знаю, я не могу сэкономить ни модель, ни хранилище в контроллере store / model-array, так что есть ли другой смысл для этого соглашения, потому что кажется, что он не щадит типизацию.
Следующий момент заключается в том, что после слияния с 3.X в 4.X начальное время загрузки приложения увеличилось, что, по-видимому, связано либо с множеством новых классов, которые необходимо определить, либо с тем, чтовсе контроллеры создаются при запуске из-за поведения по умолчанию шаблона MVC.Есть ли способ не создавать экземпляр контроллера автоматически и просто делать его ленивым, например, когда я запрашиваю его на контроллере приложения?
Да, я знаю, это куча вопросов, но я думаю, что они все вокругта же тема.
РЕДАКТИРОВАТЬ
После некоторого поиска исходного кода я больше не уверен в требовании s
, когданазывать магазинЯ думал, что наткнулся на это во время прохождения учебника MVC.Кто-нибудь может это проверить?
РЕДАКТИРОВАТЬ 2
Мои выводы
Кружевное рендерингэто довольно просто.Прежде всего, Контроллер не должен быть упомянут в массиве контроллеров ApplicationController.Для создания экземпляра такого контроллера используйте ApplicationController.getController(pureClassName)
[. Обратите внимание, что каждый контроллер содержит ссылку на ApplicationController, называемую application
]. Теперь вам нужно знать, что метод init(application)
и метод onLaunch(application)
больше не вызывается ApplicationController, вам нужно сделать это самостоятельно.При вызове getController()
ApplicationController сначала ищет, если во внутреннем эталонном кэше уже есть экземпляр этого контроллера, если нет, он создает экземпляр и вводит имя контроллера как Id
.Таким образом, контроллеры являются своего рода синглтоном, и это прекрасноКонтроллер сам создает все методы получения для зарегистрированных магазинов, моделей и представлений и, по-видимому, создает их экземпляры (по крайней мере, для магазинов). Об ограничениях именования для магазинов нет ограничений относительно окончания с s.