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

C# DTO不应该知道业务对象中的枚举,c#,dto,data-transfer-objects,C#,Dto,Data Transfer Objects,我在我的业务对象中定义了一个枚举 虽然此枚举是在数据传输对象中定义的 dto枚举不是业务对象的类型,因为它们不应该相互知道 现在,当我从客户端获取此dto并将该dto映射到业务对象并在数据库中插入数据时,我希望断言传递的dto.enum与数据库中插入的enum值具有相同的值 这是我收到的错误消息: Expected: A But was: A 实际上,它们的值相同,但类型不同:dto.enum与businessobject.enum 那么,您将在哪里定义这个枚举,以便两个对象都可以使用

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

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

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

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

这是我收到的错误消息:

Expected: A

  But was:  A
实际上,它们的值相同,但类型不同:dto.enum与businessobject.enum

那么,您将在哪里定义这个枚举,以便两个对象都可以使用它,并且两个对象之间没有耦合

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


您会怎么做?

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

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

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

Assert.AreEqual(businessEnum.ToString(), dtoEnum.ToString());
也许不太理想,但这会让你不用到处去定义事物


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

我称之为新的项目类型定义。在这里,我在c#class Definitions.cs中定义了服务和域引用的枚举。谢谢递归,我想这是个好主意。在DTO层中是否应该有枚举?dto层的要点是,它被序列化为json或xml,而json或xml无论如何都只是字符串。我想知道。。。。