4

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

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

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

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

这就是我得到的错误信息:

Expected: A

  But was:  A

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

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

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

你会怎么做?

4

2 回答 2

2

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

于 2013-11-12T22:51:07.327 回答
1

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

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

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

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

您也许还可以编写一个IEqualityComparer用于检查某些内容BusinessEnumType是否与 的“相同” DTOEnumType,但这可能是维护方面的难题。

于 2013-11-12T22:56:07.710 回答