@vs101ff
Frontend разработчик

Почему важно «Разделение ответственности»?

Здравствуйте!

Непонятно объяснение "Why is SoC so important?" SoC , конкретно
Keeping different responsibilities together in a single class, you have to maintain their consistency simultaneously in every operation within this class. That quickly leads to a combinatorial explosion.


1. consistency - в смысле достигнуто соответствие (код должен соответствовать поведению, которое требуется, отсутстствие багов) внутри всех операций?
2. Что значит
a huge amount of combinations in which elements of these concerns can interact with each other.
?
2. Нужен пример, иллюстрирующий пп. 1, 2. Если можно, реальный пример.

Я думал на примере Eloquent.

Если представить, что все будет в одном классе, например, Model, объединив все методы и поля, то можно ошибиться?
Только ли из-за большой сложности, связанной с тем, что теперь для многих методов нет очевидного контекста в виде класса, и сложно теперь что-либо найти в 15000 строк кода? Разбив все на методы, DRY всё предметное знание, то проблемы нарушения инвариантов не будет (кроме как по причине того, что легко запутаться и внести в код возможность нарушения инварианта)?
Но если еще плохо выбрать границы методов почти всех методов, то код станет запутанным мусором, и больше не будет отражать семантику предметной области. Мне не удалось придумать этот код так, чтобы не было дублирований предметной логики, т.к. нужно разбивать методы, которые используются несколько раз. Пример, если изменить границы метода и всех вызываемых методов внутри него: Builder::eagerLoadRelation.

Спасибо.
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
@cicatrix
было бы большой ошибкой думать
Абстрактно если, псевдокодом
password = Window.TextBoxPassword.Value
if (!password.RegexMatch('^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$"))
     Window.ValidationText.Text = "Пароль слишком слабый";
else
     try
         connection = new Connection("connecttion string to database");
         .RunSQL("update users set password = @password where username = @user"
     catch  
         Window.ResultMessage.Text = "Ошибка"
Window.ResultMessage.Text = "Пароль изменён"


И таких кусков в программе, например 3, где меняется павроль, но ты знаешь только про 2, так как третий добавили без тебя.
Вопросы: что будет, если изменятся требования к паролю?
Что будет, если изменится оконный дизайн или вообще UI фреймворк?
Что будет, если изменится движок бд, названия таблиц?

сравни c:
password = GetUserInput();
if (ValidatePassword())
{
    UpdateUserPassword()
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы