Показать сообщение отдельно
Старый 28.08.2013, 11:45   #1  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Новый шаблон проектирования 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() может также анализироваться _args, что усложнит логику метода и читать этот метод станет сложнее.
Прикинем, что можно сделать... Выделим содержимое метода 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).