编码企业应用程序时,总是有n层。我个人不喜欢使用AutoMapper之类的工具。 https://cezarypiatek.github.io/post/why-i-dont-use-automapper/
列出了我避免使用Automapper的大多数原因从时间上讲,这几乎是相同的工作量,而IMO手动映射具有更大的优势。
到目前为止,我一直在做的是在层之间映射枚举。但我对此有疑问。每一层都不会为枚举添加额外的值/内容,而只是普通的映射。我讨厌它,尤其是由于以下事实:如果没有适当的映射值,则必须执行以下操作之一(并且不使用它们是一个很好的解决方案)
例如 A层
public enum Sometype
{
ACTIVE,
INACTIVE,
PENDING,
DELETED
}
B层
public enum Sometype
{
ACTIVE,
INACTIVE,
DELETED
}
如果您在A层中添加PENDING值而忘记在B层中添加PENDING,则映射将被破坏。要解决此问题,您可以
a)引发异常-不太急于在如此琐碎的问题上发现生产中的错误
b)在B层中引入了一个新的枚举,例如UNKNOWN(作为默认值),它没有为B层上下文添加任何值,即什么是未知状态?
c)将枚举映射到默认值-这几乎总是错误的。
更新
如果我们使用基于DDD方法的代码,则大多数枚举将位于“域”层中。将Domain的必要部分提取到新层实际上没有任何意义,而能够在不同的层中重用Enums。可以将所有层的参考添加到“域”层。
所以我的问题是我们应该在层之间映射枚举,还是应该使用最初声明的初始枚举?
答案 0 :(得分:0)
您应该使用Shared项目在层之间共享Enum或任何通用代码。有关共享项目here
的更多详细信息答案 1 :(得分:0)
我只能提供我的意见,但是当我遇到相同的问题时,我会同时使用两种解决方案。如果枚举确实是一个横切关注点,那么它将在项目之间共享。但是,当一个枚举可以划分为一个层,然后我只需要在另一个层中将其子集覆盖时,就可以对其进行映射。在第二种情况下要小心,我发现几年后再回到它时,花点时间记住什么是;)