【问题标题】:Moving Validation, Html Helpers to Service Layer in MVC将验证、Html 助手移动到 MVC 中的服务层
【发布时间】:2012-01-05 11:35:17
【问题描述】:

我们在一个 MVC 解决方案中有两个 WebApplication,一个用于桌面,另一个用于移动版本。

架构如下所示:

  • 模型库(包括存储库和数据库模型)
  • 服务层(业务逻辑)
  • Web 应用程序项目(视图、控制器、桌面视图模型)
  • 移动网络项目(移动视图、控制器、viewModel)

我在这个项目中添加了一个服务层http://www.asp.net/mvc/tutorials/validating-with-a-service-layer-cs)。

只要这两个 web 项目有不同的控制器但最常见的逻辑,我可以将以下哪个移到服务层。

  • HTML 助手类
  • 查看模型验证
  • 常用函数

提前致谢。

【问题讨论】:

    标签: asp.net-mvc validation model


    【解决方案1】:

    首先回答您关于将这些代码放置在何处的问题

    1. 查看模型验证
      如果没有特别的理由使用服务层模型验证,我宁愿建议您使用模型库中的数据注释进行模型验证。您所要做的就是将一些属性添加到您的实体的属性中,并且在您的客户端视图中,包括验证消息(如果您使用 Html.ValidationMessageFor() 或类似方法添加验证元素)在内的所有内容都可以立即使用。

    2. HTML 帮助程序类
      如果应该共享 HTML Helper 类,则它们应该是 Common UI 库的一部分。它们不属于任何现有层,因为它们都独立于表示层(Web 应用程序)。我想您的 HTML 助手将依赖于表示层,因此一个单独的库就足够了。

    3. 常用功能
      根据您需要在哪里使用常用功能,它们也可能是模型库或服务层的一部分。

    我如何构建我的网络应用程序

    以下被写成层。它们当然是整个解决方案中的独立项目,因此它们成为独立的程序集。

    1. 对象层 - 包含任何层使用的所有常见类/枚举/接口、通用功能和应用程序模型 POCO;这就是为什么它被所有其他层引用

    2. 数据层 - 具有仅在该层中使用的数据访问对象(也可以从对象层中的 POCO 继承)并执行与应用层 POCO 之间的映射;这一层也有存储库,因此该层/组件被下一层(服务)引用

    3. 服务层 - 包含业务逻辑和操作应用程序模型类;从表示层获取数据并使用数据层来操作后备存储中的数据(无论它在哪里 - 这当然是与存储通信的数据层存储库的一部分)

    4. 表示层 - 可以是 Web 应用程序或其他任何东西;引用对象和服务层,使其能够通信;任何仅作为表示层的对象也在这里创建(视图需要的特殊视图模型,但服务不需要);

    所有这些都意味着我的 Objects 层通过提供用于在层之间交换数据的通用类来提供层之间的通信方式。

    如果我需要实现某些其他提供程序,它们可能是单独层的一部分,但上层适用于 90% 的所有应用程序。一个很好的例子是一些可以在不同应用程序中重用的通用库。根据该库提供的内容,它会被那些需要其功能的层/程序集引用。

    如果您有两个 Web 应用程序,我将创建一个名为 Presentation 的特殊层,所有常见的 HTML 功能都将在其中,然后在两个 Web 应用程序中引用它。

    【讨论】:

    • 我们使用来自 Enterprise 库的 Unity 依赖注入,并且不知何故 viewModel 验证使用数据注释很复杂。顺便说一句,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2014-12-24
    • 2013-05-23
    • 2012-01-19
    • 2012-10-25
    • 2012-12-28
    • 2011-04-03
    相关资源
    最近更新 更多