none
Я не понимаю патерны... RRS feed

  • Общие обсуждения

  • Добрый день!

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

    • Перемещено YatajgaEditor 10 марта 2015 г. 15:22
    2 марта 2013 г. 10:20

Все ответы

  • Про паттерны еще можете прочитать и скачать у банды четырех: http://www.dofactory.com/Patterns/Patterns.aspx

    Сам я пробовал использовать паттерны, но опыта мало и проектов больших не писал. Так, ради интереса перед собеседованиями читал.

    2 марта 2013 г. 15:36
  • Знать паттерны проектирования - важно! А понимать еще важнее!!!

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

    В качестве отправной точки для изучения шаблонов можно взять Материал из Википедии.

    2 марта 2013 г. 15:59
  • Знать паттерны проектирования - важно! А понимать еще важнее!!!

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

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

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

    Станет вопрос о совместной разработке - буду изучать нужный паттерн.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    2 марта 2013 г. 17:34
    Отвечающий
  • Просто пока не очень понятно зачем создавать кучу классов чтоб обратится к классу в котором есть данные, когда можно сделать на много проще

    interface ICar { void Engine(); } class BMW:ICar { public void Engine() { Console.WriteLine("Max speed 200"); } } class Opel:ICar { public void Engine() { Console.WriteLine("Max speed 150"); } }

    BMW bmw = new BMW();
    bmw.Engine();
    Opel opel = new Opel();
    opel.Engine();

    Хотя может там пример слишком простой, и в более сложном решении будет понятно зачем это нужно...

    p.s. Сужу пока только по абстрактной фабрике так как в ней пока более менее разобрался

    3 марта 2013 г. 8:06
  • Сила в простоте. Так что не парься и забей на паттерны. Я пишу код на C# уже более 8 лет, работал в крупных проектах, и до сих пор работаю, но паттерны не использовал ни разу. Я руководствуюсь принципом, что инструмент нужен только тогда, когда с помощью него нужно решить конкретную задачу. Иначе это выглядит так, я возьму утюг в левую руку, что бы правой забивать гвозди молотком, потому что умные дяди написали так в книгах, и стаи их поклонников создали вокруг этого культ.

    ПС: Не исключаю что паттерны бывают необходимы для решения конкретных задач...

    • Изменено Max Charp 4 марта 2013 г. 13:06
    4 марта 2013 г. 13:04
  • Выскажусь и я.

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

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

    Ещё: знание паттернов позволяет находить общий язык с коллегами. Достаточно сказать: здесь используется визитор (посетитель) - и в целом понятно, что и как происходит (имхо, это не всегда так). В противном случае, пришлось бы долго объяснять, что тут делается.

    Должен отметить, что многое зависит от применяемого языка программирования. В некоторых языках есть конструкции, которые по сути являются уже реализованными паттернами. Например, цикл foreach - неявное применение паттерна итератор.

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

    4 марта 2013 г. 16:31
  • Спасибо большое всем за ответы, ваше мнение очень важно для меня. 

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

    5 марта 2013 г. 9:39
  • К слову о том "Когда нужны паттерны?".

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    6 марта 2013 г. 16:35
    Отвечающий
  • Ну тут спорить не буду, но без нормального проекта где в это все надо будет вникать и смотреть на практике я врядли их нормально освою
    6 марта 2013 г. 18:27
  • "Во всем нужна сноровка, закалка, тренировка!" :)
    6 марта 2013 г. 18:29
  • даже  используя паттерн, всё равно не легко будет найти то, как прошлый программист сделал реализацию работу  допустим с  Excel фаилом, так же? 


    • Изменено Magals 7 марта 2013 г. 12:45
    7 марта 2013 г. 12:28
  • Ну умничать не буду, но базовые функции работу и екселем можно поместить в один класс, который просто будет частью патерна. Как то так
    7 марта 2013 г. 19:50
  • даже  используя паттерн, всё равно не легко будет найти то, как прошлый программист сделал реализацию работу  допустим с  Excel фаилом, так же?

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

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    7 марта 2013 г. 19:54
    Отвечающий
  • Вот вам хорошая книга для прочтения. Я с неё когда то начинал. Всё очень просто и понятно, как раз для начинающего.
    8 марта 2013 г. 19:06
    Модератор
  • "Сила в простоте." - согласен. Поэтому дополнытельные знания (которые приходят со временем и опытом), знание паттернов в том числе, учат нас делать всё проще и понятней. "Так что не парься и забей на паттерны. Я пишу код на C# уже более 8 лет, работал в крупных проектах, и до сих пор работаю, но паттерны не использовал ни разу." - а вот с этим не согласен. Без обид, но вот из-за таких как вы, которые нахардколи и ушли, таким как я приходится не сладко. Порой приходится писать всё с нуля, ибо изменить невозможно. Больше 90% процентов своего времения я и наша комманда тратит на сопровождение чужого кода, поэтому, поверьте я знаю что такое чужой корявый код, проекты у нас большие. А вот есть проекты, сопровождая которые получаешь одно удовольствие, всё легко и просто, хотя логика там очень сложная. Так, что изучать надо обязательно, не сразу, за раз не получится, а по мере продвижения вперёд.

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

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


    10 марта 2013 г. 20:13
    Модератор
  • Понимание паттернов проектирования – это очень (!) важно. Потому что паттерны – это не просто какие-то шаблоны, которые помогают строить программные системы, это в первую очередь новый уровень абстракции в информатике, как анализ в математике. Если бы не было анализа – мы бы ездили на телегах, если бы не было шаблонов, то скорее всего не было бы того обилия сложных программных систем. Проанализируйте коды Хейлсберга, Гунерсона, Гольдберга, Рихтера и других известных специалистов – Вы увидите, что все они базируются как на базовых (гофовских) паттернах, так и на более высокоуровневых.

    То, что книга (ГОФ) имеет ряд недостатков – это неоспоримо. Многие представители ИТ комьюнити обращались к авторам с просьбой внести исправления и подготовить 2-е издание, но авторы физически уже не смогут этого сделать, так как в свое время они объединили диссертацию Эриха Гаммы и ряд статей независимых авторов. При этом из контекста книги видно, что авторы (ГОФ) сами не имеют очень глубокого представления об описываемых абстрактных техниках в своем каталоге (многое заимствовалось). И в этом нет ничего страшного, ведь суть каталога в том, чтобы дать базис (23 шаблона), на котором строятся более высокоуровневые паттерны.

    Мы постарались в своей книге элиминировать присущие недостатки изложения и представления. При этом постарались ориентироваться именно на программистов, использующих язык C# и технологии .Net, именно тех, кто не знаком с языком C++ и SmallTalk. Первую версию книги вы можете скачать бесплатно с ресурса ITVDN http://itvdn.com/ru/patterns . Спасибо.



    1 марта 2015 г. 12:20
  • Alexander Shevchuk, нельзя ли дать прямую ссылку на скачивание, без всяких регистраций-логинов?
    3 марта 2015 г. 15:30
  • Однажды, столкнувшись с необходимостью улучшить код, ты изобретешь какой - нить давно известный паттерн. Получится хуже, чем если бы ты его уже знал.
    4 марта 2015 г. 6:57
  • А ведь и впрямь хорошая книга! Коротко,  ясно и очень наглядно. Спасибо!

    Сделаем содержимое сообщества лучше, вместе!

    10 марта 2015 г. 15:17
    Модератор
  • Не работает регистрация на сайте cbsid.com
    Требует ввода, но не могу ввести страну - зависает.
    10 марта 2015 г. 16:16
  • Добрый день.

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

    Паттерны нужно знать, т.к. очень многие вещи без них становятся или бесполезны, либо трудно реализуемыми. Например, вы можете разрабатывать на WPF в стиле WinForms только с XAML. А можете на основе паттерна MVVM, существенно облегчая себе жизнь. Т.е. паттерны, это не только большие проекты и команды разработчиков, но и облегчение жизни себе любимому. И чем больше вы будете разрабатывать, тем больше у вас будет заготовок, построенных на том или ином паттерне и вы уже вместо изготовления велосипеда, будете подключать имеющиеся у вас сборки в новые проекты.

    10 марта 2015 г. 16:49
    Отвечающий
  • Сработало - зарегистрировался.
    10 марта 2015 г. 16:50
  • Когда появились первые ростки 
    объектно - ориентированного программирования,
    оно тоже казалось хотя и модным, но каким-то никчемным -
    тогдашние программисты легко обходились и без этого.
    Сегодня, видимо, та же самая история с паттернами.
    Книжка очень полезная - надо читать.
    10 марта 2015 г. 19:24