【问题标题】:Share DataAnnotations MetaData class between server and client在服务器和客户端之间共享 DataAnnotations MetaData 类
【发布时间】:2011-04-21 17:54:54
【问题描述】:

我很好奇这是不是一个疯狂的想法。现在我有一个典型的结构如下

客户端(目前是 asp.net mvc3,但将来可能是任何东西)
WCF 服务层
领域层
数据层

我在域层中完成了一些非常复杂的验证。 DataAnnotations 是不够的。因此,该验证以更手动的方式完成,但仍通过服务层传递回客户端。

但是,DataAnnotations 可以进行简单的验证(字段不为空,必须大于 0,不能超过 10 个字符)。

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

本来我不想向客户端分发任何东西,但是为了在服务之间共享 DataContracts,无论如何我都必须这样做。

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

谢谢

【问题讨论】:

    标签: wcf validation asp.net-mvc-3 data-annotations


    【解决方案1】:

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

    我还与 .NET 客户端共享我的 ServiceContracts,这样客户端就不必添加服务引用,这很糟糕。

    【讨论】:

    • 我也在考虑这种方法,但我想小心分发给客户所需的内容。如果它太多,那么使用 Web 服务真的没有意义。我也可以分发所有东西。找到这种平衡是很困难的。
    • 有效点,但共享合约会以一种或另一种方式发生。如果添加服务引用,将生成客户端合同。所以它会发生,通过共享,您可以防止命名空间地狱并控制客户端合同的方式/时间。此外,只要实现是从用户那里抽象出来的,服务就已经完成了它的工作。客户永远不应该知道实现,只知道合同。有意义吗?
    • 这里有一篇很好的 dnrTV 节目,涵盖了这个主题:dnrtv.com/default.aspx?showNum=122
    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多