Как полностью отделить инфраструктуру от .NetCore WebAPI или я должен? - PullRequest
0 голосов
/ 11 февраля 2020

Как разработчики программного обеспечения, мы знаем, что «Принцип инверсии зависимости» и «Разделение интересов» - это 2 основных правила, которым мы должны следовать. Большинство архитектурных шаблонов, таких как «Чистая архитектура», предлагают некоторые детали реализации для нас. Но примеры проектов содержат некоторые недостающие детали. И я не могу найти комплексное решение.

У моего сервисного решения есть 3 проекта. Это:

  • Service.Core
  • Service.Infrastructure
  • Service.Api

Как я понимаю, я могу добавить ссылку от инфраструктуры до ядра. И от проекта Api до Core. Потому что в проекте Infrastructure есть некоторые детали реализации, и api-проекту не нужно знать эти детали реализации.

В соответствии с этим:

Вопрос 1: Для заданий базы данных я могу поместить интерфейс IRepository в Основной проект, и я могу реализовать это в инфраструктурном проекте. Но как я могу зарегистрировать типы реализации в проекте Api, не добавляя ссылку на проект инфраструктуры?

Вопрос 2: Ведение журнала является своего рода работой ввода-вывода. На мой взгляд, это должно быть в инфраструктурном проекте. Я хочу использовать Serilog. Я могу абстрагировать ILogger в основном проекте, но этого недостаточно. Например, что я должен сделать для промежуточного программного обеспечения "UseSerilogRequestLogging"? Или что я должен сделать, чтобы добавить Serilog к generi c хосту в CreateHostBuilder?

Рекомендуемый подход:

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .UseSerilog();

1 Ответ

2 голосов
/ 11 февраля 2020

Я предполагаю, что Service.Api является точкой входа вашего приложения. Вот куда вы положили свою композицию Root. Точка входа ссылается на все зависимости для их составления . Итак, да: Service.Api должен иметь ссылку на Service.Infrastructure .

То же самое относится к реализациям ведения журналов, но имейте в виду, что ведение журнала это сквозной вопрос лучший адрес с шаблоном Decorator . Вам не нужен ILogger интерфейс в Service.Core . Добавление одного - это запах кода, потому что ведение журнала не относится к модели домена.

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