Согласно примечаниям к Presentation Model Мартина Фаулера, а также к документации MSDN о Presentation Model, поясняется, что класс Presentation Model не должен знать о классе пользовательского интерфейса, а класс Business Model не должен знать о классе Presentation Model.
Пользовательский интерфейс должен активно связываться с моделью представления, модель представления, в свою очередь, будет координировать работу с одним или несколькими объектами модели предметной / бизнес-модели для выполнения работы. Модель представления в основном представляет данные модели предметной области таким образом, чтобы обеспечить максимальное связывание данных в пользовательском интерфейсе, позволяя пользовательскому интерфейсу принимать как можно меньше решений и, таким образом, повышать тестируемость поведения представления. Это также делает класс модели представления универсальным, т.е. независимым от какой-либо конкретной технологии пользовательского интерфейса.
Теперь предположим, что есть форма списка (скажем, CustomerList), есть другая форма Root (скажем, Customer) и есть вариант использования, позволяющий редактировать клиента из формы CustomerList одним нажатием кнопки.
Для простоты обсуждения учтите, что некоторые действия выполнялись, когда список клиентов открывался из меню (т. Е. Щелкнуло меню клиента), а список клиентов отображался из события щелчка меню.
Теперь, согласно описанному выше варианту использования, мне нужно открыть пользовательский интерфейс клиента (один клиент) из списка клиентов. Как мне это сделать?
Создание необходимых объектов (BusinessModel, PresentationModel, UI) в событии нажатия кнопки «Редактировать» и оттуда вызова пользовательского интерфейса CustomerEdit?
Создать пользовательский интерфейс CustomerEdit из класса модели презентации и показать пользовательский интерфейс из модели презентации?
это может быть сделано любым из двух способов ниже -
а. Создайте объекты в следующей последовательности DomainModel-> PresentationModel-UIForm
б. Используйте Unity.Resolve ();
В любом случае, Presentation Model нарушается, поскольку P-модель теперь должна ссылаться на конкретную сборку пользовательского интерфейса, где находится CustomerEdit. Также P-модель должна ссылаться и использовать WinForm напрямую, что делает ее менее зависимой от технологии пользовательского интерфейса.
Несмотря на то, что нарушения теоретически и могут быть проигнорированы, я все равно хотел бы узнать мнение сообщества о том, иду ли я в неправильном направлении. Пожалуйста, предложите, если есть лучший способ позвонить в детскую форму из списка (родительского).