SlideShare a Scribd company logo
10 TOP TIPS
for good object-oriented design
WHO AM I?
• Founder of Cambridge Software Craftsmanship Community
• Developer and Technical Lead at Red Gate Software
• Twitter: @alastairs
• http://www.codebork.com/
• alastair@alastairsmith.me.uk
1. OBJECT-ORIENTATION
MESSAGE-ORIENTATION
• Values are passed between objects as messages
• Tell objects, ask values
• “Don’t call us, we’ll call you”
• State is only there to support behaviour
2. FAVOUR COMPOSITION OVER
INHERITANCE
• Loose coupling
• Strategies, Adapters, Composites and more are your friends
3. THERE IS A CONTINUUM OF
ABSTRACTION
Instance
Class
Abstract
Class
Interface
4. USE ABSTRACT CLASSES
• Not every abstract concept should be an interface
• Model all your abstractions at the right level
5. DON’T EXPOSE STATE ON
INTERFACES
• Interfaces are contracts of behaviour
• State is data
6. PROGRAM TO THE INTERFACE,
NOT THE IMPLEMENTATION
• Loose coupling
• Assume nothing about the implementation of the interface
7. INHERITANCE IS FOR
SPECIALISATION
• Use composition for extension
• Specialisation is like evolution
8. KNOW YOUR PATTERNS
• Design Patterns are our bricks and mortar
• Use GoF as a reference only
9. AT THE BOUNDARIES OF AN
APPLICATION, OO BREAKS DOWN
• Use value objects to convey state out of the core of the application
• Do not reuse abstractions in different modules
• Use hexagonal architecture to separate concerns
10. MAKE YOUR OBJECTS AND
VALUES IMMUTABLE
• Easier comparisons when testing
• Both have a concept of equality
• Thread safety in multi-threaded systems
• Less complex implementation
ANY QUESTIONS?
Thank you for listening!

More Related Content

Viewers also liked

Refactoring Away from Test Hell
Refactoring Away from Test HellRefactoring Away from Test Hell
Refactoring Away from Test Hell
Alastair Smith
 
Teaching and Learning Software Development
Teaching and Learning Software DevelopmentTeaching and Learning Software Development
Teaching and Learning Software DevelopmentAlastair Smith
 
Complete code craft
Complete code craftComplete code craft
Complete code craft
Alastair Smith
 
FCFS scheduling OS
FCFS scheduling OSFCFS scheduling OS
FCFS scheduling OS
Totan Banik
 
CSX and Winter Weather in 2015
CSX and Winter Weather in 2015CSX and Winter Weather in 2015
CSX and Winter Weather in 2015Clarence Gooden
 
Csx supports nonprofits serving in its communities
Csx supports nonprofits serving in its communitiesCsx supports nonprofits serving in its communities
Csx supports nonprofits serving in its communities
Clarence Gooden
 

Viewers also liked (9)

Refactoring Away from Test Hell
Refactoring Away from Test HellRefactoring Away from Test Hell
Refactoring Away from Test Hell
 
Teaching and Learning Software Development
Teaching and Learning Software DevelopmentTeaching and Learning Software Development
Teaching and Learning Software Development
 
Semaforos
SemaforosSemaforos
Semaforos
 
Complete code craft
Complete code craftComplete code craft
Complete code craft
 
Sa by shekhar
Sa by shekharSa by shekhar
Sa by shekhar
 
Planificacion
PlanificacionPlanificacion
Planificacion
 
FCFS scheduling OS
FCFS scheduling OSFCFS scheduling OS
FCFS scheduling OS
 
CSX and Winter Weather in 2015
CSX and Winter Weather in 2015CSX and Winter Weather in 2015
CSX and Winter Weather in 2015
 
Csx supports nonprofits serving in its communities
Csx supports nonprofits serving in its communitiesCsx supports nonprofits serving in its communities
Csx supports nonprofits serving in its communities
 

Similar to 10 Top Tips for Good Object-Oriented Design

Eurosport's Kodakademi #2
Eurosport's Kodakademi #2Eurosport's Kodakademi #2
Eurosport's Kodakademi #2
Benjamin Baumann
 
Do's and Don'ts of APIs
Do's and Don'ts of APIsDo's and Don'ts of APIs
Do's and Don'ts of APIs
Jason Harmon
 
Architecture Principles CodeStock
Architecture Principles CodeStock Architecture Principles CodeStock
Architecture Principles CodeStock
Steve Barbour
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette
 
Software development fundamentals
Software development fundamentalsSoftware development fundamentals
Software development fundamentals
Alfred Jett Grandeza
 
Clean code
Clean codeClean code
Clean code
Simon Sönnby
 
Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)
Shirish Bari
 
Design for scale
Design for scaleDesign for scale
Design for scale
Doug Lampe
 
DIC To The Limit – deSymfonyDay, Barcelona 2014
DIC To The Limit – deSymfonyDay, Barcelona 2014DIC To The Limit – deSymfonyDay, Barcelona 2014
DIC To The Limit – deSymfonyDay, Barcelona 2014
Ronny López
 
The Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To TestingThe Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To Testing
Tim Duckett
 
Software design with Domain-driven design
Software design with Domain-driven design Software design with Domain-driven design
Software design with Domain-driven design
Allan Mangune
 
Software Engineering - Trends & Industry Practices
Software Engineering - Trends & Industry PracticesSoftware Engineering - Trends & Industry Practices
Software Engineering - Trends & Industry Practices
Alfred Jett Grandeza
 
Software is not a Building - Designing Technical Architecture for Change
Software is not a Building - Designing Technical Architecture for ChangeSoftware is not a Building - Designing Technical Architecture for Change
Software is not a Building - Designing Technical Architecture for Change
Cantina
 
Clean Code Talk (draft)
Clean Code Talk (draft)Clean Code Talk (draft)
Clean Code Talk (draft)
Daniel Deutsch, LL.M. (WU)
 
Design Pattern Zoology
Design Pattern ZoologyDesign Pattern Zoology
Design Pattern ZoologyJosh Adell
 
How To Write a Testable Code
How To Write a Testable CodeHow To Write a Testable Code
How To Write a Testable Code
OPIN Software Inc.
 
How to do b tech be projects or any academic projects
How to do b tech be projects or any academic projectsHow to do b tech be projects or any academic projects
How to do b tech be projects or any academic projects
baabtra.com - No. 1 supplier of quality freshers
 
10 Hinweise für Architekten
10 Hinweise für Architekten10 Hinweise für Architekten
10 Hinweise für Architekten
adesso AG
 
Ten Advices for Architects
Ten Advices for ArchitectsTen Advices for Architects
Ten Advices for Architects
Eberhard Wolff
 
Coding Standard And Code Review
Coding Standard And Code ReviewCoding Standard And Code Review
Coding Standard And Code Review
Milan Vukoje
 

Similar to 10 Top Tips for Good Object-Oriented Design (20)

Eurosport's Kodakademi #2
Eurosport's Kodakademi #2Eurosport's Kodakademi #2
Eurosport's Kodakademi #2
 
Do's and Don'ts of APIs
Do's and Don'ts of APIsDo's and Don'ts of APIs
Do's and Don'ts of APIs
 
Architecture Principles CodeStock
Architecture Principles CodeStock Architecture Principles CodeStock
Architecture Principles CodeStock
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Software development fundamentals
Software development fundamentalsSoftware development fundamentals
Software development fundamentals
 
Clean code
Clean codeClean code
Clean code
 
Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)
 
Design for scale
Design for scaleDesign for scale
Design for scale
 
DIC To The Limit – deSymfonyDay, Barcelona 2014
DIC To The Limit – deSymfonyDay, Barcelona 2014DIC To The Limit – deSymfonyDay, Barcelona 2014
DIC To The Limit – deSymfonyDay, Barcelona 2014
 
The Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To TestingThe Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To Testing
 
Software design with Domain-driven design
Software design with Domain-driven design Software design with Domain-driven design
Software design with Domain-driven design
 
Software Engineering - Trends & Industry Practices
Software Engineering - Trends & Industry PracticesSoftware Engineering - Trends & Industry Practices
Software Engineering - Trends & Industry Practices
 
Software is not a Building - Designing Technical Architecture for Change
Software is not a Building - Designing Technical Architecture for ChangeSoftware is not a Building - Designing Technical Architecture for Change
Software is not a Building - Designing Technical Architecture for Change
 
Clean Code Talk (draft)
Clean Code Talk (draft)Clean Code Talk (draft)
Clean Code Talk (draft)
 
Design Pattern Zoology
Design Pattern ZoologyDesign Pattern Zoology
Design Pattern Zoology
 
How To Write a Testable Code
How To Write a Testable CodeHow To Write a Testable Code
How To Write a Testable Code
 
How to do b tech be projects or any academic projects
How to do b tech be projects or any academic projectsHow to do b tech be projects or any academic projects
How to do b tech be projects or any academic projects
 
10 Hinweise für Architekten
10 Hinweise für Architekten10 Hinweise für Architekten
10 Hinweise für Architekten
 
Ten Advices for Architects
Ten Advices for ArchitectsTen Advices for Architects
Ten Advices for Architects
 
Coding Standard And Code Review
Coding Standard And Code ReviewCoding Standard And Code Review
Coding Standard And Code Review
 

Recently uploaded

Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
abdulrafaychaudhry
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
QuickwayInfoSystems3
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 

Recently uploaded (20)

Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 

10 Top Tips for Good Object-Oriented Design

  • 1. 10 TOP TIPS for good object-oriented design
  • 2. WHO AM I? • Founder of Cambridge Software Craftsmanship Community • Developer and Technical Lead at Red Gate Software • Twitter: @alastairs • http://www.codebork.com/ • alastair@alastairsmith.me.uk
  • 3. 1. OBJECT-ORIENTATION MESSAGE-ORIENTATION • Values are passed between objects as messages • Tell objects, ask values • “Don’t call us, we’ll call you” • State is only there to support behaviour
  • 4. 2. FAVOUR COMPOSITION OVER INHERITANCE • Loose coupling • Strategies, Adapters, Composites and more are your friends
  • 5. 3. THERE IS A CONTINUUM OF ABSTRACTION Instance Class Abstract Class Interface
  • 6. 4. USE ABSTRACT CLASSES • Not every abstract concept should be an interface • Model all your abstractions at the right level
  • 7. 5. DON’T EXPOSE STATE ON INTERFACES • Interfaces are contracts of behaviour • State is data
  • 8. 6. PROGRAM TO THE INTERFACE, NOT THE IMPLEMENTATION • Loose coupling • Assume nothing about the implementation of the interface
  • 9. 7. INHERITANCE IS FOR SPECIALISATION • Use composition for extension • Specialisation is like evolution
  • 10. 8. KNOW YOUR PATTERNS • Design Patterns are our bricks and mortar • Use GoF as a reference only
  • 11. 9. AT THE BOUNDARIES OF AN APPLICATION, OO BREAKS DOWN • Use value objects to convey state out of the core of the application • Do not reuse abstractions in different modules • Use hexagonal architecture to separate concerns
  • 12. 10. MAKE YOUR OBJECTS AND VALUES IMMUTABLE • Easier comparisons when testing • Both have a concept of equality • Thread safety in multi-threaded systems • Less complex implementation
  • 13. ANY QUESTIONS? Thank you for listening!

Editor's Notes

  1. Applies to all OO languages, but some refer to C# language features
  2. Alan Kay himself has said that, if he were designing Smalltalk again, he would call it Message-Oriented Programming rather than Object-Oriented Programming, because of the confusion rife over what he and the other designers of Smalltalk meant.The magic in object-orientation lies in the collaboration between objects, their behaviour, the messages they send to one another; not their state. Objects are often designed in terms of their properties rather than their behaviours: e.g. a Car has four wheels which allow it to travel from A to B, rather than the behaviours of adding a new passenger and travelling to a destination. This is why TDD (and, more specifically, Outside-In TDD as described in GOOS) works so well: it places the focus on the behaviour of the system under test, and not its state.
  3. GoFDesign Patterns. Composition provides more flexible designs, because your components are more loosely-coupled: you can re-arrange them into whatever shape you need, much like LEGO. This works because of message-oriented programming: passing messages between objects via method calls leads to much more composable designs
  4. Think about the words used for these different concepts, and their dictionary definitions:Class: “a number of persons or things regarded as forming a group by reason of common attributes, characteristics, qualities, or traits”Abstract: “thought of apart from concrete realities, specific objects, or actual instances; expressing a quality or characteristic apart from any specific object or instance”Interface: “a common boundary or interconnection between systems, equipment, concepts, or human beings.”A class is an abstraction! The only concrete thing you have is an instance of a class.
  5. But, ensure they are well-defined:Common stateCommon behaviours – implementing multiple interfacesCohesiveIf you’re dealing with Animals, you almost certainly won’t need an abstraction for Dog, much less a springer spaniel; a dog is instead an instance of an animal. (RG Note: In SOC, there 8.3x as many interfaces as abstract classes.)
  6. This is a leaky abstraction: by exposing an element of state it makes assumptions about the implementation of the interface. The only way to extend data (i.e., adding new data items) is through inheritance. Putting properties on interfaces encourages inheritance of interfaces, which breaks the Interface Segregation Principle, and makes your abstraction even more leaky.Again, think about the word “interface” in terms of its dictionary definition. A Graphical User Interface or Command-Line Interface has behaviour, not state: push button, enter text, run command, display results. You interact with interfaces, via their behaviours, and through those behaviours observe something about its state.
  7. GoFDesign Patterns.Helps ensure loosely-coupled, composable code that is easy to test, because you’re interacting with the behaviour of collaborators, you’re not relying on their current state too.
  8. “Inheritance is a tremendously powerful tool for sharing implementation details and specializing behaviour. But the fact that you only get "one shot" at inheritance in a single-inheritance world means that you’ve got to take that shot carefully and make sure you're using that power to its best ability.” – Eric LippertDo not add or modify behaviour through inheritance, use composition instead.Evolution: structural adaptation to a particular function for use in a particular environment
  9. Know what problems they solve, where they can be applied appropriately, etc. Knowing the appropriate application of a pattern is more important than knowing the pattern itself. Know how to spot a poorly-implemented pattern.GoF is great as a reference book, but is perhaps too dry to learn the patterns from. Try other texts, such as Head First Design Patterns or Holub on Patterns to learn the patterns in context.
  10. Use mapping techniques (e.g., AutoMapper) to convert between the models at the boundaries and the rich domain objects powering the applicationHexagonal architecture == ports and adapters from GOOS. See also Ian Cooper’s talk “TDD: Where did it all go wrong?”