Должен ли BLL быть лицом без гражданства? - PullRequest
1 голос
/ 19 ноября 2010

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

Спасибо.

1 Ответ

2 голосов
/ 19 ноября 2010

Теоретически, да, BLL без сохранения состояния может означать, что все методы могут быть статическими.

Однако есть некоторые соображения, которые могут побудить вас использовать экземпляры объектов BLL вместо статических.

  1. Статические методы вводят тесную связь между классами и не позволяют использовать, например, интерфейсы для слабого связывания зависимостей.Использование интерфейсов улучшает тестируемость BLL, поскольку теперь его можно смоделировать при написании модульных тестов для сервисного уровня.Если ваши методы BLL статичны, вы, как правило, не сможете сделать это без «обходных путей» (например, вам потребуется TypeMock или Microsoft Fakes в среде .Net).

  2. В сложном методе BLL (например, в логике больших транзакций) вы можете реорганизовать каждое из ваших бизнес-правил в несколько дискретных методов, а на выходе возможно собрать все проверки и нарушения правил в один агрегированный результат, содержащийвсе нарушения.В этом случае может быть громоздким шунтирование сущности / сущностей для проверки и накопление нарушений правил, и вместо этого они выбирают для хранения их с сохранением состояния на экземпляре класса.Здесь может помочь базовый класс или универсальный для вашего экземпляра BLL.

...