我正在使用MVVM模式构建WPF应用程序,选择了Caliburn.Micro框架来提高开发效率。
与传统的基于MVVM的应用程序不同,我在ViewModel (VM)层下添加了业务层(BL)以处理特定业务情况的逻辑。 VM仅剩下数据绑定和简单的转换/呈现逻辑。在BL下面是一个额外的Data Access层(DAL),该层封装了由Entity Framework构建的Data model(DM)。
我对WPF、MVVM以及当然,对Caliburn几乎一无所知。我已经阅读了大量有关Caliburn使用的问题和答案,现在正试图在我的应用程序中使用我迄今为止学到的内容。
我的问题是:
- 上述分层架构听起来是否合理?
- 在应用程序启动程序中,我们可以注册所有将稍后使用的服务(例如EventAgreggator (EA)、WindowManager或额外的安全性和验证服务),以及所有相关的VM吗? 这些应通过构造函数或其他方式注入VM实例中(假设我将使用SimpleContainer)。 因此,从任何正确设计和实例化的VM中,我们可以准备好这些服务以供使用。 如果我理解正确,Caliburn及其IoC会维护一种全局状态,以便不同的VM可以使用和共享它。
- 导航:我知道这个主题已经被讨论了很多次。 但为了确保我正在正确地做事情:将有一个ShellViewModel作为整个应用程序的主窗口,其中动态加载了不同的VM(或屏幕)。 每个VM都可以继承Screen、ViewModelBase或NotifyChangedBase。 当我在,例如,VM A中,并且想要切换到VM B时。 我会从VM A内部发送一条消息(使用EA)到ShellViewModel,说明我要切换到B。 ShellViewModel接收消息并重新加载其CurrentViewModel属性。 应如何管理要加载的VM列表的合适数据结构?Conductor或WindowManger之类的东西如何进入场景?
- Caliburn能否以某种方式支持对数据库的访问(通过EF)。 或者这种访问只应向VM和/或BL公开?
非常感谢!