Awesome
Awesome Clean Code
Design Principles
SOLID
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
Kent Beck's Four Rules of Simple Design
A design which:
- Passes all tests.
- Reveals intention.
- No duplication.
- Fewest elements.
Elegant Objects
- 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.
CUPID
- 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
Featured Articles
- 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
Tutorials
- 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
Videos
- 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 Examples
- 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
Git Hub
Blogs
- 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
Books
- 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