【问题标题】:Validating Individual Fields with AJAX - Where to put the logic?使用 AJAX 验证单个字段 - 将逻辑放在哪里?
【发布时间】:2011-07-18 23:00:28
【问题描述】:

我有一个表单,当您在字段中输入文本并关闭标签时,会触发一个 jQuery 事件以通过调用相关的控制器操作来验证该字段。例如,我有一个 AccountController 和一个 ValidateField 操作。当用户关闭用户名字段时,它将向 /Account/ValidateField 发送请求。然后,我将根据验证返回一个 JSON 结果。

好的,假设我要验证用户名字段。我想检查是否使用了足够的字符,用户名是否尚未使用,以及使用的字符是否被允许。其中两个很容易。但是,我需要访问数据库以检查用户名是否已经存在。

我会把这个逻辑放在哪里?在服务层?

【问题讨论】:

    标签: validation domain-driven-design


    【解决方案1】:

    在一个绝对不会发生业务逻辑复制的世界中:

    名称的最小长度和字符的有效性检查听起来像域逻辑,所以应该在域中。您的 ajax 调用将调用服务层,该服务层又会调用域并进行验证。

    检查用户名尚未使用访问持久层,所以我认为这更有可能存在于服务层中。服务层可以只查询具有指定名称的用户的存储库,如果返回,则它是无效的。

    在我们真正关心性能的世界里:

    检查用户名的唯一性可能确实需要访问服务层来访问数据库。但是对于其他两个,这可以在 UI 中完成以节省前往服务层的行程,但随后需要在域中进行复制。这是 Udi Dahan 提倡的:

    Command Query Responsibility Segregation

    他建议进行 UI 验证,然后在域中复制它,但不要费心从域中提供有用的信息,因为理论上只有黑客才有可能做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      相关资源
      最近更新 更多