您如何看待将 Get-logic 放入 ViewModel 的 getter 中?就像是:
public class DummyViewModel
{
public int Id { get; set; }
private DummyObject myObject;
public DummyObject MyObject
{
get
{
if (MyObject == null)
{
DummyRepository repo = new DummyRepository();
myObject = repo.Get(Id);
}
return myObject;
}
}
}
这是不好的做法还是完全可以?我发现我的控制器通过执行所有获取逻辑而变得非常臃肿,但我真的不知道应该把它放在哪里......
我这样做的原因是,我可以将 ViewModel 传递给不同类型的视图,并且仅根据请求的属性执行必要的数据库查找。
将逻辑放入 VM 中的 getter 中并没有什么问题 - VM 的作用是将数据呈现给视图,并且它应该尽可能准备好“查看”(视图不应该做太多事情(如果任何)在显示数据之前努力塑造数据)。
作为示例,我使用名为GetAvailableClients
在我的虚拟机中,这将是视图绑定到的属性之一。该特定 getter 的工作是过滤数据 - IOW 呈现从完整列表(也保存在 VM 中)中选择的一组精简数据,该数据通常会使用 LINQ 进行过滤,这意味着我已经放置了一些自定义逻辑在吸气剂中。
我不喜欢你的方法的其余部分,如果属性尚未填充,它会转到存储库并获取数据本身。对我来说这是一个禁忌,该财产完全违反了原则单一职责 http://en.wikipedia.org/wiki/Single_responsibility_principle让财产承担太多责任。更不用说,一旦您开始将该属性绑定到 UI,这并不是一个好的做法 - 当用户执行操作时,您的应用程序将突然开始挂起,因为您的属性 getter 已被触发,并且它已决定调用数据库或 Web 服务,更糟糕的是,调用是在 UI 线程上完成的......它变得丑陋。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)