MVVM:负责加载相关数据,哪一层?

MVVM:负责加载相关数据,哪一层?,mvvm,Mvvm,我有一个具有A类实体的应用程序。A有一个字段B,它被一些viewmodels使用,但不是全部。字段B在不同来源的单独加载操作中加载 哪个层应负责加载此字段B?我认为有三种选择: 在A中实现逻辑,以便在访问B时加载B。它可以工作,但需要类中的一些逻辑。我觉得实体类应该有最少的逻辑,当然没有从数据源加载数据的逻辑(但我可能错了) 让数据访问层(DAL)在加载A的实例时加载B。这不是最佳做法,因为从数据源(远程服务器)加载数据的速度很慢,并且只有少数A的实例需要字段B 如果需要,让viewmodel使

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

哪个层应负责加载此字段B?我认为有三种选择:

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

    选择#3

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

    我只需向表示主项的每个视图模型中注入一个依赖项,然后允许它获取数据。这还允许用户在项目视图模型上使用忙指示器thorugh IsBusy属性简单地通知用户

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

    所以从3开始,若下载子对象的逻辑增长到足以将其包含在命令类中,那个么就这样做吧。但要不惜一切代价避免静态默示

    对不起,语法不好