gpt4 book ai didi

WPF MVVM WCF 客户端/服务器架构

转载 作者:行者123 更新时间:2023-12-03 12:11:56 25 4
gpt4 key购买 nike

我想构建一个基本的 wpf/mvvm 应用程序,它从带有 WCF 的服务器获取数据,并允许客户端显示/操作(使用 CRUD 操作)这些数据。

到目前为止,我为架构考虑过类似的事情:

  • 一个“全局”模型层,它实现了验证、研究标准、INotifyPropertyChanged 和服务契约(Contract)
  • 一些服务层,主要是 Entity Framework 4的一层,实现模型层的契约并允许我访问和操作数据。
  • 请注意,我也想要一个离线数据源,比如 XML 或其他东西,以及另一个服务(我计划使用一些 DI/IoC)
  • WCF 层
  • 用于数据存储客户端的额外层?
  • View 模型

  • 我对 Views/ViewModel 部分很清楚,但我很难弄清楚模型、WCF 和 View 模型之间的关系。

    我的问题是:
  • 我应该如何处理 EF 生成的模型?摆脱它然后去
    对于代码优先的方法,手动进行映射
    数据库?
  • 对于 WCF 数据传输,我应该有关系
    我的模型中的属性,即产品有一个客户而不是一个
    顾客ID ?
  • 我应该在 WCF 和
    ViewModel,用于存储和操作数据还是最好的
    将 ViewModel 直接插入 WCF 的做法是什么?

  • 欢迎使用这种架构的任何其他提示......

    最佳答案

    对于 3 层 WPF 应用程序的体系结构有不同的解决方案,但这是一种可能性:

    1+2) 一种解决方案是创建代表客户端应用程序实际需要的“中间”对象。
    例如,如果您的应用程序需要显示有关产品的信息以及关联的客户名称,您可以构建以下对象:

    public MyProduct
    {
    // Properties of the product itself
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    ...

    // Properties that come from the Customer entity
    public string CustomerName { get; set; }
    }

    然后,您可以公开从 ID 返回您的产品的无状态 WCF 服务:
    [ServiceContract]
    MyProduct GetProductByID(int productID);

    在您的应用程序的服务器端(即您的服务的实现),您可以返回 MyProduct通过 EF 查询数据库来构建实例(每次调用一个上下文):
    public MyProduct GetProductByID(int productID)
    {
    using (DBContext ctx = new ....)
    {
    return from p in ctx.Products
    where p.ID == productID
    select new MyProduct
    {
    ProductID = p.ID,
    ProductName = p.Name,
    CustomerName = p.Customer.Name // Inner join here
    };
    }
    }

    3) 在 WCF 服务和 ViewModel 之间添加附加层可能被视为过度设计。恕我直言,可以直接从 ViewModel 调用 WCF 服务。 WCF 生成的客户端代理代码具有您模型的实际作用(至少是您模型的一部分)。

    编辑:

    why MyProduct should reference the CustomerName instead of the Customer.In my case, Customer would have many properties I'd work with. Woudn't this "mapping" be too expensive ?



    您可以使用实际实体。但在客户端,由于它是 3 层架构,您无法通过导航属性访问数据库。如果有嵌套 Customer属性(类型 Customer),客户端将有权访问 theProduct.Customer.Products ,这没有意义,您不能以这种方式延迟加载实体(客户端没有数据库上下文)。

    扁平化的“中间”POCO 是更简单的 IMO。没有性能问题,映射很简单,与 DB 请求时间相比,此特定操作的 CPU 使用率非常小。

    关于WPF MVVM WCF 客户端/服务器架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11432915/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com