All Projects → Hexlet → Patterns

Hexlet / Patterns

Language agnostic patterns description

Programming Languages

javascript
184084 projects - #8 most used programming language
python
139335 projects - #7 most used programming language
ruby
36898 projects - #4 most used programming language

Labels

Projects that are alternatives of or similar to Patterns

Patterns
Complete catalog of all classical patterns in the Archimate language
Stars: ✭ 70 (-61.54%)
Mutual labels:  patterns
Ios Design Patterns
Learning ground for iOS Design Pattern included with sample projects for MVC, MVP, MVVM, and VIPER
Stars: ✭ 120 (-34.07%)
Mutual labels:  patterns
Reactpatterns
Patterns for React Developers
Stars: ✭ 1,682 (+824.18%)
Mutual labels:  patterns
Architecture Center
Azure Architecture Center
Stars: ✭ 1,207 (+563.19%)
Mutual labels:  patterns
Java Interview
At the beginning, it was the repository with questions from Java interviews. Currently, it's more like knowledge base with useful links.
Stars: ✭ 114 (-37.36%)
Mutual labels:  patterns
Globby
User-friendly glob matching
Stars: ✭ 1,864 (+924.18%)
Mutual labels:  patterns
Fast Glob
🚀 It's a very fast and efficient glob library for Node.js
Stars: ✭ 1,150 (+531.87%)
Mutual labels:  patterns
Designpatternsincsharp
Samples associated with Pluralsight design patterns in c# courses.
Stars: ✭ 149 (-18.13%)
Mutual labels:  patterns
100 Words Design Patterns Java
GoF Design Patterns, each pattern described with story from real life.
Stars: ✭ 117 (-35.71%)
Mutual labels:  patterns
Design Patterns In Dart
Gang of Four (GOF) design patterns implemented in Dart. Contributions welcome!
Stars: ✭ 135 (-25.82%)
Mutual labels:  patterns
React Recipes
React Recipes & Patterns.
Stars: ✭ 86 (-52.75%)
Mutual labels:  patterns
003 Arquitetura Flask
Arquitetura definitiva para projetos Flask
Stars: ✭ 111 (-39.01%)
Mutual labels:  patterns
React Redux Typescript Guide
The complete guide to static typing in "React & Redux" apps using TypeScript
Stars: ✭ 11,621 (+6285.16%)
Mutual labels:  patterns
Designpatterns
DesignPatterns samples by csharp on dotnetcore 《大话设计模式》 中设计模式总结/C#(.NETCore)代码
Stars: ✭ 73 (-59.89%)
Mutual labels:  patterns
Fastflow
FastFlow pattern-based parallel programming framework (formerly on sourceforge)
Stars: ✭ 137 (-24.73%)
Mutual labels:  patterns
Random
Generate random strings or numeric values
Stars: ✭ 68 (-62.64%)
Mutual labels:  patterns
Fooddelivery
Design OO food delivery app with C# & Design Patterns
Stars: ✭ 126 (-30.77%)
Mutual labels:  patterns
Expat
Reusable, composable patterns across Elixir libraries
Stars: ✭ 157 (-13.74%)
Mutual labels:  patterns
Core Spring Patterns
设计模式 by 波波微课
Stars: ✭ 142 (-21.98%)
Mutual labels:  patterns
React In Patterns
A free book that talks about design patterns/techniques used while developing with React.
Stars: ✭ 10,948 (+5915.38%)
Mutual labels:  patterns

Шаблоны проектирования

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

Структура репозитория устроена так, что в папке content содержится список папок соответствующих паттернам. Внутри README.md с общим описанием шаблона и папки по языкам, например, javascript. Внутри папки с языком снова папки. Каждая из них - реализация паттерна в конкретной ситуации или конкретным способом.

В тех ситуациях, когда надо приводить пример в общем описании, он приводится на JavaScript.

Лирика

Шаблон проектирования (паттерн) - подходы к решению типовых задач проектирования.

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

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

Шаблоны проектирования - не законы физики, придуманные учёными в стенах университетов. Большинство шаблонов постоянно переизобретается разработчиками в разных уголках света. Причём не все из них вообще слышали словосочетание "паттерны программирования". Паттернов существует огромное количество и постоянно придумываются новые. Они относятся не только к коду. Например, существуют паттерны для работы с базами данных, с распределёнными системами, некоторые специфичны для конкретных языков, другие можно применять вообще почти для всего (например, фасад).

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

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

Плохая абстракция хуже дублирования кода

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

Модульность

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

Довольно известный Open-closed Principle на самом деле говорит о модульности и нисколько не специфичен для ООП стиля разработки.

Open-closed Principle

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

Ключевые понятия

Клиент

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

Полезные ссылки

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].