gpt4 book ai didi

c# - 使用暴露的 API 在 MVVM 应用程序中进行大量包装

转载 作者:行者123 更新时间:2023-12-03 10:45:29 27 4
gpt4 key购买 nike

我有一个使用 WPF 和 MVVM 开发的桌面应用程序,可以通过公开的 API 用作库。

我的问题是我发现自己做了很多包装。例如,我有一个客户实体。该实体必须由 API 包装,以提供 Save()、Delete() 等功能。同时 GUI 中使用的 ViewModel 需要包装实体,以提供与 API 相同的功能并添加 GUI 特定属性,例如:IsSelected、IsExpanded 等。

我对这个问题的解决方案是将暴露的 api 包装在 ViewModel 中,如下所示:

Architecture of my application

但我仍然为我的客户提供 3 个类(class):

  • 映射数据库的实体,
  • 通过 API 公开并包装数据库实体的模型,
  • 以及包装 API 模型的 View 模型。

  • 添加属性需要我在 3 或 4 个地方进行更改,而我的很多代码只是样板代码,我该如何设计我的应用程序以减少包装?

    最佳答案

    您可以扩展,而不仅仅是包裹在外观中。

    因此,使用您的 MVVM 实现,模型将扩展(继承)映射到数据库的实体。然后在正确的继承级别插入任何添加的属性。

    在通过绑定(bind)显示在 UI 中之前,围绕这些模型/实体包装 View 模型是很正常的,尤其是当涉及到列表并且您需要维护每个项目的状态或选项时。如果您的模型/实体开始变得非常大,那么您应该考虑在这里也使用继承/扩展而不是包装。较大实体的重复包装将很快导致您违反 Law of Demeter当您决定开始拥有过深的绑定(bind)路径时,因为您不再希望复制每个外观层中的每个公共(public)属性。

    一旦你开始达到这种复杂程度,我个人更喜欢改变模型的角色——它不再是数据对象的表示,而是成为负责数据存储库操作的业务层。所以它有一个 Save() 和 GetData() 方法,但它对数据实体进行操作,而不是数据实体本身。这降低了复杂性——每个模型都可能处理几个不同的数据实体。这是一个微妙的变化——模型变得更类似于客户端服务或 Controller ,并且您拥有用于功能区域而不是数据类型的模型。

    关于c# - 使用暴露的 API 在 MVVM 应用程序中进行大量包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26860972/

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