asp.net-mvc - ASP.NET MVC - 用户输入和服务/存储库 - 在哪里进行验证?

标签 asp.net-mvc design-patterns

这可能是一个过于自以为是的问题,但寻求帮助!

我一直在尝试改进我的 ASP.NET MVC 程序结构。我刚刚在预览版 5 中开始使用它,这是我第一次涉足业务应用程序开发——所以一切都是新的!

在 Controller 级别,我有一个服务对象负责与存储库对话并处理所有业务逻辑。在操作级别,我有一个保存所有 View 数据的对象——用户输入和生成的输出——我将其称为 View 对象(是否有一个通用术语?)。与我看到的大多数示例不同,这个对象不是数据库对象,而是特定于 View 的对象。

所以现在我想添加用户验证。问题是,我不知道把它放在哪里。在服务层做这件事对我来说最有意义。服务层负责所有业务逻辑,验证是业务逻辑。另一方面,我看到的大多数验证框架都是用于验证对象,这让我认为 View 对象应该具有验证意识。最后,有一些验证方法需要数据库连接(例如检查用户输入字段是否有相应的数据库记录),并且 View 对象没有数据库的概念,只有服务。

所以我看到的一些选项是:

  • 在 Service.Method 中对传递给方法的参数做验证。
  • 在调用 Service.Method 之前在 View 对象中做验证。
  • 在 View 对象中进行验证,但使 Service.Method 需要 View 对象引用,因此它正在启动对对象的验证。

  • 我确定还有更多。我很好奇其他人如何处理 MVC 意义上的用户输入验证。我以前使用过 Enterprise Validation Block 并且喜欢能够对所有内容使用股票验证器,但我不确定如何使其适合单独的 View 对象和服务层。如果它们(查看对象/服务)是同一个对象,那会很容易,这可能是人们所做的?就像我说的,这对我来说是全新的,我正在寻找最佳实践/模式。

    最佳答案

    我通常在提交表单时在 Controller 操作中进行基本验证(必填字段、电子邮件格式等)。然后我让业务层处理需要业务知识的验证。我通常也会仔细检查业务层中的基本内容,因此如果我通过 Web 服务公开该逻辑或稍后在另一个应用程序中使用它,我仍然会在最重要的地方(IMO)进行验证。

    关于asp.net-mvc - ASP.NET MVC - 用户输入和服务/存储库 - 在哪里进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/294890/

    相关文章:

    swift - 如果我遵循 MVC 并通过 RealmSwift 持久化数据,swift 模型类会是什么样子?

    asp.net - 使用门户部署 Azure Web 应用程序时的自动化单元测试

    asp.net-mvc - ASP.NET MVC 6 功能有哪些?

    asp.net-mvc - 从 ActionFilter 返回 View

    c# - 在页面上进行任何事件之前,如何检查 MVC 中的 session 变量是否存在?

    java - 将大型 XML 文档从一种格式转换为另一种格式的最快、最好的方法

    c# - 如何更改异步方法调用以防止强制调用堆栈异步

    c# - 为给定对象从服务器向客户端发送 ‘updated only fields’ 的模式/技术?

    c# - 当需要不同数量和类型的参数时如何创建 Action 委托(delegate)列表

    java - 需要引用 Java 中的扩展接口(interface)模式