Я, возможно, немного остро отреагировал

Итак, я написал статью, которая неожиданно стала вирусной под названием «Принцип единственной ответственности: почему люди продолжают защищать эту мусорную идею».



И я никогда не ожидал, что эта статья станет вирусной. Я пришел из Tumblr, где за все годы публикации только одна статья стала вирусной (а я знал, что она вирусная, потому что ее прокомментировали 2 человека).

И, оглядываясь назад, я, наверное, не должен был делать эту статью такой разглагольствованной. Потому что это то, что это насквозь: напыщенная речь. Это означает, что у него не очень высокий уровень логики и высокий уровень эмоций.

Я все еще придерживаюсь этого. Это просто непонятно. Поэтому в этой статье я хотел бы прояснить некоторые вещи в исходной статье.

Так много плохого произошло из-за одной ответственности

Итак, мой главный аргумент в посте заключается в том, что единая ответственность — это плохое имя, потому что оно заставляет людей думать, что «единая ответственность» буквально означает единую ответственность.

И я на самом деле не нападаю на людей, которые используют здесь принцип единой ответственности. Даже создатель SRP заявил, что это скорее «категория вещей, которые нужно изменить вместе», а не просто буквально одна обязанность.

Но я действительно думаю, что это должно быть переименовано. Это что-то вроде стокгольмского синдрома. Да, вы ознакомились с принципом единой ответственности и поняли, что буквально это не означает «единая ответственность». Но знаете что? Миллионы людей как раз сейчас переживают этот период и пишут корявый код под видом «единой ответственности».



Вы знаете, в статье кто-то сказал, что очевидно, что единая ответственность не означает единую ответственность. Это как бабочка не означает муху, сделанную из масла. Но я не совсем согласен. Потому что очевидно, что ни одна муха не сделана из масла. Но «единая ответственность» достаточно реалистична, чтобы вы могли подумать, что это буквально означает «единая ответственность».

Итак, в статье я говорю, что мы должны использовать либо философию Unix «Делайте одно дело и делайте это хорошо», либо «Разделение задач». Разделение задач даже начинается с буквы S, так что вы можете просто вставить ее в аббревиатуру SOLID, если вам действительно важны аббревиатуры.

Я не против инкапсуляции

Еще одна жалоба, которую я услышал из этой статьи, заключается в том, что вы либо на 100% за SRP, либо на 100% против. Итак, очевидно, что это ложная дихотомия. Но я действительно хочу объяснить, почему SRP ошибается в отношении инкапсуляции.

SRP не учитывает, насколько взаимосвязаны вещи. Что я считаю большой ошибкой.

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

Но некоторые вещи должны быть инкапсулированы. Вроде есть диалоговая система. Система диалогов не обязана знать об остальной части игры, поэтому я могу об этом рассказать. То же самое касается того, что рисует пути, по которым может идти отряд. Я тоже могу это зафиксировать.

Но инкапсулировать все просто глупо.

Это также проявляется, в меньшей степени, в других программах. У нас все еще есть такие вещи, как управление состоянием, что означает, как один объект может общаться с другим, не связанным с ним объектом. Но у нас не так много пинг-понга друг с другом.

Но я думаю, что это на самом деле делает его хуже в другом программировании. Это дает вам ложную надежду.



Это просто не четко определено

Что такое единая ответственность? И это я думаю, пожалуй, самая большая проблема. Я всегда вижу сообщения в Интернете, такие как «Что такое единственная ответственность?», «Это единственная ответственность» и «Нарушает ли это SRP?».

И у всех, кажется, разные ответы. Достаточно сказать, что это не та основа, на которой вы должны строить известное правило программирования.

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

Заключение

Вы знаете, что проблема с принципом единой ответственности в основном состоит в том, что люди неправильно его понимают. Но это также и просто абсолютное утверждение. Например: «Ты должен создавать только классы, которые несут одну ответственность».

Не говорите мне, что делать с моим кодом.

Это так же произвольно, как сказать, что все имена файлов должны использовать pot_hole_case (я очень разочарован, что он попал в линтер Flutter по умолчанию).

Вы знаете, я читал эту статью о чистом коде. И это правильно.

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

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