Комментарии 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) obj.UpdateState(2, 49.5);
может быть в десяти вариантах. Логика этого выражения ДОЛЖНА инкапсулироваться в классах-процессорах (алгоритмах) а не не в классе С.
Статья (источник) - чушь. Она опоздала как минимум, лет на пятнадцать. Полностью противоречит нынешним SOLID, и к примеру, SPRING, да и довольно старым уже "Паттернам проектирования".

Энди Хант «Говори, а не спрашивай»