跨层的枚举

时间:2009-06-02 17:51:35

标签: c# enums

我想在我的应用程序的三个层中使用相同的枚举(演示文稿 - > bal - > dal)。我在数据层中定义了枚举,我想在表示层中使用相同的枚举(表示层没有对数据层的引用)。使用别人的answer我认为是一个类似的问题,我在业务层中构建了以下枚举:

namespace bal
{
    public enum TransactionCode
    {
        Accepted = dal.TransactionCode.Accepted,
        AcceptedWithErrors = dal.TransactionCode.AcceptedWithErrors,
        InvalidVendorCredentials = dal.TransactionCode.InvalidVendorCredentials,
        BrokerOffline = dal.TransactionCode.BrokerOffline
    }
}

这是在层之间构建枚举的适当方法吗?

5 个答案:

答案 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。