【发布时间】:2016-02-22 16:00:43
【问题描述】:
我正在使用 MVVM 模式构建 WPF 应用程序,而 Caliburn.Micro 是促进开发的框架选择。
与传统的基于 MVVM 的应用程序不同,我在 ViewModel (VM) 层下方添加了一个业务层 (BL) 来处理特定业务案例的逻辑。 VM 留下了数据绑定和简单的转换/表示逻辑。 BL 下方是一个额外的数据访问层 (DAL),它封装了下面使用 Entity Framework 构建的数据模型 (DM)。
我对 WPF、MVVM 都很陌生,当然,我对 Caliburn 几乎一无所知。我已经阅读了大量关于 Caliburn 用法的问题和答案,现在尝试在我的应用程序中使用我迄今为止所学的知识。
我的问题是:
- 上面的分层架构听起来还可以吗?
- 在应用程序引导程序中,我们可以注册所有稍后将使用的服务(如
EventAgreggator(EA)、WindowManager或额外的安全和验证服务)以及所有相关的 VM,这是否正确?这些应该通过构造函数注入到 VM 实例中(假设我将使用 SimpleContainer)。因此,从任何经过适当设计和实例化的 VM 中,我们都可以准备好使用这些服务。如果我理解正确的话,Caliburn和它的IoC保持一种全局状态,以便不同的虚拟机可以使用和共享它。 - 导航:我知道这个话题已经讨论过很多次了。但只是为了确保我做对了:会有一个
ShellViewModel作为整个应用程序的主窗口,动态加载不同的虚拟机(或屏幕)。每个 VM 可以继承Screen或ViewModelBase或NotifyChangedBase。当我进入时,假设VM A并想切换到VM B。我会从VM A内部向ShellViewModel发送一条消息(使用EA),说我想更改为B。ShellViewModel接收消息并重新加载其CurrentViewModel属性。维护要加载的 VM 列表的适当数据结构应该是什么?Conductor或WindowManger这样的东西怎么会进来? - 可以/应该
Caliburn以一种或另一种方式支持对数据库的访问(通过 EF)。或者此访问权限应仅向 VM 和/或 BL 公开?
非常感谢!
【问题讨论】:
标签: mvvm navigation caliburn.micro