在使用 Prism 和 MEF/Unity 开发相当大的应用程序时,我总是会在使用事件、服务或两者之间进行选择。而且我无法决定什么是最有用的。也许我的架构有问题(因为这个决定不应该首先做出)但我不明白是什么。
这是一个典型的例子:我的应用程序有一个主窗口和许多由模块或用户操作按需创建的从属窗口。应用程序决定从属窗口的 chrome 的外观和行为,记住窗口位置等,而内容本身是在模块中的某个位置创建的。还有很多用户操作导致隐藏/显示/带到窗口前面。为了实现这一切,我目前有一个监听 CreateWindow/SetWindowState/.. 事件的 WindowManager 服务。
这有以下好处:
- 使用它的类只知道 IEventAggregator(它们已经在大多数时间用于其他事件)和 WindowManager 消耗的事件,而不是 WindowManager 本身
- 像 ViewModels 这样的类不直接处理窗口。相反,他们通过标题或 id 以及封装了所需内容的小事件类来引用它们。
- 不需要单独的 IWindowManager 接口只是为了在测试中模拟它
和提款:
- WindowManager 可以完全独立使用,但现在它需要订阅事件。或者可能更好,其他一些班级必须处理这个问题。
- 将其扩展为显示模式对话框有些棘手:如果 VM 触发事件以显示对话框,则 Publish 调用仅在对话框关闭后返回至关重要
- WindowManager 可作为服务使用,它位于 CompositionContainer 中,为什么不直接使用它呢?
直接使用该服务只会改变收益/提款,而且似乎没有明显的赢家。
问题:你会使用什么作为指导规则来选择一个或另一个,或者你宁愿总是只选择一个,还是两者都选?我的应用程序设计中是否有什么特别错误的地方需要我做出这个决定?