使用AJAX验证单个字段 - 在何处放置逻辑?

时间:2011-07-15 17:35:28

标签: validation domain-driven-design

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

检查用户名尚未使用加入persistance图层,因此我认为这更有可能存在于服务层中。服务层可以只查询具有指定名称的用户的存储库,如果返回任何一个,则它是无效的。

在我们真正关心绩效的世界中:

检查用户名唯一性可能需要访问服务层才能访问数据库。但至于其他两个,这可以在UI中完成以节省到服务层的旅行,但是然后需要在域中复制。这是Udi Dahan所倡导的:

Command Query Responsibility Segregation

他建议用户界面验证,然后在域中复制它,但不要打扰从域中发出有用的消息,因为从理论上讲,唯一能够做到这一点的人就是黑客。