Re: MVP шаблон и WinForms MDI приложение
От: EvgenB Украина  
Дата: 29.08.11 10:52
Оценка:
Здравствуйте, Pencroff, Вы писали:

P>Доброго всем дня.

...

Доброго!


P>Но там тоже есть участок кода:

P>
P>{ обрабочик команд TOrdersAppModule }
P>procedure TOrdersAppModule.ExecCommand(Command: TCustomCommand);
P>begin
P>  if Command is TNewOrderCommand then // создать заказ
P>    OnCommand_NewOrder( TNewOrderCommand(Command) );

P>  if Command is TNewOrderItemCommand then // добавить позицию заказа
P>    OnCommand_NewOrderItem( TNewOrderItemCommand(Command) );
 
P>  if Command is TGetOrderCommand then   // получить данные об активном заказе
P>    OnCommand_GetOrderCommand( TGetOrderCommand(Command) );
P>end;
P>

P>Можете ли Вы посоветовать как Правильно сделать механизм обмена данными между множеством форм и моделью.

Кто вам мешает использовать интерфейсы?
Создайте интерфейс типа:

    public interface ICustomCommand
    {
        public void Execute();
    }


и передавайте его в качестве параметра в вашу процедуру:
procedure TOrdersAppModule.ExecCommand(Command: ICustomCommand);


реализацию "OnCommand_NewOrder", "OnCommand_GetOrderCommand" надо перенести в классы соответствующих команд или же в фабрику и получится что-то вроде:

    public class NewOrderCommand : ICustomCommand
    {
        public void Execute()
        {
            OnCommand_NewOrder((TNewOrderCommand)this);
        }
    }

    public class GetOrderCommand : ICustomCommand
    {
        public void Execute()
        {
            OnCommand_GetOrderCommand((TGetOrderCommand)this);
        }
    }


в этом случае ваш обработчик превращается в совсем простую штуку:

    public class TOrdersAppModule
    {
        public static void ExecCommand(ICustomCommand command)
        {
            command.Execute();
        }
    }


извиняйте, что на сях ... но Паскакаль уже давно не юзаю

З.Ы. Собсно необходимость в TOrdersAppModule.ExecCommand(...) отпадет сама по себе, если использовать не сам объект а его интерфейс

С уважением,
Евген.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.