根据 Martin Fowler 的 Presentation Model 注释以及有关 Presentation Model 的 MSDN 文档,解释说 Presentation Model 类应该不知道 UI 类,类似地,Business Model 类应该不知道 Presentation Model 类。
UI 应该与 Presentation Model 进行广泛的数据绑定,Presentation Model 反过来将与一个或多个 Domain/Business Model 对象协调以完成工作。Presentation Model 基本上以一种促进 UI 中最大数据绑定的方式呈现 Domain Model 数据,允许 UI 做出尽可能少的决策,从而提高 Presentation 行为的可测试性。这也使得表示模型类是通用的,即与任何特定的 UI 技术无关。
现在,考虑有一个 List 表单(比如 CustomerList)和另一个 Root 表单(比如 Customer),还有一个允许通过单击按钮从 CustomerList 表单编辑客户的用例。
为了讨论的简单,考虑当从菜单打开客户列表(即点击客户菜单)并且从菜单点击事件中显示客户列表时发生了一些操作。
现在根据上述用例,我需要从客户列表中打开客户根 UI(单个客户)。我怎么做?
在编辑按钮的单击事件中构建必要的对象(BusinessModel、PresentationModel、UI)并从那里调用 CustomerEdit UI?
从演示模型类构建 CustomerEdit UI 并从演示模型显示 UI?这可以通过以下两种方式中的任何一种来完成 - a. 按照以下顺序创建对象 DomainModel->PresentationModel-UIForm b. 使用 Unity.Resolve(); 无论哪种方式,都违反了表示模型,因为 P 模型现在必须引用 CustomerEdit 所在的具体 UI 程序集。此外,P 模型必须直接引用和使用 WinForm,使其与 UI 技术无关。
尽管这些违规行为在理论上是可以忽略的,但我仍然会征求社区对我是否走错方向的意见。请建议是否有更好的方法从列表(父)表单中调用子表单。
- 拉贾希