【发布时间】:2011-06-03 20:10:43
【问题描述】:
我可能在这里寻找一个不存在的圣杯,但值得一试。对于初学者,以下是我们架构的快速概览:
- 数据访问:通过以下方式与 SQL Server 交互的存储库类 实体框架
- 业务逻辑:管理器类调用数据层并将数据映射到领域模型
- 领域模型:代表我们领域的 POCO
- 服务库/服务外观:公开 POCO 的 CRUD 操作
- 演示文稿:ASP.NET MVC(v2,但如果需要可以移至 v3 -- 我们仍处于项目的早期阶段)
我们要解决的问题是如何自动创建客户端验证来处理必填字段、最小和最大长度、数字范围等基本问题——这只是您的基本第一道防线东西。
如果我们要在域模型 POCO 上使用 DataAnnotations(一开始听起来很吸引人),我们可以让 jQuery 不显眼的验证为我们完成这项工作。为了使其工作,我们必须在服务层和表示层中引用域模型库,因为 DataAnnotations 不会通过 WCF 传递。不幸的是,我们需要在多个应用程序中重复使用 WCF 服务,如果我们走这条路,我们很可能会产生版本锁定问题。
所以我们不能在服务边界的两边引用域模型,我们也不想将验证规则的定义移动到表示层,因为未来的应用程序可能会使用相同的服务并且验证将是那里也需要。
这让我们寻找另一种方法来将使用域模型定义的验证规则(或验证元数据,如果您愿意)传递给客户端应用程序。
我知道听起来我们也想吃蛋糕。如果没有合理的解决方案,我们将硬着头皮重复验证逻辑。我认为这比紧密耦合我们的应用程序层更可取。
鉴于上述情况,您将如何处理客户端验证并仍避免重复逻辑?
编辑:
感谢到目前为止的想法。还有一个方面,我意识到我在谈论 DataAnnotations 时忘记包括在内:我们研究了使用反射来获取注释并通过对单独服务的方法调用将它们返回,但这不起作用,因为它们不是标记为可序列化,因此不能通过 WCF 返回。
【问题讨论】:
-
只有一些元资源 (xml/json) 以声明方式声明验证规则。然后为它们编写一个缩放的 c# & js 处理程序。
-
嗨 Rick .. 正如您在下面的答案中评论的那样,您能否发布示例代码来解决此问题。我也面临这个问题。因此,如果您可以发布一些示例代码,那么我可以解决我的问题。谢谢..
-
@KaranPatel 我已经离开了我实施元数据解决方案的公司,如果没有大量工作就无法重建这个想法。我会说,从那时起,我采用的方法是在 MVC 端为服务引用中的类型创建部分类,然后将 DataAnnotations 应用于该类型的成员。它运行良好,几乎没有重复。
-
好的,没问题 rick.. 感谢您的快速回复。和提示.. :)
标签: jquery asp.net-mvc wcf validation