На днях, работая над довольно большой задачей, заметил, что для решения небольшой подзадачки мне идеально походит паттерн 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