MVVM:加载相关数据的责任,是什么层?

时间:2012-09-17 06:29:46

标签: mvvm

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

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

  1. 在A中实现逻辑,以便在访问时加载B.它有效,但在A类中需要一些逻辑。我觉得实体类应该具有最小的逻辑,当然没有与从数据源加载数据相关的逻辑(但我可能是错的)。
  2. 让数据访问层(DAL)在加载A的实例时加载B.这不是最佳的,因为从数据源(远程服务器)加载数据很慢,只有少数几个A的实例需要字段B。
  3. 如果需要,请让viewmodel使用DAL加载B.在我看来(对MVVM来说相对缺乏经验的人)来说,这是最“MVVM-y”的做法。
  4. 与#1相比,#3看起来不那么“优雅”,因为它涉及“它只是工作”因素(使用#1,访问字段B会自动从数据源加载它)。但#3似乎以更好的方式将问题分开,因为实体对象没有负责加载更多数据。

1 个答案:

答案 0 :(得分:2)

去#3。

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

我只是在表示主项目的每个视图模型中注入依赖项,然后允许它获取数据。这也可以简单地通过项目视图模型上的繁忙指示器通知IsBusy属性来通知用户。

你也可以使用一个单独的Command类来处理下载任务,但它需要一些高级服务来通知用户进行进程操作,但这是我能想象到的最干净的方法。

所以从3开始,如果下载child的逻辑将合理地增长到将其封装在命令类中,那就去做吧。但是尽量避免所有费用造成的静态不当。

抱歉语法不好。