【发布时间】:2010-06-23 18:16:53
【问题描述】:
在非平凡的桌面应用程序中实现松散耦合的 MVC 结构有哪些鲜为人知的技巧(例如,具有至少两个级别的视图/控制器和多个模型)?
【问题讨论】:
-
您使用什么语言、框架和/或开发环境?
标签: model-view-controller architecture
在非平凡的桌面应用程序中实现松散耦合的 MVC 结构有哪些鲜为人知的技巧(例如,具有至少两个级别的视图/控制器和多个模型)?
【问题讨论】:
标签: model-view-controller architecture
使用接口。
很多。我喜欢使用“IDoThisForYou”风格(即使是在这不是惯用的语言中),因为接口代表另一个类可以使用的角色。
让控制器负责控制交互
控制器控制域对象、服务等之间的交互。
使用事件在控制器之间传递信息
让每个需要信息的控制器订阅事件。使用接口。
不要将演示信息放在您的域对象上
相反,允许控制器创建具有您需要的信息的演示者或视图模型。这不包括“ToString()”。如果您使用的语言没有多重继承,您最终可能会在演示者之间出现一些重复。没关系 - 复制比耦合好,而且 UI 也发生了很大变化。
不要在你的 gui 中加入逻辑
相反,允许控制器创建具有您需要的信息的演示者或查看 mdoel。这包括像“MyAnimal.Species.Name”这样的火车残骸 - 改为呈现“SpeciesName”。
测试一下
手动。没有替代品。单元和验收测试还有很长的路要走,但是没有什么比启动应用程序并实际使用您编写的混乱来发现它有多混乱更重要了。不要在没有亲自动手的情况下将其传递给 QA。
哦,不要在单元测试中模拟领域对象。这不值得。使用构建器。
【讨论】:
在您的界面中声明事件处理程序(对视图很重要)。这样,您可以松散地耦合由控制器管理的事件处理。如果您的应用程序是多线程的,则在使用视图时可能需要使用 InvokeRequired。
【讨论】: