28.08.2013, 11:45 | #1 |
Участник
|
Новый шаблон проектирования execute()
Наверное все используют шаблон construct(), основанный на рекомендациях Microsoft. Я придумал небольшое нововведение, позволяющее методы сделать более "чистыми".
Пример кода, как мы обычно строим RunBase-класс: X++: class ConstructTemplateDemo extends RunBase { public static void main(Args _args) { ConstructTemplateDemo constructTemplateDemo = ConstructTemplateDemo::construct(); ; if (constructTemplateDemo.init() && constructTemplateDemo.prompt()) { constructTemplateDemo.run(); } } public static ConstructTemplateDemo construct() { return new ConstructTemplateDemo(); } } Прикинем, что можно сделать... Выделим содержимое метода main() в новый метод и посмотрим, что же у нас получилось: X++: class ExecuteTemplateDemo extends RunBase { public static void main(Args _args) { ExecuteTemplateDemo::construct().execute(); } public static ExecuteTemplateDemo construct() { return new ExecuteTemplateDemo(); } public void execute() { if (this.init() && this.prompt()) { this.run(); } } }
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
28.08.2013, 12:32 | #2 |
Участник
|
|
|
28.08.2013, 13:07 | #3 |
Участник
|
Цитата:
X++: public void execute(Args _args) { this.initFromArgs(_args); if (this.init() && this.prompt()) { this.run(); } }
__________________
// no comments |
|
28.08.2013, 13:45 | #4 |
MCTS
|
Не вижу особых преимуществ. Общее количество строк не изменилось, а вот методов стало больше.
__________________
I could tell you, but then I would have to bill you. |
|
28.08.2013, 13:49 | #5 |
Участник
|
Ну уж если поворчать, то в DAX4 и DAX2009 Microsoft рекомендует использовать не construct напрямую, а методы newЧего-то-там, а construct делать защищенным, причем в конструкторе только создавать экземпляр класса, не устанавливая никаких параметров (в BP даже есть проверка на это).
А вот в методах new* и делать инициализацию из параметров. |
|
28.08.2013, 13:54 | #6 |
Участник
|
См также SysOperation framework в 2012
|
|
|
За это сообщение автора поблагодарили: dech (1). |
28.08.2013, 15:35 | #7 |
Участник
|
Можно такой метод execute (включающий в себя наиболее распространённую и правильную комбинацию действий) поместить в базовый класс. Тогда его не нужно будет повторять на каждом наследнике. В результате кода и методов станет меньше.
Но согласен. Сверхполезным такое нововведение я бы не назвал. Выбирая между красивым кодом и стандартным я бы выбрал стандартный. |
|
29.08.2013, 05:53 | #8 |
Участник
|
Я уже говорил, изменения минимальны, но позволяют отделить всю стандартную шелуху в отдельный метод и сосредоточиться на главном.
Посмотрим
__________________
// no comments Последний раз редактировалось dech; 29.08.2013 в 06:01. |
|
|
|