NET 平台上的 Model-View-Presenter 模式实践
为什么要写这篇文章
笔者当前正在负责研究所中一个项目,这个项目基于.NET 平台,初步拟采用 C/S 部
署体系,所以选择了 Windows Forms 作为其 UI。经过几此迭代,我们发现了一个问题:
虽然业务逻辑已经封装到 Services 层中,但诸多的 UI 逻辑仍然弥漫在各个事件
Listener 中,使得 UI 显得臃肿不堪,并且存在诸多重复性代码。另外,需求提供方说,
根据实际需要,不排除将部署结构改为 B/S 的可能性,甚至可能会要求此系统同时支持
C/S 和 B/S 两种部署方式。那么,如果保持目前将 UI 逻辑编码到 Windows Forms 中的
方式,到时这些 UI 逻辑将无法复用,修改部署方式的代价很大。
为了解决以上两个问题,笔者和相关人员商量后,决定引入既有成熟模式,重新设
计表示层的架构方式,并重构既有代码。
提到表示层(Presentation Layer)的模式,我想大家脑海中第一个闪过的很可能
是经典的 MVC(Model-View-Controller)。我最初也准备使用 MVC,但经过分析和实
验后,我发现 MVC 并不适合目前的情况,因为 MVC 的结构相对复杂,Model 和 View
之间要实现一个 Observer 模式,并实现双向通信。这样重构起来 Services 层也必须修
改。我并不想修改 Services 层,而且我想将 View 和 Model 彻底隔离,因为我个人并不
喜欢 View 和 Model 直接通信的架构方式。最终,我选择了 MVP(Model-View-
Presenter)模式。
经过两天的重构和验证,目前已经将 MVP 正式引入项目的表示层,并且解决了上文
提到的两个问题。在这期间,积累了少许关于在.NET 平台上实践 MVP 的经验,在这里汇
集成此文,和朋友们共享。
UI 与 P Logic