【问题标题】:The DTO should not know the enum inside the business objectDTO 不应该知道业务对象内的枚举
【发布时间】:2013-11-25 07:58:43
【问题描述】:

我在我的业务对象中定义了一个枚举。

这个枚举是在数据传输对象中定义的。

dto 枚举不是业务对象的类型,因为它们不应该相互认识。

当我现在从客户端获取此 dto 并将 dto 映射到业务对象并将数据插入数据库时​​,我想断言传递的 dto.enum 与数据库中插入的枚举值具有相同的值。

这是我收到的错误消息:

Expected: A

  But was:  A

实际上它们具有相同的值但类型不同:dto.enum vs businessobject.enum。

那么你会在哪里定义这个枚举,然后两个对象都可以,并且两个对象之间没有耦合?

我考虑在我的业务层和 dto AND 业务对象使用的枚举定义中放置一个额外的 c# 类,以便断言可以工作。

你会怎么做?

【问题讨论】:

  • 你的 DTO 层中是否应该有枚举? dto 层的关键在于它被序列化为 json 或 xml,无论如何这都只是字符串。我想知道....

标签: c# dto data-transfer-objects


【解决方案1】:

如果名称完全相同,您只需执行以下操作:

BusinessEnumType businessEnum = GetBusinessEnum();
DTOEnumType dtoEnum = GetDTOEnum();

Assert.AreEqual(businessEnum.ToString(), dtoEnum.ToString());

也许不理想,但可以省去你到处定义事物的麻烦。

您也可以编写一个IEqualityComparer,用于检查BusinessEnumType 是否与DTOEnumType“相同”,但这可能是一个维护难题。

【讨论】:

    【解决方案2】:

    您应该将枚举放在两个对象都可以通过项目引用访问的外部 util 类中(最有可能是模型层)。然后他们可以使用相同的枚举,而您不必尝试强制转换、转换或耦合(假设枚举彼此完全相同)。

    【讨论】:

    • 我将新项目称为TypeDefinition。在这里,我在 c# 类 Definitions.cs 中定义了我的枚举,它被服务和域引用。谢谢 Recursor 我想这是个好主意。
    猜你喜欢
    • 2011-05-07
    • 2022-01-13
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2010-10-07
    • 2012-04-13
    • 2011-03-09
    • 2011-01-11
    相关资源
    最近更新 更多