【发布时间】:2019-03-25 12:59:26
【问题描述】:
在编写企业应用程序时,总是有 n 个层。我个人不喜欢使用 AutoMapper 等工具。我避免使用 Automapper 的大部分原因都在这里说明https://cezarypiatek.github.io/post/why-i-dont-use-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 方法的编码,大多数枚举将位于域层。将域的基本部分提取到新层并没有任何意义,除了能够在不同层重用枚举之外。将所有层的引用添加到域层是可能的。
所以我的问题是我们应该在层之间映射枚举,还是应该使用最初声明的初始枚举?
【问题讨论】:
-
枚举可以添加到共享项目中并在所有层中使用
-
这应该是两层都用的通用类型,所以同类型没问题。
-
@EhsanSajjad 在做 DDD 的时候呢?为什么要将域的重要部分提取到新层?
-
我们通常将这些实体放在名为 Enums 的命名空间中的实体中