Лучше всего использовать ILogger<T>
только на уровне приложений (контроллеры, службы приложений, но не службы домена).
Если вы хотите добавить ведение журнала для ваших доменных служб/репозиториев, лучше всего создать для него декораторы. Это хорошо работает только в том случае, если вы абстрагировали свои интерфейсы от их реализаций и везде используете/внедряете интерфейсы).
Однако существуют ограничения на то, что вы можете делать с декораторами. Вы можете вести журнал до и после вызова метода, определенного в общедоступном интерфейсе. Не внутри звонка.
Зачем избегать регистрации/внедрения вашего регистратора в службу?
Связь
Вам следует избегать внедрения ILogger<T>
в объекты вашего домена, так как это связывает ваш домен с фреймворком/базовыми классами ведения журнала ASP.NET Core. Однако вы всегда можете определить свой собственный интерфейс регистратора, чтобы использовать его в своем домене и реализовать как оболочку вокруг ILogger<T>
.
Твердый принцип
S в принципе SOLID означает SRP (Single Responsibility Principle) и гласит, что один объект должен иметь только одну и только одну ответственность. Выполнение ведения журнала и сохраняемости или бизнес-логики в одном объекте нарушает этот принцип.
Но, в конце концов, вы должны взвесить затраты на разработку с преимуществами, которые вы от нее получаете. Если это долгоживущее приложение (будет использоваться в течение следующих 10 лет или около того) и сложное, регистрация в качестве декораторов, безусловно, имеет смысл. Если это небольшой проект, на разработку которого уйдет всего несколько недель, выгода от такой абстракции может не перевесить затраты.
person
Tseng
schedule
22.02.2016