我有一个需要使用大量不同枚举的应用程序。该应用程序可以分为多个层。为了示例,我们假设有三个层:第三方分析库,应用程序业务逻辑和UI /表示逻辑。
在许多情况下,所有图层都可能需要表示相同概念的枚举。我们以付款频率为例。 (例如年度,半年度,季度等......)。 第三方库提供了自己的枚举,业务逻辑层中的各个类需要类似的枚举,最后UI层可能需要它来呈现下拉列表中的各种选择......
现在,通常我想通过不在层的公共接口中公开来自内部依赖的类型来保护每个层的用户免受其内部依赖性和实现细节的影响。这意味着即使与第三方lib的交互需要使用自己的“频率”枚举,我还需要为业务层创建一个等效的“频率”枚举,并为UI层创建另一个枚举...
所有这些都需要来回进行大量的映射,并且可能需要额外的映射器类。另一方面,冒险是每个层可能决定从其自己的枚举版本中排除它不需要的值或支持......
既然我必须处理一个很多的枚举,我只是想知道这通常是件好事,还是我只是过于复杂化了?
答案 0 :(得分:4)
我会说你的事情过于复杂。为什么没有像这样的共享实体的单独项目?然后,您可以让每个程序集引用您的Common
项目以引用必要的枚举,并使它们完全相互独立。
答案 1 :(得分:0)
好吧,我可能会误解你,但实际上,你需要在数据层中,逻辑层查看你的enuns。使用您自己的示例,您将在表中使用列名PaymentFrequency
。您的表应该映射到此特定字段的数据层中,因此您将创建一个枚举,并且列的类型PaymentFrequency(此时是表类或实体的属性)将被设置为为此创建的枚举目的。因此,当您指向逻辑层以请求/访问您的数据层时,您需要了解相同的枚举 - 因此,如果您在逻辑层和数据层之间使用DAL层,我建议您单独创建enuns类/文件。好吧,在您的逻辑层 - 通过使用枚举选项 - 您将使用枚举选项填充一个简单的Combo
组件,因此,您将通过隐藏所有图层来预先设置UI中的选项。用户不知道你实际上使用枚举来处理选项的方式。
我希望这有帮助。对不起 - 真的很抱歉 - 这个 * 糟糕的英语! 如果这没有帮助,发布一些鳕鱼的例子更容易帮助你=)