【问题标题】: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 的服务器端编码的......

    【讨论】:

      【解决方案3】:

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

      [链接文字][1]

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

      【讨论】:

        猜你喜欢
        • 2013-05-27
        • 2013-02-06
        • 2014-06-12
        • 2013-05-31
        • 1970-01-01
        • 2023-03-11
        • 2021-08-29
        • 2016-10-05
        • 2016-04-14
        相关资源
        最近更新 更多