绘制逻辑中的 ViewModel 或 View 职责
ViewModel or View responsibility in draw logic
昨天我和我的一位工作伙伴就 ViewModel 和 View 职责进行了一些讨论。我有一个文本会在不同的上下文中发生变化,例如视图中的 Edit/New 模式。其中一位团队程序员写了这样的东西:
@if (Model.IsNew)
{
@Resources.New;
}
else
{
@(Resources.Editing + " " + Model.Name);
}
我捍卫这个逻辑是 ViewModel 的责任:
在视图模型中:
public string PageTitle => IsNew ? Resources.New : $"{Resources.Editing} {Name}";
然后在视图中:
<h2>
@Model.PageTitle
</h2>
但我的同事捍卫谁是打印逻辑,所以 View 有责任。
我们都有自己的论点,但我想知道社区的意见。
我想说这段逻辑与视图更相关 - 因为我们正在谈论页面 标题。
但是我没有创建嵌套语句,而是为此创建了一个 Html 帮助程序 f.i。 Html.PageTitle(Model)
.
如果你查看MVC模式的定义,你可以看到:
A view generates new output to the user based on changes in the model.
的意思是,如果要妥善遵守Separation of Concerns原则,视图负责显示UI中的数据,模型代表属性包您将查看的数据。
所以基本上你的视图的底层模型就是你的视图模型,通过这个我会把这个 属性 放入视图模型和将它设置为 controller/viewmodel builder/service/whatever 的逻辑符合您的需求。
为了进一步证明这一点,请问您的同事 unit/integaration 在视图中测试代码有多容易?带来一个新的测试只是为了断言这个逻辑的结果?没有给我带来真正的商业价值...
要进一步扩展此主题以将关注点分开,您可以:
- 为新模式、编辑模式等创建非常精简且集中的控制器
- 根据这些模式分离视图模型,因此您的视图模型与视图处于 1-1 关系。
虽然这些都是自以为是,但一定要创造一个适合每个人的环境。
其ViewModel代码,完全同意Kayess。视图不必弄清楚它们显示的内容。
在整个视图中看到 @{ } 让我脊背发凉。它总是有错误、无法测试的代码。
昨天我和我的一位工作伙伴就 ViewModel 和 View 职责进行了一些讨论。我有一个文本会在不同的上下文中发生变化,例如视图中的 Edit/New 模式。其中一位团队程序员写了这样的东西:
@if (Model.IsNew)
{
@Resources.New;
}
else
{
@(Resources.Editing + " " + Model.Name);
}
我捍卫这个逻辑是 ViewModel 的责任:
在视图模型中:
public string PageTitle => IsNew ? Resources.New : $"{Resources.Editing} {Name}";
然后在视图中:
<h2>
@Model.PageTitle
</h2>
但我的同事捍卫谁是打印逻辑,所以 View 有责任。
我们都有自己的论点,但我想知道社区的意见。
我想说这段逻辑与视图更相关 - 因为我们正在谈论页面 标题。
但是我没有创建嵌套语句,而是为此创建了一个 Html 帮助程序 f.i。 Html.PageTitle(Model)
.
如果你查看MVC模式的定义,你可以看到:
A view generates new output to the user based on changes in the model.
的意思是,如果要妥善遵守Separation of Concerns原则,视图负责显示UI中的数据,模型代表属性包您将查看的数据。
所以基本上你的视图的底层模型就是你的视图模型,通过这个我会把这个 属性 放入视图模型和将它设置为 controller/viewmodel builder/service/whatever 的逻辑符合您的需求。
为了进一步证明这一点,请问您的同事 unit/integaration 在视图中测试代码有多容易?带来一个新的测试只是为了断言这个逻辑的结果?没有给我带来真正的商业价值...
要进一步扩展此主题以将关注点分开,您可以:
- 为新模式、编辑模式等创建非常精简且集中的控制器
- 根据这些模式分离视图模型,因此您的视图模型与视图处于 1-1 关系。
虽然这些都是自以为是,但一定要创造一个适合每个人的环境。
其ViewModel代码,完全同意Kayess。视图不必弄清楚它们显示的内容。
在整个视图中看到 @{ } 让我脊背发凉。它总是有错误、无法测试的代码。