【问题标题】:WPF - Where to put DAL in 3-tier architecture design with MVVM?WPF - 将 DAL 放在 MVVM 的 3 层架构设计中的什么位置?
【发布时间】:2011-03-12 12:09:41
【问题描述】:
我对整个 n 层架构还很陌生,我对将 MVVM 与 3 层应用程序一起使用有一些疑问。
据我了解,我们有:
- 视图或 UI 层,即 xaml 文件
- 模型,它是一个自定义类,包含“建模”数据对象的属性和方法
- ViewModel,它是 View 和 Model 之间的“适配器”
- 一个 WCF 服务器,它应该处理数据库访问以及其他事情
- 用于存储数据的 SQL 数据库
我的问题是,如何使用数据访问层将所有这些放在一起?使用 MVVM,我会让模型包含加载/更新自身的方法。相反,这应该是在 WCF 服务器上发生的事情吗?如果是这样,对服务器的引用应该存储在 Model 还是 ViewModel 中?又该如何称呼呢?
【问题讨论】:
标签:
wpf
mvvm
data-access-layer
n-tier-architecture
【解决方案1】:
严格来说,DAL 不是 MVVM 模式的一部分。 DAL 位于模型“后面”的某个地方,视图和视图模型应该对 DAL 一无所知。
例如,将实体公开为模型的属性,在第一次访问时加载。
public class ProductListModel
{
public List<Product> AllProducts
{
get
{
if (_AllProducts == null)
_AllProducts = MyServiceProxy.LoadAllProducts(...)
return _AllProducts;
}
}
public void SaveChanges()
{
if (_AllProducts != null)
MyServiceProxy.SaveProducts(AllProducts);
}
}
【解决方案2】:
数据访问是一个独立且独立的问题...您可以通过多种不同的方式和模式来实现它,但在所有情况下,最终结果都是您的 MVVM 类将使用的模型。
WCF 可能返回模型中使用的类,或者它可能返回设计为数据传输对象的更简单的类,在这种情况下,您可以将这些对象转换为模型中定义的类的实例...
实际数据访问(从数据库本身当然是在 WCF 的服务器端编码的......