Показать сообщение отдельно
Старый 12.11.2004, 11:51   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Реализация паттерна Visitor в Axapta
На днях, работая над довольно большой задачей, заметил, что для решения небольшой подзадачки мне идеально походит паттерн Visitor.
Про сам паттерн можно прочитать здесь , я лишь подчеркну особенности реализации паттерна в Аксапте.
Невозможность перегрузки методов в Axapta вызывает наибольшие затруднения при реализации паттерна. Так двойную диспетчеризацию, лежащую в основе паттерна пришлось реализовать вот таким довольно корявым образом:
PHP код:
        void visit(Employee empl)
        {

        
Boss boss;
        ;
        
totalDays += empl.getVacDays();
        if (
classIdGet(empl) == classNum(Boss))
        {

        
boss empl;
        
totalDays += boss.getBonusDays(); }

        } 
Вот здесь можно скачать пример, , демонстрирующий реализацию паттерна. Пример использования абстрактный, не имеющий отношения к реальной задаче. Соответствие ролей классам следующее:

Роль Класс
Посетитель(Visitor) Visitor
Конкретный посетитель(Concrete Visitor) VacationVisitor
Конкретный элемент (Concrete Element) Employee, Boss