Обновить

Комментарии 3

В зависимости от приложения, затраты на разработку и сопровождение кода с высокой связанностью классов в большинстве случаев могут с лихвой перевесить неэффективность во время выполнения.

Тривиальные обёртки плохи не из-за производительности (компилятор обычно вообще обнуляет разницу), а из-за когнитивной нагрузки на программиста, с которой все эти принципы якобы должны бороться.

Допустим, есть такой код (C#):

class C
{
    public int State { get; private set; }

    public void UpdateState(int newState, double someOtherArgument)
    {
        State = newState;      
      
        // плюс какая-то сложная логика
    }
}

var obj = new C();
obj.UpdateState(1, 42.0);

// ...

if (obj.State == 1)
  obj.UpdateState(2, 49.5);

Автор предлагает вместо предпоследней строчки if (obj.State == 1) добавить в класс новый метод UpdateStateIf(int currentState, int newState, double someOtherArgument), который по сути не приносит никакой пользы, только увеличивает объём кода и нагрузку на разработчика, но зато, с точки зрения автора, делает код идеологически чистым.

P.S. Перевод очень тяжёлый, пришлось читать оригинал. Старайтесь не переводить, а пересказывать своими словами.

Автор предлагает вместо предпоследней строчки if (obj.State == 1) добавить в класс новый метод UpdateStateIf(int currentState, int newState, double someOtherArgument)

Это вы так предлагаете, а не автор.

Старайтесь не переводить, а пересказывать своими словами.

Тогда это будет пересказ, а не перевод.

Не надо в классы данных, описывающих какую-то сущность, вкладывать методы бизнес-логики. Класс сущности может быть один на всё приложение, а бизнес-логика может быть реализована в десятке классов-процессоров.

В этом случае, код

if (obj.State == 1) obj.UpdateState(2, 49.5);

может быть в десяти вариантах. Логика этого выражения ДОЛЖНА инкапсулироваться в классах-процессорах (алгоритмах) а не не в классе С.

Статья (источник) - чушь. Она опоздала как минимум, лет на пятнадцать. Полностью противоречит нынешним SOLID, и к примеру, SPRING, да и довольно старым уже "Паттернам проектирования".

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации