Перейти к содержанию

Создание слабосвязанного кода

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

public interface IEmailSender
{
    public void SendEmail(string username);
}

Тогда 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”.


Последнее обновление : 23 апреля 2023 г.
Дата создания : 29 сентября 2022 г.

Комментарии

Комментарии