gpt4 book ai didi

c# - 将逻辑放入 ViewModel get'ers

转载 作者:行者123 更新时间:2023-11-30 13:21:06 24 4
gpt4 key购买 nike

您如何看待将 Get 逻辑放入 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;
}
}

}

这是不好的做法,还是完全没问题?我发现我的 Controller 通过在那里执行所有的 get-logic 变得非常臃肿,但我真的很纠结我应该把它放在哪里......

我这样做的原因是,我可以将 ViewModel 传递给不同类型的 View ,并且只会根据请求的属性执行必要的数据库查找。

最佳答案

将逻辑放在 VM 的 getter 中没有错 - VM 的作用是将数据呈现给 View ,并且它应该尽可能地准备好“查看”(View 不应该也必须这样做)很多(如果有的话)工作在显示数据之前塑造数据)。

例如,我在我的 VM 中使用名为 GetAvailableClients 的属性,这将是 View 绑定(bind)到的属性之一。该特定 getter 的工作是过滤数据——IOW 提供从完整列表(也保存在 VM 中)中选择的一组精简数据,这些数据通常会使用 LINQ 进行过滤,这意味着我已经放置了一些自定义逻辑在 setter/getter 中。

不过,我不喜欢您的其余方法,如果属性尚未填充,它就会转到存储库并获取数据本身。对我来说这是一个禁忌,该属性完全违反了 single responsibility 的原则。让属性(property)承担太多责任。更不用说,一旦您开始将该属性绑定(bind)到 UI,这就不是一个好的做法——当用户执行某个操作时,您的应用突然会开始挂起,因为您的属性 getter 已被触发,并且它已决定调用数据库或 Web 服务,更糟糕的是,在 UI 线程上进行了调用……它变得丑陋了。

关于c# - 将逻辑放入 ViewModel get'ers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2712394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com