【发布时间】:2014-08-15 17:02:00
【问题描述】:
我试图更好地理解 MVC 模式和关注点分离,特别是关于什么构成“业务逻辑”。我最近被分配到一个现有的 asp.net mvc 4 项目,以前从未使用过 MVC 模式。由于我一直在熟悉该项目和 MVC,因此我在一个类似于以下内容的视图中发现了代码。根据打开视图的对象的 mapLayer,基本上会生成不同的链接列表(顺便说一下,原始 switch 语句将近 100 行长)。在我看来,这种逻辑是“业务逻辑”,应该重新分解为模型,而不是留在视图中。我对么?为什么,或者为什么不?
示例查看代码段(通用):
<ul id="tabsMore">
@switch (Model.MapLayerId)
{
case "LayerID1":
<li><a href="@Url.Action("linkNameX", new { clientID = Model.Type1Model.clientID })">displayNameX<span> </span></a></li>
...
break;
case "LayerID2":
<li><a href="@Url.Action("linkNameY", new { clientID = Model.Type1Model.clientID })">displayNameY<span> </span></a></li>
...
if (int.Parse(@Model.ObjectId.Substring(3, 1)) > 3)
{
<li><a href="@Url.Action("linkNameZ", new {linkId = Model.ObjectId})">displayNameZ<span> </span></a></li>
...
}
...
break;
...
case "LayerIDN":
<li><a href="@Url.Action("linkNameZ", new { clientID = Model.Type2Model.clientID })">displayNameW<span> </span></a></li>
...
break;
}
</ul>
【问题讨论】:
-
int.Parse(@Model.ObjectId.Substring(3, 1)) > 3应该在模型中。似乎其中很多都可以重构以一起删除 swtich 语句。这可能是您在codereview.stackexchange.com 上发布的内容。 -
@ErikPhilips 同意可以重构很多东西。很明显,列表的标记属于视图。澄清一下:大多数情况下都有不重叠的链接列表,应该在模型中处理哪一层的情况?
-
我不知道你的代码的其余部分是什么样的,但由于在你当前的代码中你需要的只是clientID、linkId和ObjectId,它可以用@重构为一个类987654324@ 和
<type> Id.
标签: c# asp.net-mvc-4 business-logic