@warcevil

Как определять ответственность функций?

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

Также с обычными функциями порой запара. Тоже не пойму где их обязанности кончаются. Конкретно не ясно, может ли вспомогательная функция что-нибудь менять, если это что-то ей не дают? Или по-хорошему она должна только отдавать готовый результат?
  • Вопрос задан
  • 446 просмотров
Решения вопроса 3
TrueBers
@TrueBers
Гуглю за еду
По своему опыту могу сказать:
Всё это бесполезный треш, все эти описания как надо, как правильно, как делают гуру, как делают в НАСА, солиды, банды четырёх, десяти, трёхсот спартанцев и т. д. Но, ровно до того времени, пока вы сами до этого не дойдёте. А дойти до этого можно только с опытом. Когда вы пишете что-то относительно не крупное, эти все вещи можно опускать. А когда приходите к огромному проекту, всё идёт само по себе, ибо иначе вы просто не можете с этим взаимодействовать, либо если система уже достаточно хорошо спроектирована, вам приходится писать правильно, т. к. по-другому либо не получится, либо вам дадут по шапке ревьюверы.

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

Рецепт прост: пробовать, делать, строить, ломать, перестраивать, ошибаться, снова перестраивать. Тупо взять и прочитать, как кто-то там сделал и у него получилось, не прокатит. У него звёзды сошлись, а у вас, у меня, или у неё не сойдутся точно в такой же последовательности. Используйте разные языки программирования, разные парадигмы, фреймворки. Это даёт прекрасное понимание о существовании различных архитектурных решений, которое не даст ни однин теоретический паттерн.

Я не хочу сказать, что все эти гофы и солиды не имеют смысла, они созданы для того, чтобы для начала просто с ними ознакомиться, отложить в подсознание и... благополучно забыть! Но потом, когда вдруг что-то писал и внезапно осенило: Да это же паттерн медиатор/обсервер/репозиторий/anyPattern! Вот тут и пригодится та самая книга трёх танкистов и собаки, которая просто направит в нужное русло, объяснит остальное, что не успел понять сам, и т. п.

Всё это моё понимание, работает для меня, может не работать для кого-то другого, кто, например, запоминает 95% прочитанной книги и может уже сразу же адекватно оценить где какой подход использовать, где нужно будет масштабироваться и т.д.

Но, я пока что таких людей не видел...
Ответ написан
Stalker_RED
@Stalker_RED
В том-то и дело, что есть разные философии/парадигмы/принципы/паттерны/антипаттерны и т.д., а универсальной кнопки "сделать зашибись" пока нет.
И выбор конкретного подхода зависит от предметной области, от стандартов индустрии и личных предпочтений главного архитектора, или как его там.

Если уж у вас в тегах стоит ООП, то стоит упомянуть про SOLID. Эти принципы специально придуманы для больших и сложных проектов с долгим жизненным циклом.

Но если вы собираетесь по-быстренькому набросать управление вентилятором, например, прошить этот код в контроллер и забыть о нем навсегда, то принципы SOLID могут показаться слишком громоздкими и переусложненными.
Ответ написан
@red-barbarian
Вопрос о лифте не должен быть оторван от предметной области. )))
Вопрос не в том как сделан лифт и что он умеет. Вопрос должен быть "что нам требуется от лифта?".
Т.е. как мы его используем. Остальное отбрасываем как ненужное.
При таком подходе, вопросы про космос решаются сами собой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы