我正在重新设计一个 Winforms 应用程序,并希望为 UI使用Presentation Model 模式的变体。如果我做得正确,有人可以从以下解释中告诉我吗?
我决定按如下方式设置依赖项:
Model <---- Presentation Model <---- View
那是:
该模型除了自己之外什么都不知道。
演示模型具有对模型的引用(反之亦然)。
视图具有对表示模型的引用(反之亦然)。
我正在使用 Winforms 数据绑定来保持视图和表示模型同步。
现在这一切都像一个魅力,除了当我需要处理例如单击表单的“关闭”按钮时。由于表示模型没有对视图的引用,它不能订阅视图发布的任何事件。因此,我想出了以下拐杖:
Presentation Model View
+--+ +--+
| | | |
| | | <--------X closeButton.Click event fires
| | | |
| | +--------X |
| | CloseRequested = true | | |
| | +--------> |
| | | |
| | CloseRequested CloseRequested | |
| <-----------------------------------< |
| | | |
| X--------+ | |
| | | IsClosed = true | |
| <--------+ | |
| | | |
| | IsClosed MustClose | |
| >-----------------------------------> |
| | | |
| | | X--------> view.Close()
| | | |
+--+ +--+
那是:
用户单击“关闭”按钮。
按钮的
Click
事件在视图中被捕获,它通过设置属性做出反应CloseRequested
。数据绑定将此值传输到表示模型中的相应属性。
表示模型通过设置它的属性来响应这个变化
IsClosed
。数据绑定将此值传输到视图的
MustClose
.视图通过关闭自身来响应这种变化。
演示模型与视图很好地分离,反之亦然,但是这只是处理单个按钮命令的大量工作。考虑到我决定的依赖关系图,有没有更简单的方法?