Принципы в C# - часть 2. Принцип единой ответственности
Принцип единой ответственности (или сокращенно SRP) гласит, что:
У класса должна быть одна и только одна причина для изменения, а это означает, что у класса должна быть только одна работа.
Это не означает, что класс должен содержать только один метод или одно свойство, но его члены должны относиться к его ответственности.
В этом примере мы собираемся создать UserService
, в его обязанности входит управление данными пользователя в системе.
public class UserService
{
public void CreateUser(string email, string password)
{
if(string.isNullOrEmpty(email)
throw new NullArgumentException("E-mail cannot be null or empty.");
if(string.IsNullOrEmpty(password)
throw new NullArgumentException("Password cannot be null or empty.");
User user = new User(email, password);
var smtpClient = new SmtpClient("smtp.gmail.com")
{
Port = 587,
Credentials = new NetworkCredential("email", "password"),
EnableSsl = true,
};
smtpClient.Send("our.app@gmail.com", email, "Welcome!", "Welcome to our system!");
}
}
Приведенный выше пример нарушает принцип SRP, потому что CreateUser
метод отвечает за две вещи: создание пользователя и отправку электронного письма.
Давайте изменим его, чтобы он соблюдал принцип SRP.
public class UserService
{
private readonly IEmailService _emailService;
public UserService(IEmailService emailService)
{
_emailService = emailService;
}
public void CreateUser(string email, string password)
{
if(string.isNullOrEmpty(email)
throw new NullArgumentException("E-mail cannot be null or empty.");
if(string.IsNullOrEmpty(password)
throw new NullArgumentException("Password cannot be null or empty.");
User user = new User(email, password);
_emailService.SendEmail(email, "Welcome!", "welcome to our system!");
}
}
Теперь UserService
он отвечает только за создание пользователя и делегирует электронную почту другому классу.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.