5

我有一个应用程序需要使用很多不同的枚举。应用程序可以分为不同的层。为了示例的目的,我们假设三层:第 3 方分析库、应用程序业务逻辑和 UI/表示逻辑。

在许多情况下,所有层都可能需要一个表示相同概念的枚举。让我们以支付频率为例。(例如年度、半年度、季度等)。3rd 方库提供了自己的枚举,业务逻辑层中的各种类都需要一个类似的枚举,最后 UI 层可能需要它来在下拉列表中呈现各种选择等......

现在,通常我想通过不在层的公共接口中从内部依赖项中暴露类型来保护每一层的用户免受其内部依赖项和实现细节的影响。这意味着即使与第 3 方库的交互需要使用其自己的“频率”枚举,我也需要为业务层创建一个等效的“频率”枚举,并可能为 UI 层创建另一个...

所有这些都需要大量的来回映射,可能还有很多额外的映射器类。另一方面,每一层都可能决定从自己的枚举版本中排除它不需要或不支持的值......

现在因为我必须处理很多枚举,我只是想知道这通常是一件好事,还是我只是让事情变得过于复杂?

4

2 回答 2

4

我会说你把事情复杂化了。为什么不为这样的共享实体设立一个单独的项目呢?然后,您可以让每个程序集引用您的Common项目以引用必要的枚举,并且仍然让它们完全相互独立。

于 2013-09-05T20:34:16.723 回答
0

好吧,我可能误解了你,但实际上,你只需要在逻辑层查看的数据层中,你的 enuns。使用您自己的示例,您将PaymentFrequency在表中有一个列名。您的表应该在您的数据层中针对该特定字段进行映射,因此您将创建一个枚举,并且 PaymentFrequency 列的类型 - 此时您的表类或实体的属性 - 将设置为为此创建的枚举目的。因此,当您将逻辑层指向请求/访问数据层时,您需要了解相同的枚举 - 因此,如果您在逻辑层和数据层之间使用 DAL 层,我建议您在单独的类/文件。好吧,在您的逻辑层中-通过使用枚举选项-您将填充一个简单的Combo带有枚举选项的组件,因此,您将通过隐藏所有图层来在 UI 中显示选项,用户不会知道您实际上是在使用枚举来处理选项。

我希望这会有所帮助。对不起 - 真的很抱歉 - 对于这个*糟糕的英语!如果这没有帮助,请发布一些 cod 示例以便更容易帮助您 =)

于 2013-09-05T20:38:07.587 回答