在重要的桌面应用程序中构建 MVC 的提示/技巧

发布于 2024-09-06 19:09:30 字数 66 浏览 3 评论 0原文

在一个重要的桌面应用程序中实现松散耦合的 MVC 结构有哪些鲜为人知的技巧(例如,至少有两层视图/控制器和多个模型)?

What are some lesser known tips for implementing a loosely-coupled MVC structure in a non-trivial desktop application (e.g. having at least two levels of views/controllers and more than one model)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱格式化 2024-09-13 19:09:30

使用界面。

很多。我喜欢使用“IDoThisForYou”样式(即使在不惯用的语言中),因为接口代表另一个类可以使用的角色。

让控制器负责控制交互

控制器控制领域对象、服务等之间的交互。

使用事件在控制器之间传递信息

让每个需要信息的控制器订阅事件。使用接口。

不要将演示信息放在域对象上

相反,允许控制器创建包含您需要的信息的演示者或视图模型。这不包括“ToString()”。如果您使用的语言没有多重继承,那么演示者之间可能会出现一些重复。没关系 - 重复比耦合更好,而且 UI 无论如何都会改变很多。

不要将逻辑放入您的 gui

相反,允许控制器创建一个包含您需要的信息的演示者或视图 mdoel。这包括像“MyAnimal.Species.Name”这样的火车残骸 - 让它显示“SpeciesName”。

手动测试

。没有替代品。单元和验收测试还有很长的路要走,但是没有什么比启动应用程序并实际使用您编写的混乱内容来找出它有多混乱更好的了。不要在没有亲自尝试的情况下将其传递给 QA。

哦,不要在单元测试中模拟域对象。这是不值得的。使用建造者。

Use interfaces.

A lot. I like using the "IDoThisForYou" style (even in a language where this isn't idiomatic) because an interface represents a role that another class can use.

Make the controllers responsible for controlling interaction

The controllers control interaction between domain objects, services, etc.

Use events to pass information between controllers

Let every controller who needs information subscribe to the event. Use an interface.

Don't put presentation information on your domain objects

Instead, allow the controller to create a presenter or view model which has the information you need. This includes no "ToString()". If you're in a language without multiple inheritance you might end up with a bit of duplication between presenters. That's OK - duplication is better than coupling, and the UI changes a lot anyway.

Don't put logic in your gui

Instead, allow the controller to create a presenter or view mdoel which has the information you need. This includes train wrecks like "MyAnimal.Species.Name" - make it present "SpeciesName" instead.

Test it

Manually. There is no substitute. Unit and acceptance testing goes a long way, but there's nothing like bringing the app up and actually using the mess you wrote for finding out how messy it is. Don't pass it to the QAs without having a go yourself.

Oh, and don't mock out domain objects in unit tests. It's not worth it. Use a builder.

流年里的时光 2024-09-13 19:09:30

在界面中声明事件处理程序(对于视图很重要)。通过这种方式,您可以松散地耦合由控制器管理的事件处理。如果您的应用程序是多线程的,则在使用视图时可能需要使用 InvokeRequired。

Declare event handlers in your interfaces (important for the views). This way you can loosely couple event handling which is managed by the controller. You may need to use the InvokeRequired when working with the view if your application is multi-threaded.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文