我在我开发的大多数 Web 服务应用程序中遇到过以下情况:
- 我们创建域模型(使用 C#)。这是应用程序的核心。域模型包含业务和验证规则,用于确定实体在什么条件下有效。
- 我们创建一个“网络服务”层(在 C#/WCF 中)。 该层定义了由网络服务公开的类 DTO 对象。类 DTO 对象通常以粗粒度的方式从域实体的片段中切片和组装。
- 在 Web 客户端(JavaScript 和 HTML)上,验证规则以不同的格式复制,通常是某种形式的 JavaScript 验证。
如何通过 Web 服务将附加到域实体片段的验证规则暴露给客户端?这样做的原因是域模型的验证规则应该定义一次,然后在整个系统的其余部分以某种格式提供给消费者客户端。
到目前为止,我想出的唯一解决方案是从域中制定验证规则,以某种形式的元数据提供,以 XML、JSON 或类似方式定义。最大的问题是服务层的 DTO 和域实体之间的模式不同,因此域的验证规则不能直接发送到 Web 客户端——客户端使用不同的模式和域模型。
因此我的问题是:什么方法需要最少的手动和重复代码,在应用程序的不同模式和层之间映射,但允许所有内容解释验证规则?
请您参考如下方法:
有两种业务规则:
Application Specific Rules
Domain Specific Rules.
如何在两者之间划分规则是另一回事,但没有理由不能重复检查。
例如,我在我的 Web 应用程序中使用了一个 ViewModel,它装饰有验证属性,通过 jQuery 促进了不显眼的客户端验证。
我使用 AutoMapper 将域对象转换为 ViewModel,反之亦然。
拥有单独的 ViewModel 允许我扩展必填字段的域验证,并进行一些特定于应用程序的检查(这可以通过验证属性实现)。
