Links - gusenov/software-design-patterns GitHub Wiki
- martinfowler.com
- Catalog of Patterns of Enterprise Application Architecture
- Domain Logic Patterns
- Data Source Architectural Patterns
- Object-Relational Behavioral Patterns
- Object-Relational Structural Patterns
- Object-Relational Metadata Mapping Patterns
- Web Presentation Patterns
- Distribution Patterns
- Offline Concurrency Patterns
- Session State Patterns
- Base Patterns
- Development of Further Patterns of Enterprise Application Architecture
- Narratives
- Temporal Patterns
- Events
- Accounting Patterns
- Presentation Patterns
- Base Patterns
- Unclassified
- CQRS
- GivenWhenThen is a style of representing tests - or as its advocates would say - specifying a system's behavior using SpecificationByExample.
- Mocks Aren't Stubs
- Using the Rake Build Language
- The LMAX Architecture
- Is Design Dead?
- Catalog of Patterns of Enterprise Application Architecture
- Refactoring.com
- Design Patterns & Refactoring
- Refactoring and Design Patterns
- Паттерны проектирования в C# и .NET
- Хабр
- Iterators, composites and visitors - Architecture tutorial - developer Fusion
- Visitor pattern - Wikiwand
- Пример для видео "Фабричный Метод" от ExtremeCode
- EnterpriseQualityCoding/FizzBuzzEnterpriseEdition: FizzBuzz Enterprise Edition is a no-nonsense implementation of FizzBuzz made by serious businessmen for serious business purposes.
- Ответы на вопросы на собеседование Design patterns
- Справочник «Паттерны проектирования»
- mkobuolys/flutter-design-patterns: Flutter Design Patterns mobile application
- XUnit Test Patterns
- Hyrum's Law
- Qt 6.2 / Qt Widgets / Model/View Programming
- Девять главных учебников для архитектора информационных систем: от классики Клеппмана, до современного Хононова
- Simple != easy by Rich Hickey (author of Clojure)
- InfoQ / Software architecture and design
- Modern Trading Applications Architectures: LMAX And Project Reactor
- luminousmen / #architecture
- Envato Tuts+ / Agile Design Patterns
- learndesignpatterns.quora.com
- RSDN / Статьи / Проектирование ПО / Паттерны проектирования
- stanislaw/SoftwareDesignHeuristics: Heuristics for software design, development, testing, and maintenance programming.
- EventHelix / Design Patterns
- Workflow Patterns
- Microprocess Architecture
- InfoQ / Integration Patterns
- Mobile Application Pattern Language
- Architecture Tradeoff Analysis Method Collection a method for evaluating software architectures against quality attribute goals.
- ADTmag/ Object Lifetime Manager: A Complementary Pattern for Controlling Object Creation and Destruction
- InfoQ.com / A Skeptic’s Guide to Software Architecture Decisions
- freeCodeCamp.org / How to Create Software Architecture Diagrams Using the C4 Model
- ByteByteGo
- "Every component in my architecture must serve a purpose and provide a return-on-investment." by Yan Cui
- The list of architectural metapatterns by Denys Poltorak
- Ambiguous architectural patterns by Denys Poltorak
- Pipelines in architectural patterns by Denys Poltorak
IF
- Anti-IF Programming - Less IFs, more power
- Anti-If: The missing patterns by Joe Wright
- Stack Overflow / design patterns - anti-if campaign
Books
- Get Your Hands Dirty on Clean Architecture by Tom Hombergs - 156 pages
- ПАТТЕРНЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОЕКТИРОВАНИЯ by Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес - 448 страницы
- PATTERNS OF SOFTWARE CONSTRUCTION. HOW TO PREDICTABLY BUILD RESULTS by Stephen Rylander - 145 pages
- Design Patterns in .NET Core 3. Reusable Approaches in C# and F# for Object-Oriented Software Design by Dmitri Nesteruk
- Software Architecture Patterns. Understanding Common Architecture Patterns and When to Use Them by Mark Richards
- Software Architecture Patterns for Serverless Systems. Architecting for innovation with events, autonomous services, and micro frontends by John Gilbert
- Solutions Architect's Handbook. Kick-start your career as a solutions architect by learning architecture design principles and strategies by Saurabh Shrivastava, Neelanjali Srivastav - 588 pages
- The Art of Immutable Architecture. Theory and Practice of Data Management in Distributed Systems by Michael L. Perry
- Flux Architecture. Learn to build powerful and scalable applications with Flux, the architecture that serves billions of Facebook users every day by Adam Boduch
- Software Architecture for Busy Developers. Talk and act like a software architect in one weekend by Stéphane Eyskens - 174 pages
- Software Architecture by Example. Using C# and .NET by Paul Michaels - 207 pages
- POSA
- Wikipedia / Pattern-Oriented Software Architecture
- Software Patterns, Pattern Languages, and Frameworks for Middleware and Applications
- Pattern-Oriented Software Architecture, Volume 1, A System of Patterns by Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad and Michael Stal
- Pattern-Oriented Software Architecture, Volume 2, Patterns for Concurrent and Networked Objects by Douglas C. Schmidt, Michael Stal, Hans Rohnert and Frank Buschmann
- Pattern-Oriented Software Architecture Volume 3: Patterns for Resource Management by Michael Kircher and Prashant Jain
- Pattern-Oriented Software Architecture: A Pattern Language for Distributed Computing, 4th Volume by Frank Buschmann, Kevlin Henney and Douglas C. Schmidt
- Pattern Oriented Software Architecture Volume 5: On Patterns and Pattern Languages by Frank Buschmann, Kevlin Henney and Douglas C. Schmidt
- Software Architecture Metrics. Case Studies to Improve the Quality of Your Architecture by Christian Ciceri, Dave Farley, Neal Ford, Andrew Harmel-Law, Michael Keeling, Carola Lilienthal, João Rosa, Alexander von Zitzewitz, Rene Weiss, and Eoin Woods - 199 pages
- Язык шаблонов (Кристофер Александер)
- Code That Fits in Your Head: Heuristics for Software Engineering by Mark Seemann - 406 pages
- Essential Skills for the Agile Developer. A Guide to Better Programming and Design by Alan Shalloway, Scott Bain, Ken Pugh, Amir Kolsky - 272 pages
- Software Architecture for Web Developers. An introductory guide for developers striving to take the first steps toward software architecture or just looking to grow as professionals by Mihaela Roxana Ghidersa - 116 pages
- Software Development, Design and Coding. With Patterns, Debugging, Unit Testing, and Refactoring by John F. Dooley - 320 pages
- Software Architect by Michael Bell - 432 pages
Interface
- Interface-Oriented Design by Ken Pugh - 240 pages
- Interfaces Should Be Adjectives
- Interface names should be adjectives. They should end with “able” or “ible” whenever the interface provides a capability; otherwise, they should be nouns.
- Wiki
Domain-Driven Design
- Domain Driven Design Quickly by Abel Avram and with Floyd Marinescu as managing editor - 104 pages
- Domain Storytelling. A Collaborative, Visual, and Agile Way to Build Domain-Driven Software by Stefan Hofer, Henning Schwentner - 288 pages
- Domain-Driven Design with Java – A Practitioner’s Guide. Create simple, elegant, and valuable software solutions for complex business problems by Premanand Chandrasekaran, Karthik Krishnan - 302 pages
- Domain Modeling Made Functional. Tackle Software Complexity with Domain-Driven Design and F# by Scott Wlaschin - 310 pages
- Part I — Understanding the Domain
- Introducing Domain-Driven Design
- Understanding the Domain
- A Functional Architecture
- Part II — Modeling the Domain 4. Understanding Types 5. Domain Modeling with Types 6. Integrity and Consistency in the Domain 7. Modeling Workflows as Pipelines
- Part III — Implementing the Model 8. Understanding Functions 9. Implementation: Composing a Pipeline 10. Implementation: Working with Errors 11. Serialization 12. Persistence 13. Evolving a Design and Keeping It Clean
- Part I — Understanding the Domain
- Hands-On Domain-Driven Design with .NET Core. Tackling complexity in the heart of software by putting DDD principles into practice by Alexey Zimarev - 446 pages
- Practical Domain-Driven Design in Enterprise Java. Using Jakarta EE, Eclipse MicroProfile, Spring Boot, and the Axon Framework by Vijay Nair - 379 pages
- Stop Pretending To Do Domain-Driven Design by James Hickey
Idioms
SOLID
- Wikipedia
- SOLID Principles
- freeCodeCamp.org / What are the SOLID Principles in C#? Explained With Code Examples
IoC, DI
- Модульный дизайн или «что такое DIP, SRP, IoC, DI и т.п.»
- What is Dependency Injection?
- IoC Tutorial
- Dependency injection by managing the creation of components and their dependencies in the right order
- Inversion of Control Containers and the Dependency Injection pattern
MVC
- Model-View-Controller (MVC) Explained Through Ordering Drinks At The Bar
- Pro PHP 8 MVC. Model View Controller Architecture-Driven Application Development by Christopher Pitt - 367 pages
- Guide to Efficient Software Design. An MVC Approach to Concepts, Structures, and Models by David P. Voorhees - 519 pages
- MDN Web Docs Glossary / MVC
- ASP.NET MVC Framework
- Toptal.com / Unity MVC Tutorial: Level Up Your Game Development with MVC
MVP
- Wikipedia
- DTF / Уменьшаем хаос в UI: Паттерн MVP
MVVM
- MVVM in Delphi. Architecting and Building Model View ViewModel Applications by John Kouraklis - 143 pages
- Wikipedia
- Model–view–viewmodel
- MVVM is an architectural pattern in computer software that facilitates the separation of the development of the graphical user interface (GUI; the view)—be it via a markup language or GUI code—from the development of the business logic or back-end logic (the model) such that the view is not dependent upon any specific model platform.
- Model–view–viewmodel
- Learn MVVM - Easy Step by Step Tutorial
- Tutorialspoint / MVVM Tutorial
- Microsoft Docs
- How To Display And Hide A Control In MVVM Pattern Using Prism Library In WPF
MVU
Flux
- Wikipedia
Redux
Observing
FSM
C++
- API Design for C++
- C++ Patterns
- cpp-design-patterns.readthedocs.io
- CppDepend.com / Loki: The Premier C++ Library for Mastering Design Patterns - Join Us in Its Modernization!
- KDAB / Pimpl for Small Classes
- Jon Pearce / Lectures / Pattern-Oriented Programming with C++
Python
- Python Design Patterns
- Architecture Patterns with Python. Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices by Harry Percival and Bob Gregory
- Python Programming with Design Patterns by James W. Cooper - 352 pages
- Python Architecture Patterns. Master API design, event-driven structures, and package management in Python by Jaime Buelta - 594 pages
- Practical Python Design Patterns. Pythonic Solutions to Common Problems by Wessel Badenhorst - 350 pages
Go
- tmrts/go-patterns: Curated list of Go design patterns, recipes and idioms
- Dysfunctional options pattern in Go by Redowan's Reflections
- Радио-Т Подкаст 919 / Анти-функциональные опции в Go
Java
- Designing Hexagonal Architecture with Java. An architect's guide to building maintainable and change-tolerant applications with Java and Quarkus by Davi Vieira - 460 pages
- Hands-On Software Architecture with Java. Learn key architectural techniques and strategies to design efficient and elegant Java applications by Giuseppe Bonocore - 510 pages
- Java Design Patterns. A Hands-On Experience with Real-World Examples by Vaskaran Sarcar - 661 pages
- Wikipedia
- Core J2EE Patterns: Best Practices and Design Strategies by Dan Malks, Deepak Alur, John Crupi - 650 pages
JavaScript
- Understanding MVC And MVP (For JavaScript And Backbone Developers) by AddyOsmani.com
- Хабр / Понимание MVC и MVP (для разработчиков JavaScript и Backbone)
- Прежде чем изучать какие-либо JavaScript-фреймворки, помогающие в структурировании приложений, может быть полезно получить базовое представление об архитектурных шаблонах проектирования.
- Хабр / Понимание MVC и MVP (для разработчиков JavaScript и Backbone)
TypeScript
- TypeScript 4 Design Patterns and Best Practices. Discover effective techniques and design patterns for every programming task by Theo Despoudis - 350 pages
Android
- A collection of samples to discuss and showcase different architectural tools and patterns for Android apps
- Clean Android Architecture. Take a layered approach to writing clean, testable, and decoupled Android applications by Alexandru Dumbravan - 366 pages
iOS
- iOS Architecture Patterns. MVC, MVP, MVVM, VIPER, and VIP in Swift by Raúl Ferrer García - 397 pages
Web
Wikipedia
- Категория:Проектирование
- Category:Patterns
- Best practice
- Law of Demeter
- GRASP (object-oriented design)
- Software design pattern
- Приёмы объектно-ориентированного проектирования. Паттерны проектирования
- Category:Software architecture
- Category:Anti-patterns
- Category:Architectural pattern (computer science)
- Category:Architecture description language
- Template:Design Patterns patterns
- Reactor pattern
- Tombstone (programming)
- Unidirectional Data Flow (computer science)
- Architectural pattern
- ADR Architectural decision record
- Architectural decision
- Architecturally significant requirements
- Separation of concerns
- Layered designs in information systems are another embodiment of separation of concerns (e.g., presentation layer, business logic layer, data access layer, persistence layer).
- Multitier architecture
- In a logical multilayer architecture for an information system with an object-oriented design, the following four are the most common:
- Presentation layer (a.k.a. UI layer, view layer, presentation tier in multitier architecture)
- Application layer (a.k.a. service layer or GRASP Controller Layer)
- Business layer (a.k.a. business logic layer (BLL), domain logic layer)
- Data access layer (a.k.a. persistence layer, logging, networking, and other services which are required to support a particular business layer)
- In a logical multilayer architecture for an information system with an object-oriented design, the following four are the most common:
- Event-driven architecture
- Категория:Проектирование программного обеспечения
- Category:Software design
- Modular design
- Happy path is a default scenario featuring no exceptional or error conditions.
- Workflow pattern is a specialized form of design pattern as defined in the area of software engineering or business process engineering.
- Process architecture is the structural design of general process systems.
- Business object is an entity within a multi-tiered software application that works in conjunction with the data access and business logic layers to transport data.
- Business logic (domain logic) is the part of the program that encodes the real-world business rules that determine how data can be created, stored, and changed.
- Active record pattern The interface of an object conforming to this pattern would include functions such as Insert, Update, and Delete, plus properties that correspond more or less directly to the columns in the underlying database table.
- Data access object (DAO) is a pattern that provides an abstract interface to some type of database or other persistence mechanism.
- Data transfer object (DTO) is an object that carries data between processes.
- Non-virtual interface (NVI) pattern controls how methods in a base class are overridden.
- Configuration design is a kind of design where a fixed set of predefined components that can be interfaced (connected) in predefined ways is given, and an assembly (i.e. designed artifact) of components selected from this fixed set is sought that satisfies a set of requirements and obeys a set of constraints.
Game
API
- Patterns for API Design: Simplifying Integration with Loosely Coupled Message Exchanges by Olaf Zimmermann, Mirko Stocker, Daniel Lubke, Uwe Zdun, Cesare Pautasso - 544 pages
SOA
- Service Oriented Architecture: An Integration Blueprint by Guido Schmutz , Peter Welkenbach , Daniel Liebhart - 240 pages
- SOA Patterns by Arnon Rotem-Gal-Oz - 296 pages
Back end
- Communication Design Patterns for Backend Development When you're building an app's back end, you'll need to decide how all the parts will be able to talk to each other.
Microservices
- A pattern language for microservices
- Google Cloud
- Atlassian
- .NET Microservices: Architecture for Containerized .NET Applications
- ByteByteGo / A Crash Course on Microservices Design Patterns
Serverless
- freeCodeCamp.org / Serverless Architecture Patterns and Best Practices lets you focus on building and deploying code instead of managing servers.
Messaging
- Disruptor
- Stack Overflow
- Software Engineering Stack Exchange
Java
J2EE
Node.js
- Node.js Design Patterns by Mario Casciaro , Luciano Mammino - 660 p.
Microsoft
Collections
Press
- O’Reilly
- Topics
Stack Overflow
- Tagged
- Design Pattern to replace a method with many parameters
- Does anybody know from where the "layer of abstraction"/"layer of indirection" quote emerged?
Software Engineering Stack Exchange
- Tagged
Enterprise
- Microsoft .NET: Architecting Applications for the Enterprise by Dino Esposito, Andrea Saltarello - 416 pages
- Enterprise Application Architecture with .NET Core. An architectural journey into Microsoft .NET open source platform by Ganesan Senthilvel, Ovais Mehboob Ahmed Khan, Habib Ahmed Qureshi - 564 pages
- Practical Model-Driven Enterprise. Architecture Design a mature enterprise architecture repository using Sparx Systems Enterprise Architect and ArchiMate® 3.1 by Mudar Bahri, Joe Williams - 412 pages
- Enterprise Systems Architecture. Aligning Business Operating Models to Technology Landscapes by Daljit Roy Banger - 291 pages
- Everyday Enterprise Architecture. Sense-making, Strategy, Structures, and Solutions by Tom Graves - 221 pages
- The Service-Oriented Enterprise. Learn Enterprise Architecture and Its Viable Services by Tom Graves - 233 pages
- Solution Architecture Patterns for Enterprise. A Guide to Building Enterprise Software Systems by Chanaka Fernando - 378 pages
- Wikipedia
- Enterprise architecture
- Category:Enterprise architecture
- Enterprise service bus
- ArchiMate (originally from Architecture-Animate) is an open and independent enterprise architecture modeling language to support the description, analysis and visualization of architecture within and across business domains in an unambiguous way.
- Enterprise architecture artifacts provide descriptions of an organization from different perspectives important for the various actors involved in strategic decision-making and implementation of IT systems.
- Enterprise Integration Patterns
- Wikipedia
- Martin Fowler
- Spring Integration Extends the Spring programming model to support the well-known Enterprise Integration Patterns.
- Apache Camel / Enterprise Integration Patterns
- Red Hat Fuse 7.11 / Apache Camel Development Guide / Chapter 3. Introducing Enterprise Integration Patterns
- Visual Paradigm
- Deloitte / Cloud & Engineering
Courses
Specification
- Software Abstractions. Logic, Language, and Analysis by Daniel Jackson - 376 pages
- Practical TLA+. Planning Driven Development by Hillel Wayne (specializes in formal methods and specification) - 244 pages
- Software Specification Methods edited by Henri Habrias, Marc Frappier - 418 pages
- UML, Z, TLA+, SAZ, B, OMT, VHDL, Estelle, SDL and LOTOS
Concurrency
- Wikipedia
wiki.c2.com
- Active Object
- Accidental Complexity stems from the complex code resulting from ugly designed interfaces of system routines
Data transfer object (DTO)
"Uncle Bob" Martin
- Wikipedia / Robert C. Martin
- cleancoder.com
- Robert C. Martin Series
Talk
- YouTube / Vertical Slicing Architectures talk about Vertical Slicing Architectures
- Throughout the years, the Concentric Architectures (Onion, Hexagonal, Clean-..) have grown into the undisputed leader among backend systems architectures. With the rise of Domain-Driven Design, keeping your Domain ring 'agnostic' to the outside world has become the norm today.
- But history proved that any 'norm' in software architectures will cause overengineering if applied without criticism. After a brief recap of these architectures, their pitfalls, and weaknesses, we'll see two alternatives that segregate code not in 'layers' or 'rings' but in vertical slices: Feature Slicing and Modular Monolith.
- If you never heard of the Onion/Hexagonal/Ports-and-adapters/Clean Architecture, you probably need to read a bit ahead to be able to follow. So here are some optional prep materials:
- Clean Architecture - Uncle Bob's Article
- Pragmatic Clean Architecture
- Overview of Architectures (with a superb picture) - article by Roberto Graca
- Progressive breakdown of a Majestic Monolith: a brilliant talk by Axel Fontaine
- Modular Monoliths - a talk by Simon Brown
- NDC Conferences
- Mark Seemann
- Functional architecture - The pits of success
- One kata, three languages
- From Dependency injection to dependency rejection
- Dependency Injection revisited
- Dependency Injection revisited
- Async injection
- Async injection
- Async injection
- Async injection
- Get value out of your monad
- Fractal Architecture
- Repeatable Execution - NDC Copenhagen 2022
- Mark Seemann
Blogs
- Архитектура ИТ-решений (Максим Смирнов)
- YouTube
- Как понять, что вы разговариваете с настоящим ИТ-архитектором
- основной тип архитектурных утверждений – это сравнение альтернатив: с точки зрения доступности А лучше B, но достигается это за счет ухудшения таких-то других характеристик
- Oleg Knyazev
- Про инкрементальную архитектуру (эволюционная архитектура (evolutionary architecture / design)) by Oleg Knyazev
- все нынче знают, как нужно разрабатывать софт: stories, спринты, continuous integration (лучше — delivery), рефакторинг, тесты
- Начинаем с нуля, делаем одну маленькую стори за другой, не делаем больше, чем нужно для текущей стори.
- набрасывать нужно не структуру системы, которую мы собрались строить, а структуру системы на текущую стори. Максимум — на несколько стори вперед. Не более того.
- строгое следование agile-практикам, вроде выпуска версии каждую итерацию и прочего, дало эффекты
- Лучше обдумать самый малой кусок, какой только возможно обдумать. Ведь это гораздо проще сделать!
- Просто не нужно брать слишком много за раз. В этом мало смысла. Хотя бы потому, что весь “придуманный” код все равно не удастся написать за один подход. Все равно придется обдумывать заново, когда дойдет до этих фич. Если вообще дойдет.
- Иногда кажется, что новый дизайн принципиально не совместим со старым. Отсюда и появляются сказки про “неделю рефакторинга”. Но это не совсем так. Вот есть у нас архитектура А, хотим прийти к архитектуре Б. Можно соединить их прямой линией — сделать все за один шаг, уйдя в рефакторинг с головой. А можно соединить ломаной линией из кучи маленьких сегментов: выделили класс, перенесли метод, добавили делегирование и т.п. — все те маленькие приемы
- мы каждый раз добавляем по чуть-чуть. Каждый раз работаем с маленьким кусочком системы. И когда мы смотрим на маленький кусочек, то он обычно понятен.
- в классическом TDD есть обязательная фаза рефакторинга. Сделал, чтобы работало — сделай, чтобы было красиво. Такой подход нужно применить не только с TDD.
- Суть инкрементальной архитектуры в том, чтобы не заглядывать далеко вперед. Делайте то, что нужно сегодня или через неделю, не то, что потребуется через полгода. Не делайте никаких предположений о том, что будет через полгода – все равно не угадаете.
- сложные работающие системы вырастают из простых работающих систем
- Про инкрементальную архитектуру (эволюционная архитектура (evolutionary architecture / design)) by Oleg Knyazev
LOLZ
Diagrams
Most popular patterns
- ByteByteGo / 18 Key Design Patterns Every Developer Should Know
Creational patterns
Builder
- Functional builders in Java with Jilt by Guillaume Laforge
- Schneide Blog / The algorithm in an algorithm – Builder design pattern
Factory
- DEV Community / 🔑 Keyed Services in .NET Core 8: The Death of the Factory Pattern? 🔑 by Ahmed Shah