Создание слабосвязанного кода¶
Связанность — важная концепция ООП. Онп означает, как данный класс зависит от других.
Пример с классами UserController и EmailSender — образец сильной связанности; объект EmailSender создавался напрямую. Кроме того, этот код сложно тестировать — любые попытки выполнить метод приведут к отправке электронного письма.
Использование EmailSender в качестве параметра конструктора уменьшило связанность системы, однако, чтобы снизить ее еще больше (а также сделать UseController тестируемым), необходимо привязываться не к реализации, а к интерфейсу — это поможет отвязаться от конкретной реализации (и заменять их при необходимости).

В качестве примера можно создать интерфейс IEmailSender:
Тогда
UserController сможет зависеть от этого интерфейса:public class UserController : ControllerBase
{
private readonly IEmailSender _emailSender;
public UserController(IEmailSender emailSender)
{
_emailSender = emailSender;
}
[HttpPost("register")]
public IActionResult RegisterUser(string username)
{
_emailSender.SendEmail(username);
return Ok();
}
}
Теперь можно в любой момент поменять реализацию интерфейса (например, во время тестирования) без необходимости изменять код
UserController.
Но как приложение узнает, какую реализацию передать в UserController? Для этого нужно зарегистрировать сервис EmailSender в контейнере зависимостей. Обычно это выглядит как указание “для интерфейса X используйте реализацию Y”.
Дата создания : 29 сентября 2022 г.