Перечисляет по уровням - PullRequest
4 голосов
/ 02 июня 2009

Я хотел бы использовать одно и то же перечисление на трех уровнях моего приложения (презентация -> bal -> dal). Я определил перечисление на уровне данных, и я хочу использовать то же самое перечисление на уровне представления (уровень представления не имеет ссылки на уровень данных). Используя чей-то ответ на похожий вопрос, я построил следующее перечисление на бизнес-уровне:

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

Является ли это подходящим способом построения перечислений между уровнями?

Ответы [ 5 ]

5 голосов
/ 02 июня 2009

Один из подходов состоит в том, чтобы иметь один «слой» (ну, на самом деле, не слой как таковой), который совместно используется для всех слоев.

Я писал об этом некоторое время назад (к сожалению, в блоге / проекте, который сейчас неактивен). Это может показаться «нечистым», но во многом облегчает жизнь и уменьшает дублирование. Конечно, тогда это также снижает гибкость - если вы хотите, чтобы перечисление презентации было отличным от перечисления уровня данных, вам придется провести рефакторинг ...

2 голосов
/ 02 июня 2009

Ваше перечисление фактически является частью API. Когда вы думаете о многоуровневом программном обеспечении, часто трудно думать об общих типах, но в большинстве случаев набор типов всегда распределяется между слоями. Вместо того, чтобы думать о стандартном наслоении:

Presentation -> Business -> Data

Попробуйте подумать об этом так:

Presentation -> API
|-> Business ----^
    |-> Data ----^

Где API является общим аспектом вашей системы. API содержит любые общие типы данных, сущности, перечисления, сервисные интерфейсы и т. Д. API можно изолировать в своей собственной библиотеке и повторно использовать в вашей презентации, одновременно являясь шлюзом для вашего домена (который представляет собой логику для бизнеса и данных).

2 голосов
/ 02 июня 2009

В этих случаях я обычно отделяю свои «типы данных» в свою маленькую сборку. Затем обращайтесь к этой сборке везде, где вам это нужно.

1 голос
/ 02 июня 2009

Если бы это был я, я бы создал другой проект с такими вещами, и все проекты ссылались бы на это.

0 голосов
/ 02 июня 2009

Это действительно зависит от того, как происходит ваше взаимодействие. Перевод dal.TransactionCode в bal.TransactionCode, скорее всего, не будет работать ни в одной операции, где вы пытаетесь установить равенство.

Если вы действительно проходите его по всем направлениям и НУЖНЫ во всех слоях, я бы определил его на уровне bal или сослался на dal из пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...