gpt4 book ai didi

MVVM:加载相关数据的职责,在哪一层?

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

我有一个具有 A 类实体的应用程序。A 有一个字段 B,它由一些 View 模型使用,但不是全部。字段 B 在不同来源的单独加载操作中加载。

哪个层应该负责加载这个字段B?我看到了三种选择:

  • 在 A 中实现逻辑以在 B 被访问时加载它。它可以工作,但需要 A 类中的一些逻辑。我觉得实体类应该有最少的逻辑,当然没有与从数据源加载数据相关的逻辑(但我可能错了)。
  • 让数据访问层 (DAL) 在加载 A 的实例时加载 B。这不是最优的,因为从数据源(远程服务器)加载数据很慢,并且只有少数 A 的实例需要该字段B.
  • 如果需要,让 View 模型使用 DAL 加载 B。在我看来,这(一个在 MVVM 方面相对缺乏经验的人)是最“MVVM-y”的方式。

  • 与#1 相比,#3 在“它只是工作”因素方面似乎不那么“优雅”(使用#1,访问字段 B 将自动从数据源加载它)。但是#3似乎以更好的方式分离了关注点,因为实体对象没有被赋予加载更多数据的责任。

    最佳答案

    去#3。

    实体模型,在客户端应用程序的情况下应该是数据传输对象,根本不应该有任何逻辑。当您尝试编写单元测试或/和更改 dto 时,这将(很可能)节省大量时间。

    我只需将依赖项注入(inject)代表主项目的每个 View 模型,然后让它获取数据。这也将允许通过项目 View 模型上的 IsBusy 属性简单地用忙碌指示符通知用户。

    您还可以实现一个单独的命令类来处理下载任务,但它需要一些上层服务来通知用户正在进行操作,但这是我能想象的最干净的方法。

    所以从 3 开始,如果下载 child 的逻辑会增长到足以将它封装在命令类中,那就去做吧。但要不惜一切代价避免静电植入。

    抱歉语法不好。

    关于MVVM:加载相关数据的职责,在哪一层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12454111/

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