我可能在寻找一个不存在的圣杯,但值得一试。首先,这里是我们架构的快速概述:
- 数据访问:通过Entity Framework与SQL Server交互的存储库类 - 业务逻辑:管理器类调用数据层并将数据映射到领域模型 - 领域模型:表示我们领域的POCO - 服务库/服务门面:公开POCO的CRUD操作 - 表示层:ASP.NET MVC(v2,但如果需要,可以移动到v3 - 我们的项目还处于早期阶段)
我们要解决的问题是如何自动创建客户端验证来处理基本问题,例如必填字段、最小和最大长度、数字范围等 - 只是您的基本第一道防线。
如果我们在领域模型POCO上使用DataAnnotations(听起来很有吸引力),我们可以让jQuery的无侵入式验证为我们工作。为了使其工作,我们必须在服务和表示层中都引用领域模型库,因为DataAnnotations不会通过WCF传递。不幸的是,我们需要在几个应用程序中重用WCF服务,如果我们采用这种方法,我们可能会创建版本锁定问题。
因此,我们不能在服务边界的两侧引用领域模型,也不想将验证规则的定义移动到表示层,因为未来的应用程序可能会消耗相同的服务,并且那里也需要验证。
这让我们寻找另一种传递定义在领域模型中的验证规则(或验证元数据,如果您愿意)的方法,以通过WCF将其传递到客户端应用程序。
我知道这听起来像我们想要拥有蛋糕并吃掉它。如果没有合理的解决方案,我们将咬紧牙关复制验证逻辑。我认为这比紧密耦合我们的应用程序层更可取。
鉴于上述情况,您如何处理客户端验证并仍然避免重复逻辑?
- 数据访问:通过Entity Framework与SQL Server交互的存储库类 - 业务逻辑:管理器类调用数据层并将数据映射到领域模型 - 领域模型:表示我们领域的POCO - 服务库/服务门面:公开POCO的CRUD操作 - 表示层:ASP.NET MVC(v2,但如果需要,可以移动到v3 - 我们的项目还处于早期阶段)
我们要解决的问题是如何自动创建客户端验证来处理基本问题,例如必填字段、最小和最大长度、数字范围等 - 只是您的基本第一道防线。
如果我们在领域模型POCO上使用DataAnnotations(听起来很有吸引力),我们可以让jQuery的无侵入式验证为我们工作。为了使其工作,我们必须在服务和表示层中都引用领域模型库,因为DataAnnotations不会通过WCF传递。不幸的是,我们需要在几个应用程序中重用WCF服务,如果我们采用这种方法,我们可能会创建版本锁定问题。
因此,我们不能在服务边界的两侧引用领域模型,也不想将验证规则的定义移动到表示层,因为未来的应用程序可能会消耗相同的服务,并且那里也需要验证。
这让我们寻找另一种传递定义在领域模型中的验证规则(或验证元数据,如果您愿意)的方法,以通过WCF将其传递到客户端应用程序。
我知道这听起来像我们想要拥有蛋糕并吃掉它。如果没有合理的解决方案,我们将咬紧牙关复制验证逻辑。我认为这比紧密耦合我们的应用程序层更可取。
鉴于上述情况,您如何处理客户端验证并仍然避免重复逻辑?