Мусорная идея для безмозглых программистов, неспособных к независимому мышлению

Принцип единственной ответственности. Единство, ответственность, принцип. Одинокий. Обязанность. Принцип.

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

Это слоган

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

Так что в обоих случаях я получаю 100%. Я понимаю, что вы не имеете в виду эти вещи буквально. Они больше похожи на заголовки кликбейта для вашего дела. Я понял. Но в то же время… ВЫ ПОЗНАЕТЕ, КАК ТУДА ЗВУЧАЕТ!?!

То же самое и с принципом единой ответственности. Я понимаю, что вы не имеете в виду буквально «единоличная ответственность». Больше похоже на «единую категорию обязанностей». Я считаю, что создатель называет это «единственной причиной для изменений».

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

Существует лучший способ

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

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

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

Но принцип единственной ответственности означает единоличную ответственность. Период. Я имею в виду, да, создатель говорит, что это означает другое. НО ПОТОМ ПОЧЕМУ ВЫ НАЗЫВАЛИ ЕГО ЕДИНАЯ ОТВЕТСТВЕННОСТЬ!?! Вы знаете, что это как… как… если бы вы сделали устройство открывания гаражных ворот и сказали бы: «О, это на самом деле не открывает дверь гаража, он просто включает свет ». Как WTF.

Хорошо, допустим, вы не любите «делай что-то и делай это хорошо», потому что, возможно, оно начинается с «d», и это испортит вашу аббревиатуру SOLID. Что ж, тогда есть «разделение проблем», на котором основывалась SRP! Оно начинается с долбанной буквы «S», вы можете это использовать.

Это учебные пособия

Но знаете, ничто так не раздражает меня, как плохой учебник. Причина в том, что учебные пособия никогда не делаются для сложного проекта, который прочно закрепился в своих привычках. Это всегда делается в новом каркасном проекте.

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

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

Я жертва SRP

Так что вам может быть интересно, почему у меня глубоко укоренилась ненависть к SRP. И это не только SRP, это еще и Git LFS. Позвольте мне сказать вам, что если меня обидели в чем-то, я не забуду.

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

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

Итак, я был, ясноглазый недавний выпускник, и решил применить SRP ко всему. Большая ошибка.

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

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

На самом деле я помню точное время, когда щелкнул. Я отлаживал конкретную ошибку и углублялся в стек вызовов. Был вызван класс А, затем был вызван класс В. А потом класс А. И снова класс Б. И я тут же огрызнулся.

ПОЧЕМУ Я ЭТО ДЕЛАЮ? Я МОГ ПРОСТО ВСТАВИТЬ ОДНУ СТРОКУ КОДА, И ЭТО УПРОЩАЕТ ОТЛАДКУ В 10 РАЗ!

Почему люди продолжают защищать SRP

Думаю, это просто смесь Стокгольма, культовых программ карго и людей, перемещающих стойки ворот. Люди просто обожают передвигать стойки ворот.

«О, SRP - это неплохо. Ты просто неправильно его используешь.

Сколько раз вы это слышали?

Знаете, когда я устраиваю пламенную войну на Reddit, я думаю, что это как-то немного подталкивает сообщество. Как и раньше, в обсуждениях о свойствах и переменных в C #: «Не беспокойтесь об этом. Вы можете просто реорганизовать его позже ».

И это всегда могло просто разжечь огромную войну пламени. Не знаю почему, не думаю, что это столь спорное мнение.

Но по прошествии месяцев я получал все меньше и меньше возражений против этого мнения.

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

И это также верно для SRP. Но вот в чем дело: люди продолжают ссылаться на принцип единой ответственности и защищать его. Почему? Люди просто не читают мои посты или что-то в этом роде?

Нет, я думаю, что в сообществе программистов существует глубокий раскол. Те, кто считает Евангелие SRP, независимо от того, что вы о нем говорите. А те, кто думают, что это чушь.

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

0 - ›Не согласен / Не читал
1 -› Нейтрально, но жалко хлопну в ладоши
~ 4 - ›Не нравится все, но есть хорошие моменты
~ 16 - ›Это довольно хорошая статья
~ 50 -› Все должны это прочитать!