Pull to refresh

Comments 59

Мне кажется, что гораздо проще стать матёрым сеньором и создавать эти "паттерны" по ходу проектирования очередного компонента/сервиса/приложения, нежели заучивать этот безумный список.

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

Если ещё полгода назад я предпочитал писать всё по наитию, то потом пришёл к выводу, что на паттернах код получается лучше.

Это нормально. Еще через несколько лет поймете, что надо не "писать на паттернах", а видеть паттерны в своих решениях.

Не факт. Если вы не используете, то это не означает, что это правильно. Как минимум паттерн стратегия много где применялся.

Если вы не используете, то это не означает, что это правильно.

Мне кажется, вы не поняли, о чем я пишу. Я не говорю, что я не использую паттерны. Я говорю, что использование паттернов - не самоцель.

Я, повторюсь, вообще считаю, что основная задача паттернов - не в том, чтобы по ним писать код.

Как минимум паттерн стратегия много где применялся.

Много применялся кем? В рамках чего? Зачем?

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

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

Паттерны не являются самоцелью. И большинстве случаев не приходится пользоваться

Тогда я не понимаю, как трактовать вашу фразу «на паттернах код получается лучше». Что вы ей хотели сказать?

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

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

Когда я пишу код, как мне видится удобным, а потом кто-то приходит и говорит «да это же паттерн fluent interface» - что от этого поменялось в моем коде? Он перестал быть «по-моему»? Или он стал хуже? Или лучше?

Кроме "матёрого сеньёра" на проекте другие инженеры работают? Паттерны не панацея, но это консолидированные и обобщённые знания, которые известны всем. Заучивать безумный список не надо, паттерны не требуется знать наизусть. С ними нужно быть знакомым, чтобы не изобретать каждый раз колесо, с которым никто в мире не знаком, а говорить с другими разработчиками на одном языке.

Тенденция, которую я всё больше наблюдаю, отказ от знаний, "я чё дурак это всё учить?", оно напрямую выливается в совершенное безумие в коде. Это уже не велосипеды в коде, что я порой наблюдаю, это адские колесницы :)

это адские колесницы

Во-первых, есть шанс, что просто эти человеки пока не доросли на сеньоров.

Во-вторых, иногда адские колесницы все равно лучше решают поставленную задачу, чем, например, попытки реализовать IRepository<> поверх Entity Framework.

Тем же чем "Пул объектов" от "Приспособленца" и "Мать объектов" от фабрики. Названием :)

По сути, это его модификация. А так всё то же самое.

В чем заключается модификация?

Если я правильно понимаю, то в пошаговом строителе каждый метод возвращает экземпляр объекта в отличие от обычного. То есть потом в пошаговом мы можем написать что-то вроде new Builder().SetText("...").SetDescribtion("...").Build().

А откуда вы вообще нашли такой паттерн? Или вы сами его придумали?

На просторах интернета. Есть много паттернов, по которым и на английском информации немного. А вот по банде четырёх информации действительно полно.

Могу посоветовать Мартина Фаулера (Шаблоны корпоративных приложений). Где-то пдф находил и читал. Там не только паттерны, но и архитектура. Также могу порекомендовать этот сайт: https://java-design-patterns.com/patterns/

Есть много паттернов, по которым и на английском информации немного.

Так может тогда это и не паттерн?

Смысл паттерна в том, что его опознают и одинаково понимают. Если это не работает, в паттерне нет смысла, это просто код.

То что тут описано под название Монада, никакого отношения к монаде не имеет вообще. Продолжение фигни из предыдущего поста. Горшочек, не вари.

Что имеет отношение к Монаде? Может, я что-то не знаю. Это так мило :)

Но лично у меня всего год опыта работы. 

Значит вы вообще ничего не знаете. Писать о паттернах с годом опыта вообще весьма самоуверенно. Получается на выходе как правило фигня, что мы и наблюдаем во втором посте.

https://ru.wikipedia.org/wiki/Монада_(программирование)

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

Ну да. В википедии описано иначе. Но я все равно продолжу писать. Предложение горшочку перестать варить отклонено.

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

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

Паттерн это типовое решение типовой задачи. У вас нет опыта решения типовых задач, для вас большинство задач пока новые. Я бы оценил число широко используемых паттернов в десяток, в лучшем случае.

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

Ну да, суть в том чтобы выкинуть сто, которые все равно никто не применяет. И хорошо описать десяток.

Я бы оценил число широко используемых паттернов в десяток

Можно увидеть вашу десятку? Какие наиболее часто встречаются в разработке у вас?

Синглтон, фабрика и стратегия (в широком ее понимании). И адаптер еще. Вброс зависимостей, если считать его паттерном.

И да, этот все специфично для ООП (кроме адаптера, адаптер универсален).

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

Ничего удивительного - это все-таки самые базовые элементы, которые в той или иной мере нужны всем.

Моя десятка может быть вам даже и не знакома - у меня там паттерны из EIP так называемых. Ну а помимо - фабрики, билдеры, это наверное уже процентов 90 будет.

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

Кто конкретно описал и ввел каждый из этих паттернов? Насколько они общеприняты?

Я смотрю, в комментариях быдлохейтеров с предвзятым отношением развелось. Чтобы я не комментировал, сразу минус. И никаких комментариев.

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

Я не считаю нормальным в случае несогласия переходить к унижениям и насмешкам как принято в обществе с "традиционными ценностями". Вы со своим президентом так пообщайтесь. И, по-моему, по вашим вопросам ответы и предыдущих комментариях были. Я бы не считал бы некоторые паттерны недействительными только от того, что реже встречаются. Какие-то Роберт Нистрем ввёл, какие-то - Мартин Фаулер, а по другим затрудняюсь сказать.

Я не считаю нормальным в случае несогласия переходить к унижениям и насмешкам

А я, вроде бы, и не делал ни того, ни другого. А вот "быдлохейтерами" оппонентов назвали вы.

Вы со своим президентом так пообщайтесь.

...вы о чем вообще?

Я бы не считал бы некоторые паттерны недействительными только от того, что реже встречаются.

В чем, по-вашему, смысл паттерна? Чем паттерн отличается от просто решения в коде?

Какие-то Роберт Нистрем ввёл, какие-то - Мартин Фаулер, а по другим затрудняюсь сказать.

Если вы затрудняетесь сказать, то где вы этот паттерн взяли? Почему вы решили, что это паттерн?

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

Решения, которые вам показались удачными в чужом коде - это не обязательно паттерн (и очень опасно их применять, не понимая контекста).

В чем, по-вашему, смысл паттерна?

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

Без контекста и нет смысла использовать

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

паттерн - это шаблон, который принято использовать в определённых случаях.

Вот отсюда и растет «код по паттерну», который приводит к куче паттернов без смысла.

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

Из паттернов вижу банду четырёх, Мартина Фаулера и Роберта Нистрема как минимум. В обществе они по идее и являеются общепринятыми.

Во-первых, про паттерны GoF и Фаулера я могу прочитать в первоисточнике, ваша статья никакой пользы не несет.

А во-вторых, вы не указываете, откуда взяты ваши паттерны, откуда и растет вопрос - а они точно общепринятые?

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

Когда начинал писать, была идея объяснить простым языком. Видать, получилось коряво и поверхностно. Лично я Мартина Фаулера начал понимать только после некоторых прочтений.

Ну то есть вы считаете, что (а) поняли достаточно, чтобы объяснять другим, и (б) считаете, что другие не могут понять то же самое сами, хотя у вас, если я правильно понимаю, год опыта работы?

Как вы наверное догадались из комментариев, ваши читатели оказались не согласны с вашей оценкой. Лично я вот считаю, что вы пока недостаточно понимаете паттерны, чтобы кому-то их объяснять.

Быть может. Да и по-хорошему на каждый паттерн отдельную статью надо, а иначе не будет глубины.

Нет, не надо (вам) на каждый паттерн отдельную статью, у вас недостаточно опыта, чтобы их наполнить.

Есть же первоисточники, вам есть, что нового сказать по сравнению с ними?

Какие-то Роберт Нистрем ввёл

Это который «Паттерны программирования игр» (никакой другой книги за этим именем я не нашел)?

И вас не смущает, что вы ссылаетесь на паттерны, введенные этим человеком, в статье «паттерны для разработки корпоративных приложений»? А как же тот самый контекст?

Роберта Нистрема ещё не описывал. По крайней мере в этих двух статьях. Да и не стоит.

Тогда зачем вы вообще его поминали в контексте вопроса «откуда ваши паттерны»?

Забавно, конечно. Паттерны предлагались, в числе прочего, как способ структурировать знание, а вы их превращаете в анонимные советы, девальвируя их обратно.

А у меня сложилось впечатление, что не только Банда четырёх и Мартин Фаулер являются популярными.

Популярность - не то же самое, что применимость.

Я же вас постоянно спрашиваю, откуда вы взяли конкретный паттерн.

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

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

Что возвращает меня к мысли о том, что пользы от вашей статьи чрезвычайно мало - все равно надо читать первоисточники, а вы их не указываете.

Sign up to leave a comment.

Articles