Как проектировать, используя шаблоны - PullRequest
0 голосов
/ 12 апреля 2011

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

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

Шаблоны, которые я сейчас изучил, - это Composite, Builder, Adapter, Proxy, Observer, State, Strategy, Template Template иИтератор.Как я уже упоминал, я знаю, что они должны решать, но я чувствую, что пытаюсь заставить шаблоны на место.Любая помощь или ссылки на страницы будут с благодарностью.Спасибо всем!

Ответы [ 5 ]

4 голосов
/ 12 апреля 2011

Если вы не необыкновенно интуитивны (например, чувак, которому никогда не нужно пытаться получить 4.0, или вы в месте, как показано в фильме о парне в фейсбуке, где все гениальны, а Билл Гейтс приходит к вам в гости) есть определенное количество боли, которое неизбежно, прежде чем умственные конструкции, которые действительно не существуют где-либо еще, но в предмете объектно-ориентированного программирования, становятся частью вашего естественного процесса мышления.

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

Я не знаю, согласен ли я с тем, как CS преподается студентам в наши дни. В 1994 году в Rutgers я взял C данных структур и компьютерной архитектуры в качестве новичка. Шаблоны, которые я выучил, были такими вещами, как «связанный список» и «абстрактное дерево». Это было основой для понимания вещей более высокого уровня.

3 голосов
/ 12 апреля 2011

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

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

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

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

После этого вы сможете найти все больше и больше способов использования структурных шаблонов.Фасад прост и широко используется - многие вещи заключены в простой интерфейс.Декоратор, Композитный, Прокси, Адаптер - все о том, как заставить объект «идентичность типа» вести себя по-разному, узнать сходство между ними и узнать, почему каждый из них отличается, и где их применять.Наконец, поведенческие паттерны обычно используются либо в сценариях управления состоянием, либо в некотором аспекте связи между объектами.В основном они связаны с определенными типами проблем, например, Memento предлагает необходимость выполнять откат или сохранение состояния.

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

3 голосов
/ 12 апреля 2011

Попытка «форсировать» шаблон проектирования не является правильным подходом.

Если у вас уже есть код, лучше всего подойти к этому с точки зрения рефакторинга. Ищите «плохие запахи». Каковы актуальные проблемы? Может быть так, что в коде так много основных проблем (слишком длинные функции, чрезмерное дублирование), что вам нужно решить их, прежде чем вы сможете взглянуть на него с более высокого уровня.

Как только вы очистите код на базовом уровне, могут возникнуть некоторые проблемы более высокого уровня, и вот здесь патенты могут помочь. Но вместо того, чтобы сказать «как я могу использовать ЭТОТ шаблон», скорее всего, вы посмотрите на проблему и скажете: «АГА. Это идеально подходит для шаблона декоратора». Этого не может быть, но вы будете более открыты для поиска шаблона, как только изучите книгу.

Хороший термин здесь - serendipity .

1 голос
/ 12 апреля 2011

Билл Веннерс : Значит ли ценность шаблонов в том, что в реальном мире, когда я чувствую особую боль, я смогу найти известное решение?

Эрих Гамма : Я определенно рекомендую людям использовать шаблоны.Не начинайте сразу бросать шаблоны в дизайн, но используйте их по мере продвижения и поймите больше проблемы.Из-за этого мне действительно нравится использовать шаблоны по факту, рефакторинг к шаблонам. Один комментарий, который я увидел в группе новостей сразу после того, как шаблоны стали более популярными, был тем, кто утверждал, что в конкретной программе они пытались использовать все 23GoF шаблоны.Они сказали, что потерпели неудачу, потому что они могли использовать только 20. Они надеялись, что клиент перезвонит им, чтобы вернуться снова, так что, возможно, они смогут втиснуть в другой 3.

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

Билл Веннерс : Это забавно, потому что мой второй вопрос состоял в том, что я заметил, что часто люди считают дизайн с наибольшим количеством шаблонов лучшим.На нашем семинаре по дизайну у меня есть участники, которые делают дизайн-проект, который они представляют другим в конце семинара.Практически всегда докладчики хотят показать, сколько шаблонов они использовали в своем дизайне, хотя я и пытаюсь сказать им, что цель - это простой и понятный API, а не победа в конкурсе «Я использовал самые шаблоны»,Я только что слышал, как вы говорили то же самое, что это неправильный способ думать о шаблонах.Если нет, каково правильное обоснование использования шаблонов в проектах?

Эрих Гамма : Многие шаблоны касаются расширяемости и возможности повторного использования.Когда вам действительно нужна расширяемость, шаблоны предоставляют вам способ достичь этого, и это круто.Но когда вам это не нужно, вы должны сохранять свой дизайн простым и не добавлять ненужных уровней косвенности.Один из наших девизов Eclipse - это то, что мы хотим расширения, где это важно.На самом деле, если вы заинтересованы в том, как мы используем шаблоны в Eclipse, я попытался описать их использование в главе книги «Вклад в Eclipse» [см. Ресурсы].В этой главе я использовал шаблоны проектирования для объяснения частей архитектуры Eclipse.


http://www.artima.com/lejava/articles/gammadp.html

google parts II - IV тоже!:) это отличные чтения

0 голосов
/ 12 апреля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...