WPF - 将 DAL 放在 MVVM 的 3 层架构设计中的啥位置?

Posted

技术标签:

【中文标题】WPF - 将 DAL 放在 MVVM 的 3 层架构设计中的啥位置?【英文标题】: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 中?又该如何称呼呢?

【问题讨论】:

【参考方案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 的服务器端编码的......

【讨论】:

【参考方案3】:

有大量非常冗长的博客文章和描述来组织这一切。这是我最近(今天)读到的一篇:

[链接文字][1]

[1]: http://dotnetslackers.com/articles/data-management/About-layers-separation-and-Entity-Framework.aspx "EF 和图层上的 Dino Esposito

【讨论】:

以上是关于WPF - 将 DAL 放在 MVVM 的 3 层架构设计中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

我们一起写框架MVVM的WPF框架—DataGrid

我在哪里将登录逻辑放在WPF中,如何在MVVM中处理它?

分层企业应用程序中的 WPF MVVM 架构

关于WPF mvvm的一些问题

新的 .NET 3.5 项目:使用哪种 DAL 技术?

C# EF6+DAL+BLL开发框架