Здравствуйте, 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(...) отпадет сама по себе, если использовать не сам объект а его интерфейс
С уважением,
Евген.