![]() |
1
10
把逻辑放在vms的getter中并没有错——vm的角色是向视图显示数据,并且它应该尽可能准备好“查看”(视图不应该在显示数据之前做太多(如果有的话)工作来塑造数据)。
例如,我使用名为
不过,我不喜欢的是您的方法的其余部分,如果属性没有被填充,那么它会转到存储库并获取数据本身。对我来说,这是一个“不”字,财产完全违反了 single responsibility 让财产承担太多的责任。更不用说,这不是一个好的实践,一旦你开始绑定该属性到用户界面-突然你的应用将开始挂起当用户执行一个操作时,因为你的属性getter已经被触发,它已经决定调用数据库或webservice,并使更糟糕的是,调用是在ui线程上完成的……只是变得很难看。 |
![]() |
2
2
就我个人而言,我的视图模型中没有包含任何逻辑——它们是相当愚蠢的DTO。我当然不会让vm通过存储库来负责自己的加载。 |
![]() |
3
2
你的问题很笼统,但我会尽我所能回答。 我不喜欢这些东西: 1)可测试性。您的属性正在创建存储库,您将如何模拟存储库并测试它? 2)延迟加载。延迟加载可能会影响性能,ViewModel不应该这样做。如果将viewmodel绑定到包含数百个条目的网格,会发生什么情况? 3)公开ID。您的ID属性(我假设它是实体的主键值)有一个setter。你要在视图中显示这个id吗?如果不是,就把它扔掉,如果是的话,就把setter移走。setter意味着视图必须执行某种biz功能来查找正确的值,这会破坏soc。 |