2011-04-21 211 views
1

之间分享DataAnnotations元数据类我很好奇,如果这是一个疯狂的想法。现在我有一个典型的结构如下服务器和客户端

客户端(目前asp.net MVC3,但可能会在未来的任何东西)
WCF服务层
领域层
数据层

我有一些非常在我的领域层完成复杂的验证。 DataAnnotations不足。因此,该验证是以更加人工的方式完成的,但仍然通过服务层传回客户端。

然而,简单的验证(场不空,必须大于0,不能超过10个字符),其DataAnnotations将是很好的。

这是我的计划。我将已经分发一个具有DTO对象的基本DataContract dll。这是因为我有多个WCF服务。我打算创建一个具有DataAnnotations属性的Buddy元数据类的程序集。这个类然后用于我的DTO和我的域实体。通过这种方式,我可以在不通过Web服务的情况下进行简单的验证,但它仍然在一个地方。但是,对于不支持该功能的客户(例如说java),如果他们通过WCF服务,他们仍然会得到验证。

本来我不想任何东西分发到客户端,但为了服务之间共享DataContracts,我反正。

这是一个疯狂的想法?我知道其他人只是做了一些双重验证。有没有更好的方法来实现这一点?我已经测试过它,它确实有效,但我不确定在建立整个模型时它会如何扩展(现在只是原型)。

谢谢

回答

0

这种方法没有错。将DataContracts分离为独立的程序集并与.NET客户端共享这些合同是我认为的最佳实践,听起来您只是将其更进一步并共享验证程序集。

我也分享我与.NET客户端ServiceContracts,客户端方式不必添加服务引用,这是恶心的便便。

+0

我还想着这种做法,但我要小心什么需要被分配给客户端。如果它太多,那么使用Web服务确实没有意义。我可能只是分发一切。找到平衡是困难的。 – 2011-04-21 23:44:14

+0

有效的点,但共享合同将以某种方式发生。如果添加服务引用,则会生成客户端合同。所以它将要发生,通过共享,你可以防止命名空间地狱,并控制客户端如何/何时合同。而且,只要实现是从用户抽象出来的,服务就完成了它的工作。客户不应该知道实施情况,只有合同。合理? – BrandonZeider 2011-04-21 23:48:28

+0

这是一个很好的dnrTV节目,涵盖了这个主题:http://www.dnrtv.com/default.aspx?showNum=122 – BrandonZeider 2011-04-21 23:49:27