3

我有一个 MVC 4 项目,其中 UI 被强类型化为 ViewModel。视图具有某些需要在某些场景中显示的元素。这些场景由业务逻辑控制,所以我不想在 UI 中有这样的条件语句

If (Role.Equals(“Admin”))
{
  <a href=””&gt; Admin Link here</a>
}

我所拥有的是业务层为我创建了一个视图模型。所以上面的语句现在在业务层如下

If (Role.Equals(“Admin”))
{
 ViewModelClassObject.ShowAdminLinks = true;
}

在我的 UI .aspx 层如下

If (model.ShowAdminLinks)
{
  <a href=””&gt; Admin Link here</a>
}

现在的问题是,我在一个单独的类库中拥有视图模型类,业务和 Web UI 层都引用了该类库。由于 viewmodel 类还具有映射到 UI 层的文本框的属性,我在其中执行一些验证,如必填字段验证器、比较、范围验证器,我现在需要在我的 ViewModel 类中引用 System.web.mvc 层图书馆。这是不好的编码习惯吗?尽管代码可以编译和构建,但我感觉我可能正在做一些可能是代码味道的事情。或者,我也在考虑将 ViewModel 类移回 Web UI 层,并在 Web 项目中使用某种视图模型构建器,通过调用业务层方法来创建视图模型。

您对此有何看法?

4

1 回答 1

2

我会将 Web 项目使用的 ViewModel 和业务层使用的 DTO 分开。

原因是您可能不需要ShowAdminLinks业务层中的属性或某些下拉值。所以业务层只知道它需要知道的数据。

这样你就可以得到干净的多层应用程序。当然,这意味着您必须通过创建和设置 DTO 值进行更多编码。有些人为此使用自动映射器,但我不喜欢。为什么?手动操作并不难,而且效果更好——没有魔法。

于 2013-05-29T12:41:11.980 回答