Доброго всем дня.
Понимаю что тема измученна, но толкового ответа пока так и не нашел.
Теперь возникший вопрос.
Существует приложение на WinForms в котором:
1. Модель — бизнес логика и обработка информации
2. Представитель — посредник между моделью и представлением. Исключительно передача запросов и вызов методов.
3. Представление — интерфейс который реализует главная форма. Все запросы синхронные и вопросов кому предназначена информация (для children form) не возникает.
Но с добавлением 4-5 children форм. IView очень разросся и код в главной форме это передача данных от children форм к представителю и обратно.
Сейчас же хотим переработать интерфейс IView до вида GetData (посылает запрос на какие либо данные к модели) и SetData (ответ модели на запрос или просто генерация сообщения).
что бы все обработки по получению и обработке данных выполнялись в дополнительных классах.
Пробовали применить различные паттерны типа "Посетителя" и "Команды". Но в конечном итоге приходим к конструкции swich ... case в том или ином месте программы.
Мне же хочется это решить на уровне наследования и полиморфизма.
Смотрел
статьюАвтор(ы): Беркович Вадим, Чудин Андрей
Дата: 09.04.2003
Практически во всех проектах можно встретить те или иные паттерны проектирования. Но далеко не часто они обозначены разработчиками. Проект, в котором явно обозначены все использованные паттерны, удобнее для понимания и более управляем. Можно сказать, что описание проекта в терминах паттернов добавляет новые метаданные о проекте. Если мы считаем, что данный класс реализует паттерн "итератор", мы сразу получаем представление об его интерфейсе и роли. Если же изначально весь проект реализован с использованием паттернов, то управление проектом упрощается. Обобщение удачных решений конкретных задач в паттерны и использование их в последующих проектах существенно ускоряет процесс разработки. А код становится более понятным и элегантным, и им можно будет воспользоваться повторно.
.
Но там тоже есть участок кода:
{ обрабочик команд TOrdersAppModule }
procedure TOrdersAppModule.ExecCommand(Command: TCustomCommand);
begin
if Command is TNewOrderCommand then // создать заказ
OnCommand_NewOrder( TNewOrderCommand(Command) );
if Command is TNewOrderItemCommand then // добавить позицию заказа
OnCommand_NewOrderItem( TNewOrderItemCommand(Command) );
if Command is TGetOrderCommand then // получить данные об активном заказе
OnCommand_GetOrderCommand( TGetOrderCommand(Command) );
end;
Можете ли Вы посоветовать как
Правильно сделать механизм обмена данными между множеством форм и моделью.