Как обрабатывать циклическую зависимость службы регистрации - PullRequest
1 голос
/ 07 июня 2010

У меня есть сервисный уровень с классом регистратора

Сервисный уровень ссылается на DAL для класса Logger, чтобы получить свои учетные данные электронной почты для использования при отправке электронной почты для критических элементов журнала.

Я хочу использоватьэтот регистратор внутри DAL, так как там есть вещи, которые нужно регистрировать и там - но с моей текущей архитектурой я не могу.

Я вижу, что это может быть каким-то образом обработано через IOC, но меня беспокоит то, будет ли таким образом ябудет решать корень проблемы или скрывать ее, используя другой уровень абстракции.

Что может быть хорошим хорошим способом решения этой проблемы?

1 Ответ

1 голос
/ 07 июня 2010

Как правило, циклические зависимости нежелательны - они усложняют отладку, обслуживание и накладывают ограничения на то, как ваш код может быть структурирован и расширен.По возможности устраните циклические зависимости.

Если для работы регистратора требуется очень мало информации, я бы предложил исключить зависимость DAL от регистратора.Помещение электронных писем в файл конфигурации или использование отдельного механизма, встроенного в регистратор, для доступа к ним.Ведение журнала - это довольно низкоуровневая служебная функция в большинстве систем - вам следует избегать зависимости регистратора от вашей модели доступа к данным.Тем более, что вы хотите иметь возможность регистрировать информацию, даже если база данных недоступна.Несколько бесполезно иметь регистратор, который не может функционировать, когда уровень данных недоступен.

ПРИМЕЧАНИЕ. Существует ли причина, по которой вы не можете использовать существующую библиотеку журналов, например log4net или NLog ?

Если по какой-либо причине это невозможно - тогда может подойти решение Inversion of Control (Dependency Injection).Просто поймите, что вам нужно выделить в какую-то третью сборку интерфейс, предоставляемый регистратором, чтобы вы могли безопасно вызывать его из DAL.

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