DTO不应该知道业务对象中的枚举

时间:2013-11-12 22:47:32

标签: c# dto data-transfer-objects

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

此枚举虽然在数据传输对象中定义。

dto枚举不属于业务对象的类型,因为它们不应该彼此了解。

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

这是我收到的错误消息:

Expected: A

  But was:  A

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

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

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

你会做什么?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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

也许并不理想,但可以省去你在各处定义的事情。

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