【问题标题】:validation for DTOs and business objectsDTO 和业务对象的验证
【发布时间】:2013-05-17 05:40:08
【问题描述】:

在客户端-服务器架构中使用 DTO 时,您可以在客户端进行一些验证以检查 DTO 对象。当 DTO 在转换回业务对象后被发送回服务器时,可以对其进行一些服务器端验证。所以这里似乎存在一些逻辑代码重复,为了验证 DTO 和业务对象,我怎样才能删除这个代码重复?

【问题讨论】:

    标签: c# dto


    【解决方案1】:

    将验证和 DTO 代码放在客户端和服务器项目都引用的公共项目中。

    【讨论】:

    • 但验证器不能同时使用业务对象和 DTO,因为它们具有不同的数据类型
    • 好的。实现业务对象的一种方法是让它们从 DTO 继承 - 这样您就可以重用在 DTO 上工作的任何代码与业务逻辑。您还可以根据您的要求将常见的验证代码分解到新的例程中并调用它们。祝你好运
    • 但是DTOs可以扁平化业务对象,所以从它们继承使得业务对象具有其他业务对象的一些字段,似乎不是这样。
    • 这完全取决于您如何设计系统。 “方式”是你设计的任何东西。
    【解决方案2】:

    如果您有简单的验证,例如“需要此属性”或“此 int 属性必须在 x..y 范围内”,您可以使用 Data Annotations。这些可以在客户端和服务器端使用Validator 类进行验证。根据您的前端,您的视图也可以使用这些来检查用户输入。

    Validator.ValidateObject 方法返回一个验证结果列表,为每个失败的验证提供错误消息。

    【讨论】:

    • 澄清一下,ValidateObject() 不返回任何值,但只会为发现的第一个违规行为引发异常。 TryValidateObject() 返回一个指示成功或失败的布尔值,还允许您传递一个 ICollection 对象,该对象将填充任何验证失败。
    猜你喜欢
    • 2011-01-11
    • 2011-04-30
    • 2010-11-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多