Acronym coined by Robert C. Martin (Uncle Bob) to descibe the following five principles:
- The Single Responsibility Principle A class should have only one reason to change.
- The Open Closed Principle Software entities should be open for extension, but closed for modification.
- The Liskov Substitution Principle Derived classes must be substitutable for their base classes.
- The Interface Segregation Principle Make fine grained interfaces that are client specific.
- The Dependency Inversion Principle Depend on abstractions, not on concretions.
A local copy of "Design Principles and Design Patterns" by Robert C. Marin from objectmentor.com website. More about this principles with examples can be found here
A design which:
- Passes all tests.
- Reveals intention.
- No duplication.
- Fewest elements.
- No null.
- No code in constructors.
- No getters and setters.
- No mutable objects.
- No static methods, not even private ones.
- No instanceof, type casting, or reflection.
- No public methods without @Override.
- No statements in test methods except assertThat.
- No implementation inheritance.
- Composable: plays well with others
- Unix philosophy: does one thing well
- Predictable: does what you expect
- Idiomatic: feels natural
- Domain-based: the solution domain models the problem domain in language and structure
- When A Method Can Do Nothing
- Tell Don't Ask
- Converting Queries to Commands
- Object Calisthenics
- How Interfaces Are Refactoring Our Code
- Your Constructors are Completely Irrational
- Class naming
- Names objects after things, not actions!
- Interfacing with hard-to-test third-party code
- How to Think About the "new" Operator with Respect to Unit Testing
- Avoiding Repetition
- Design Principles from Design Patterns - A Conversation with Erich Gamma
- Programming Like Kent Beck
- How Immutability Helps
- Clean Architecture
- Hexagonal Architecture: three principles and an implementation example
- Getting Started With DDD When Surrounded By Legacy Systems
- Clean Code in Python
- Refactoring Legacy Code with the Strangler Fig Pattern also available in video
- Immutable architecture
- The Humble Dialog Box by Michael Feathers
- The Transformation Priority Premise by Uncle Bob
- How to Write a Git Commit Message
- Refactoring a JavaScript video store
- Bowling Game Kata
- Refactoring from anemic model to DDD
- Writing Testable Code
- Essential Skills for Agile Development
- First Pop Coffee Company
- Testing legacy by Sandro Mancuso, part 2, and video
- Live Refactoring Towards Solid Code
- Introducing the Gilded Rose kata and writing test cases using Approval Tests by Emily Bache, part 2 and part 3
- Domain Driven Design Crash Course
- Reactive in practice: A complete guide to event-driven systems development in Java
- Writing Clean Tests
- Tic-Tac-Toe Speedrun live coding
- How To Design A Good API and Why it Matters by Joshua Bloch
- Inheritance, Polymorphism, & Testing
- Don't Look For Things!
- Don't Create Objects That End With -ER
- 8 Lines of Code by Greg Young Accompanied slides
- 19 1/2 Things to Make You a Better Object Oriented Programmer Nice summary
- Railway oriented programming: Error handling in functional languages
- Yves Reynhout - Trench Talk: Evolving a Model
- Seven Ineffective Coding Habits of Many Programmers by Kevlin Henney
- Java Optional - The Mother of All Bikesheds by Stuart Marks
- Code Katas
- hentai
- Source code for the book, "Growing Object-Oriented Software, Guided by Tests"
- jcabi-email
- Assignment done for some interview
- Library project
- Factory project
- Aggregates by Example
- DDD Leaven
- ddd-wro-warehouse
- Cargo
- Martin Fowler
- Michael Feathers
- Robert C. Martin (Uncle Bob)
- Yegor Bugayenko
- Code Cop
- The Code Whisperer
- jbrains.ca
- Nat Pryce
- Steve Freeman
- Miško Hevery
- Matteo Vaccari
- Carlo Pescio
- Jeffrey Palermo
- Kenneth Truyers
- Vaughn Vernon
- Codurance
- Mihai
- Enterprise Craftsmanship
- The Iterate Blog
- The Holy Java
- ploeh blog
- Kent Beck
- Martin Fowler
- Robert C. Martin
- Ron Jeffries
- Michael Feathers
- Yegor Bugayenko
- Carlo Pescio
- Matteo Vaccari
- Jeffrey Palermo
- Kenneth Truyers
- Greg Young
- Eric Evans
- Vaughn Vernon
- Refactoring: Improving the Design of Existing Code by Martin Fowler errata for the book can be found here
- Clean Code by Robert C. Martin
- Design Patterns: Elements of Reusable Object-Oriented Software
- Elegant Objects by Yegor Bugayenko
- Growing Object-Oriented Software, Guided by Tests
- Code That Fits in Your Head : Heuristics for Software Engineering