2

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

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

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

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

4

1 回答 1

2

去#3。

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

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

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

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

抱歉语法不好。

于 2012-09-17T09:54:57.097 回答