我想在我的应用程序的三个层中使用相同的枚举(演示文稿 - > bal - > dal)。我在数据层中定义了枚举,我想在表示层中使用相同的枚举(表示层没有对数据层的引用)。使用别人的answer我认为是一个类似的问题,我在业务层中构建了以下枚举:
namespace bal
{
public enum TransactionCode
{
Accepted = dal.TransactionCode.Accepted,
AcceptedWithErrors = dal.TransactionCode.AcceptedWithErrors,
InvalidVendorCredentials = dal.TransactionCode.InvalidVendorCredentials,
BrokerOffline = dal.TransactionCode.BrokerOffline
}
}
这是在层之间构建枚举的适当方法吗?
答案 0 :(得分:5)
一种方法是在所有层之间共享一个“层”(好吧,不是真正的层)。
我blogged about this a while ago(在博客/项目中,不幸的是现在处于休眠状态)。它可能看起来“不纯”,但它在许多方面使生活变得更加容易,并减少了重复。当然,它确实会降低灵活性 - 如果您希望演示枚举与数据层枚举不同,则必须重构......
答案 1 :(得分:2)
在这些情况下,我通常会将我的“数据类型”分离到自己的小型程序集中。然后在您需要的任何地方引用该装配。
答案 2 :(得分:2)
您的枚举实际上是API的一部分。当您考虑分层软件时,通常很难考虑共享类型,但大多数情况下,一组类型总是在各层之间共享。而不只是考虑标准分层:
Presentation -> Business -> Data
尝试这样想:
Presentation -> API
|-> Business ----^
|-> Data ----^
API是您系统的共享方面。 API包含任何共享数据类型,实体,枚举,服务接口等.API可以隔离到自己的库中,并在演示文稿中重用,同时也是域的网关(即业务和数据逻辑)。
答案 3 :(得分:1)
如果是我,我会在其中创建另一个项目,并让所有项目参考。
答案 4 :(得分:0)
这实际上取决于您的互动方式。将dal.TransactionCode转换为bal.TransactionCode很可能在您尝试设置相等性的任何操作中都不起作用。
如果你真的一直传递它并且需要跨越所有层,我会在bal层定义它,或者从UI引用dal。