Los Techies : Blogs about software and anything tech!

Pablo's Topic of the Month - March: SOLID Principles


Pablo's Topic of the Month - March: SOLID Principlespablos_topic

Over the next few days and weeks, the Los Techies crew will be writing a number of blog posts focused a particular subject in addition to their regular blogging.  Pablo's Topic of the Month for the month of March is Bob Martin's S.O.L.I.D. design principles. We'll try to cover all of them by the end of the month or we might focus in on a few of them and go really deep.  Please stay tuned and please give us some feedback of how you like this format because we're considering doing it in upcoming months.

If you haven't already, please consider subscribing to the Los Techies Main Feed so that you can see the various post from the other Los Techies bloggers.

The main feed is here:  http://feeds.feedburner.com/lostechies 

What is S.O.L.I.D.?

S.O.L.I.D. is a collection of best-practice object-oriented design principles that you can apply to your design to accomplish various desirable goals like loose-coupling, higher maintainability, intuitive location of interesting code, etc.  S.O.L.I.D. is an acronym for the following principles (which are, themselves acronyms -- confused yet?).

These principles were pioneered and first collected into a written work by Robert 'Uncle Bob' Martin. You can find more details here: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

I'm going to give you a teaser here of each one, but I won't go into much detail here as that's what the other Los Techies articles are going to be about.  Please check back to this post as I'll be updating it with links to other posts as they appear so you can keep tabs on what's going on. 

The attribution of the following snippets goes to Robert Martin from various publications.

SRP: Single Responsibility Principle

THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE.

OCP: Open Closed Principle

SOFTWARE ENTITIES (CLASSES, MODULES, FUNCTIONS, ETC.) SHOULD BE OPEN FOR EXTENSION BUT CLOSED FOR MODIFICATION.

LSP: Liskov Substitution Principle

FUNCTIONS THAT USE ... REFERENCES TO BASE CLASSES MUST BE ABLE TO USE OBJECTS OF DERIVED CLASSES  WITHOUT KNOWING IT.

ISP: Interface Segregation Principle

CLIENTS SHOULD NOT BE FORCED TO DEPEND UPON INTERFACES THAT THEY DO NOT USE

DIP: Dependency Inversion Principle

A. HIGH LEVEL MODULES SHOULD NOT DEPEND UPON LOW LEVEL MODULES. BOTH SHOULD DEPEND UPON ABSTRACTIONS

B. ABSTRACTIONS SHOULD NOT DEPEND UPON DETAILS. DETAILS SHOULD DEPEND UPON ABSTRACTIONS

Kick It on DotNetKicks.com
Posted Mar 07 2008, 09:01 PM by chadmyers

Comments

Joe wrote re: Pablo's Topic of the Month - March: SOLID Principles
on 03-07-2008 10:31 PM

Look, I'm a big Bob Martin fan (reading Agile etc etc c# again right now), but who do we petition for the (Iranian-style) death penalty for anyone introducing another freakin' acronym?  And an acronym of acronyms at that...

Most of us (I hope) want the 501 developers we work with to adopt the principles we talk about, not roll their eyes and shove us out the door while deciding "f**k you, I'm dragging a datasource control and a datagrid onto this webform, you awful nonsensical ***che/gas-bag".

Standing athwart the agile blogosphere yelling Stop,

Joe

DotNetKicks.com wrote S.O.L.I.D. principles
on 03-09-2008 3:25 PM

You've been kicked (a good thing) - Trackback from DotNetKicks.com

Reflective Perspective - Chris Alcock » The Morning Brew #49 wrote Reflective Perspective - Chris Alcock » The Morning Brew #49
on 03-10-2008 3:21 AM

Pingback from  Reflective Perspective - Chris Alcock  » The Morning Brew #49

Dew Drop - March 10, 2008 | Alvin Ashcraft's Morning Dew wrote Dew Drop - March 10, 2008 | Alvin Ashcraft's Morning Dew
on 03-10-2008 7:01 AM

Pingback from  Dew Drop - March 10, 2008 | Alvin Ashcraft's Morning Dew

Guru Stop wrote Link List: SOA / Architecture + Bonuses
on 03-11-2008 8:14 AM

This is the email I sent to the dev team in SilverKey Tech. Egypt dev team yesterday, sharing here as

Ray Houston wrote PTOM: The Interface Segregation Principle
on 03-14-2008 11:04 PM

In following suite with the The Los Techies Pablo's Topic of the Month - March: SOLID Principles

http://www.lostechies.com/blogs/chad_myers/archive/2008/03/07/pablo-s-topic-of-the-month-march-solid-principles.aspx wrote http://www.lostechies.com/blogs/chad_myers/archive/2008/03/07/pablo-s-topic-of-the-month-march-solid-principles.aspx
on 03-16-2008 3:27 PM
J.D. Meridth wrote PTOM: Single Responsibility Principle
on 03-28-2008 9:15 PM

The Single Responsibility Principle This post is about the first letter in Uncle Bob's SOLID acronym

J.D. Meridth wrote PTOM: Single Responsibility Principle
on 03-29-2008 8:22 PM

The Single Responsibility Principle This post is about the first letter in Uncle Bob's SOLID acronym

Christopher Bennage wrote The Roots of Best Practices
on 03-30-2008 12:56 PM

I've been asked about best practices and good design several times over the last few months. A few

Community Blogs wrote The Roots of Best Practices
on 03-30-2008 1:26 PM

I've been asked about best practices and good design several times over the last few months. A few

Chad Myers' Blog wrote Pablo's Topic of the Month - April: Advanced Language Patterns for Visual Basic
on 03-31-2008 9:04 PM

Pablo's Topic of the Month - April: Advanced Language Patterns for Visual Basic Following on the

ThoughtStream.Create(me); wrote Object Oriented Development via The S.O.L.I.D. Software Development Principles
on 09-03-2008 11:50 AM
Unhandled Exceptions » Blog Archive » In the end, is ALT.NET just POSE? wrote Unhandled Exceptions » Blog Archive » In the end, is ALT.NET just POSE?
on 09-22-2008 10:43 AM

Pingback from  Unhandled Exceptions  » Blog Archive   » In the end, is ALT.NET just POSE?

ISerializable - Roy Osherove's Blog wrote Unit Testing decoupled from Design == Adoption
on 09-26-2008 3:31 PM

In my previous post I started talking in more coherent words about feelings I’ve had lurking in the past

TDD without the design at Mark Needham wrote TDD without the design at Mark Needham
on 09-30-2008 9:34 AM

Pingback from  TDD without the design at Mark Needham

Jimmy Bogard wrote NotImplementedException and the Interface Segregation Principle
on 10-12-2008 2:50 PM

This week, Derrick Bailey will be in town (Austin) to talk about the SOLID principles .  One of

new ThoughtStream("Derick Bailey"); wrote Thanks ADNUG attendees! Slides and code available.
on 10-14-2008 9:56 AM

I had a lot of fun giving my SOLID Principles presentation at the Austin .NET User Group last night.

Chad Myers' Blog wrote 1 Year Anniversary
on 11-21-2008 11:05 AM

I’m generally not one for sentimentality, so it should come as no surprise to anyone that knows me that

Raji Abraham wrote re: Pablo's Topic of the Month - March: SOLID Principles
on 11-24-2008 4:52 PM

I read these principles and more in the book by Bertrand Meyer (Object Oriented Software Construction - Prentice Hall International) more than a decade ago; though not per this acronym

Faculty of The Mind wrote Unit Testing Gives Merit to Design Patterns
on 12-08-2008 4:58 PM

Unit Testing Gives Merit to Design Patterns

Design and Testability, Which Comes First? « Tim Ross - .NET Developer wrote Design and Testability, Which Comes First? « Tim Ross - .NET Developer
on 12-10-2008 3:30 PM

Pingback from  Design and Testability, Which Comes First? « Tim Ross - .NET Developer

new ThoughtStream("Derick Bailey"); wrote Kanban in Software Development. Part 3: Andon and Jidoka - Handling Bugs and Emergency Fixes in Kanban
on 12-19-2008 8:46 AM

Let's assume that we are doing the appropriate amount of testing during our development process.

Elegant Code » Thinking only of the Junior Developer wrote Elegant Code » Thinking only of the Junior Developer
on 12-27-2008 9:49 PM

Pingback from  Elegant Code » Thinking only of the Junior Developer

jp.hamilton wrote Every Developer Needs Goals (here are mine for 2009)
on 01-03-2009 11:41 AM

Every Developer Needs Goals (here are mine for 2009)

Tim Barcz wrote Real Life Single Responsibility Principle
on 01-05-2009 2:24 PM

S.O.L.I.D. principles seem to be a hot topic.  The guys over at LosTechies.com explored it last

Community Blogs wrote Real Life Single Responsibility Principle
on 01-05-2009 2:53 PM

S.O.L.I.D. principles seem to be a hot topic.  The guys over at LosTechies.com explored it last

Chris Missal's Blog wrote Who is this Chris Missal Guy?
on 01-06-2009 12:52 PM

Thanks again to the Los Techies guys for inviting me to blog with them. I was privileged to meet several

Ruby's take on S.O.L.I.D. | keyongtech wrote Ruby's take on S.O.L.I.D. | keyongtech
on 01-18-2009 11:21 AM

Pingback from  Ruby's take on S.O.L.I.D. | keyongtech

Pro Information Center » Blog Archive » Thinking only of the Junior Developer wrote Pro Information Center » Blog Archive » Thinking only of the Junior Developer
on 01-26-2009 10:14 PM

Pingback from  Pro Information Center  » Blog Archive   » Thinking only of the Junior Developer

Artur Trosin's blog wrote Domain Driven Design: Learning
on 02-09-2009 8:48 AM

1. Introduction In the post I would like to help folks who want to improve their design skills and way

new ThoughtStream("Derick Bailey"); wrote SOLID Development Principles – In Motivational Pictures
on 02-11-2009 12:36 PM

I found the Motivator this morning. It lets you create your own motivational pictures. So, here’s my

Chad Myers' Blog wrote Laws, Rules, Principles, Patterns, and Practices
on 02-11-2009 11:45 PM

I speak and write a lot about principles, patterns, and practices.  There has been a lot of hullabaloo

ASPInsiders wrote SOLID Development in Pictures
on 02-12-2009 3:28 PM

While I can’t claim to be a huge adherent of any particular set of development principles (I admire others’

Best-practice object-oriented design principles - SOLID | Oh I See wrote Best-practice object-oriented design principles - SOLID | Oh I See
on 02-13-2009 9:20 PM

Pingback from  Best-practice object-oriented design principles - SOLID | Oh I See

VSone und SharePoint Konferenz vom 11.-12.02.09 in München | Von Dorrit Riemenschneider | Beitrag | Communardo Techblog wrote VSone und SharePoint Konferenz vom 11.-12.02.09 in München | Von Dorrit Riemenschneider | Beitrag | Communardo Techblog
on 02-22-2009 1:10 PM

Pingback from  VSone und SharePoint Konferenz vom 11.-12.02.09 in München | Von Dorrit Riemenschneider | Beitrag | Communardo Techblog

Artur Trosin's blog wrote With modern tools, Is a solution\project structure important?
on 02-23-2009 9:40 AM

In the post I would like to discuss importance of the solution (project) structure nowadays. So, is it

Trade Offs: Some Thoughts at Mark Needham wrote Trade Offs: Some Thoughts at Mark Needham
on 03-02-2009 8:04 AM

Pingback from  Trade Offs: Some Thoughts at Mark Needham

Sean Biefeld's Blog wrote Developing at the Speed of Microsoft
on 03-03-2009 5:28 AM

As .net developers do you ever feel like Microsoft i s hindering your development by the development

Aaron Lerch » Blog Archive » Design Pattern Resources wrote Aaron Lerch » Blog Archive » Design Pattern Resources
on 04-02-2009 8:51 PM

Pingback from  Aaron Lerch  » Blog Archive   » Design Pattern Resources

new ThoughtStream("Derick Bailey"); wrote Decoupling Workflow And Forms With An Application Controller
on 04-18-2009 2:04 PM

One of the big problems I’ve been trying to solve recently, is in my current WinForms application that

Gabriel Schenker's Blog wrote PTOM – Brownfield development – Making your dependencies explicit
on 05-04-2009 5:07 PM

Introducing DI and “poor man’s DI” Introduction Greenfield Development happens when you start a brand

Railsconf 2009 Tutorial - Testing Design and Refactoring « dev@courseadvisor wrote Railsconf 2009 Tutorial - Testing Design and Refactoring « dev@courseadvisor
on 05-05-2009 12:21 PM

Pingback from  Railsconf 2009 Tutorial - Testing Design and Refactoring «  dev@courseadvisor

Railsconf 2009 Tutorial - Testing Design and Refactoring « dev@courseadvisor wrote Railsconf 2009 Tutorial - Testing Design and Refactoring « dev@courseadvisor
on 05-05-2009 12:21 PM

Pingback from  Railsconf 2009 Tutorial - Testing Design and Refactoring «  dev@courseadvisor

Plan B Software » One Tangible Benefit of S.O.L.I.D Development wrote Plan B Software » One Tangible Benefit of S.O.L.I.D Development
on 05-15-2009 7:55 PM

Pingback from  Plan B Software » One Tangible Benefit of S.O.L.I.D Development

Blog | Rubyyot » Blog Archive » Plans for Rubyyot.com and the Summer of Learning Challenge wrote Blog | Rubyyot » Blog Archive » Plans for Rubyyot.com and the Summer of Learning Challenge
on 05-24-2009 2:17 PM

Pingback from  Blog | Rubyyot  » Blog Archive   » Plans for Rubyyot.com and the Summer of Learning Challenge

MVC Project Architecture « Corey Coogan wrote MVC Project Architecture « Corey Coogan
on 06-05-2009 11:00 AM

Pingback from  MVC Project Architecture « Corey Coogan

Lietuvos .NET vartotoj?? grup??s susitikimas - pasidalijimas gerosiomis praktikomis wrote Lietuvos .NET vartotoj?? grup??s susitikimas - pasidalijimas gerosiomis praktikomis
on 06-06-2009 8:23 AM

Pingback from  Lietuvos .NET vartotoj?? grup??s susitikimas - pasidalijimas gerosiomis praktikomis

???????????? ?????????????????????????? ???? ???????????? ???????????????????? ?????????????? (DDD: Domain Driven Design) « butaji wrote ???????????? ?????????????????????????? ???? ???????????? ???????????????????? ?????????????? (DDD: Domain Driven Design) « butaji
on 06-06-2009 2:48 PM

Pingback from  ???????????? ?????????????????????????? ???? ???????????? ???????????????????? ?????????????? (DDD: Domain Driven Design) « butaji

Vitaly Baum wrote Учимся проектировать на основе предметной области (DDD: Domain Driven Design)
on 06-06-2009 2:56 PM

В данной статье я хотел бы рассказать об этих трёх буквах, постоянно находящихся

Every revolution needs a martyr (ALT.NET) - Eric Polerecky wrote Every revolution needs a martyr (ALT.NET) - Eric Polerecky
on 06-17-2009 12:57 PM

Pingback from  Every revolution needs a martyr (ALT.NET) - Eric Polerecky

same ol interviews will get you the same ol employees « while(career==rut) musings++ wrote same ol interviews will get you the same ol employees « while(career==rut) musings++
on 07-03-2009 6:51 PM

Pingback from  same ol interviews will get you the same ol employees «  while(career==rut) musings++

S.O.L.I.D. Object Design Principle « My Journey on Technology Road wrote S.O.L.I.D. Object Design Principle « My Journey on Technology Road
on 07-09-2009 7:15 PM

Pingback from  S.O.L.I.D. Object Design Principle «  My Journey on Technology Road

The SOLID Principles, Explained with Motivational Posters ??? Global Nerdy wrote The SOLID Principles, Explained with Motivational Posters ??? Global Nerdy
on 07-15-2009 11:21 PM

Pingback from  The SOLID Principles, Explained with Motivational Posters ??? Global Nerdy

Tune Up Your PC » Post Topic » The SOLID Principles, Explained with Motivational Posters wrote Tune Up Your PC » Post Topic » The SOLID Principles, Explained with Motivational Posters
on 07-16-2009 3:35 AM

Pingback from  Tune Up Your PC  » Post Topic   » The SOLID Principles, Explained with Motivational Posters

C# SIG Meeting – 07/21/2009 – Recap « Rhonda Tipton’s WebLog wrote C# SIG Meeting – 07/21/2009 – Recap « Rhonda Tipton’s WebLog
on 07-24-2009 3:05 PM

Pingback from  C# SIG Meeting – 07/21/2009 – Recap « Rhonda Tipton’s WebLog

' + title + ' - ' + basename(imgurl) + '(' + w + 'x' + h +') wrote ' + title + ' - ' + basename(imgurl) + '(' + w + 'x' + h +')
on 07-31-2009 10:40 AM

Pingback from  ' + title + ' - ' + basename(imgurl) + '(' + w + 'x' + h +')

Sean Chambers wrote Refactoring Day 14 : Break Responsibilities
on 08-14-2009 7:47 AM

When breaking apart responsibilities on a class this is enforcing Single Responsiblity Principle from

Inversion of Control in Python at Shey’s Rebellion wrote Inversion of Control in Python at Shey’s Rebellion
on 08-24-2009 1:33 PM

Pingback from  Inversion of Control in Python at Shey’s Rebellion

Richard Dingwall » SOLID ugly code wrote Richard Dingwall » SOLID ugly code
on 09-03-2009 8:02 PM

Pingback from  Richard Dingwall  » SOLID ugly code

One More Red Nightmare wrote Orlando .NET User Group Talk - 12 Practices to be a Better Developer
on 09-23-2009 11:09 PM

Last week I gave a talk at the Orlando .NET User Group on Practical Software Craftsmanship - 12 Practices

Ivan Sanchez » Impressions from my first Pair Programming Tour wrote Ivan Sanchez » Impressions from my first Pair Programming Tour
on 10-27-2009 9:58 AM

Pingback from  Ivan Sanchez » Impressions from my first Pair Programming Tour

Polyglots R Us wrote Take 2: Why we use SOLID in static languages and how we get the same functionality for cheap in dynamic languages
on 11-19-2009 5:46 PM

One of the things we do pretty well at Los Techies is explaining SOLID principles and why they make our

Link List: SOA / Architecture + Bonuses « Guru Stop wrote Link List: SOA / Architecture + Bonuses « Guru Stop
on 01-07-2010 2:10 PM

Pingback from  Link List: SOA / Architecture + Bonuses «  Guru Stop

MEE SQA Blog » Blog Archive » Reference: S.O.L.I.D. Principles Overview wrote MEE SQA Blog » Blog Archive » Reference: S.O.L.I.D. Principles Overview
on 05-15-2010 7:04 PM

Pingback from  MEE SQA Blog  » Blog Archive   » Reference: S.O.L.I.D. Principles Overview

NDC2010: Michael Feathers – The deep synergy between good design and testability | Lowendahl's Shout wrote NDC2010: Michael Feathers – The deep synergy between good design and testability | Lowendahl's Shout
on 06-18-2010 8:28 AM

Pingback from  NDC2010: Michael Feathers – The deep synergy between good design and testability | Lowendahl's Shout

Chad Myers' Blog wrote Unstated Requirements
on 07-23-2010 1:41 PM

I was formulating some thoughts for a whitepaper today and I was talking about two different ways to

Chad Myers' Blog wrote A quick primer on .NET web frameworks
on 08-25-2010 12:21 PM

I’ve received quite a few questions in the past months and year about web frameworks for .NET (some confusion

Copyright Los Techies 2008, 2009. All rights reserved.
Powered by Community Server (Commercial Edition), by Telligent Systems