gpt4 book ai didi

asp.net - 在 Asp.net MVC 4 项目的 UI 层中不保留任何业务逻辑

转载 作者:行者123 更新时间:2023-12-02 02:01:57 26 4
gpt4 key购买 nike

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

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

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

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

在我的 UI .aspx 层中如下所示

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

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

你对此有何看法?

最佳答案

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

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

这样你就可以得到干净的多层应用程序。当然,这意味着您必须通过创建和设置 DTO 值来编写更多代码。一些使用automapper为此,但我不想这样做。为什么?手动完成并不太难,而且更好 - 没有魔法。

关于asp.net - 在 Asp.net MVC 4 项目的 UI 层中不保留任何业务逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16813450/

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