Показать сообщение отдельно
Старый 30.12.2014, 00:19   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
А чего непонятного? В tutorial-примере показывается, как использовать RunBase вместе с "настоящей" формой, но при этом
  1. все так же добавлять поля в runtime, используя инфраструктуру Dialog;
  2. взаимодействовать из формы с классом, реализующим бизнес- и презентационную логику, отчасти повторяя функционал штатной формы Dialog.
Таким классом в данном случае является никто иной, как наш наследник RunBase, при этом в его методе dialog() в примере мы видим такой код:
X++:
DialogRunbase dialog = Dialog::newFormnameRunbase(formstr(tutorial_RunbaseForm), this);
Инфраструктура RunBase заточена на работу презентационной логики через инфраструктуру Dialog, и предполагается, что RunBase-у в общем случае без разницы, какая именно там форма создается, лишь бы можно было вывести на нее поля ввода и получить с нее введенные значения. Инфраструктура Dialog как раз и абстрагирует для RunBase заморочки взаимодействия с формой в части отображения исходных и получения измененных пользователем значений параметров запуска RunBase. Чтобы не нарушать эту абстракцию, в рассматриваемом примере форма создается не напрямую, а через Dialog::newFormnameRunbase().
Но раз мы затеяли собирать форму не полностью в runtime, значит, она предполагает какую-то затейливую презентационную логику и/или дизайн - "представление", одним словом (в терминах MVC). Логику мы как нормальные программисты пишем в классах, а не на формах, следовательно, форме надо иметь доступ к своему классу-"контроллеру". Таковым в случае инфраструктуры RunBase выступает все тот же наш класс-наследник, который выполняет и бизнес-логику. Но поскольку для унификации вывода и получения значений параметров он использует в качестве "прослойки" инфраструктруру Dialog, то с точки зрения формы непосредственно вызывающим ее объектом оказывается экземпляр класса DialogRunbase, а вовсе не наш наследник RunBase. Так вот, чтобы форма через класс-прослойку могла достучаться до контроллера, в этом классе-прослойке и реализован метод, возвращающий ссылку на RunBase.
За это сообщение автора поблагодарили: S.Kuskov (5), MaxHammer (1).