SlideShare a Scribd company logo
>< nextprevious
Object Oriented Design Principles
How to become a SOLID programmer
Tran Duc Thang
Framgia Vietnam - Business Strategy Office - Human Development Section
A guide to make a well-designed application with Laravel
1
>< nextprevious
“Proper Object Oriented design makes
a developer's life easy, whereas bad
design makes it a disaster.”
2
Table of Contents
01
Design Principles first look
‣ What is Design Principle?
‣ Design Principle vs Design Pattern
02
03
04
>< nextprevious
SOLID in depth
‣ What are SOLID?
‣ Decoding SOLID
‣ Other related principles
Building well-design app
‣ A story with MVC
‣ Some ideas when working with Laravel
‣ Symptoms of Bad Design
Summarisation
‣ Annotations, disclaims and notes
3
>< nextprevious
Design Principles
• Object Oriented Design Patterns
‣ A general repeatable solution to a commonly
occurring problem in software design.
‣ A description or template for how to solve a
problem that can be used in many different
situations.
‣ Gained popularity after the book “Design
Patterns: Elements of Reusable Object-
Oriented Software” was published in 1994
by the so-called “Gang of Four”
4
>< nextprevious
Design Principles
• Object Oriented Design Principles
‣ Associated to Robert Cecil Martin who
gathered them in “Agile Software
Development: Principles, Patterns, and
Practices”
‣ Represent a set of guidelines that ensures
OOP concepts, then helps us to avoid having
a bad design.
‣ It’s abstract. (Not concrete).
5
>< nextprevious
Design Principles
• Robert Cecil Martin
‣ Agile software development:
principles, patterns, and
practices.
‣ Clean code: a handbook of
agile software craftsmanship.
‣ The clean coder: a code of
conduct for professional
programmers.
6
>< nextprevious
Design Principles
• Some Software Design Principles in examples
‣ DRY (Don’t Repeat Yourself)
‣ KISS (Keep It Simple, Stupid!)
‣ YAGNI (You Aren't Gonna Need It)
7
>< nextprevious
Design Principles
• Design Patterns vs Design Principles
‣ Principles: low-level, general guidelines
‣ Patterns: high-level, concrete examples.
Provide reusable solutions to real world
problems.
‣ Good Design Patterns should comply good
Design Principles
8
>< nextprevious
SOLID in depth
• What are SOLID?
‣ A mnemonic acronym introduced by Michael
Feathers for the “first five principles”
named by Robert Cecil Martin.
‣ Single responsibility principle
‣ Open/closed principle
‣ Liskov substitution principle
‣ Interface segregation principle
‣ Dependency inversion principle
9
>< nextprevious
SOLID in depth
• Single responsibility principle (SRP)
‣ A class should have only a single
responsibility. In other words, a class should
have one, and only one, reason to change.
10
>< nextprevious
SOLID in depth
11
>< nextprevious
SOLID in depth
• Open/closed principle (OCP)
‣ Software entities (classes, modules,
functions, etc.) should be open for
extension, but closed for modification
‣ An entity can allow its behaviour to be
extended without modifying its source code
12
>< nextprevious
SOLID in depth
13
>< nextprevious
SOLID in depth
• Liskov substitution principle (LSP)
‣ If S is a subtype of T, then objects of type T
may be replaced with objects of type S
without altering any of the desirable
properties of that program.
14
>< nextprevious
SOLID in depth
15
>< nextprevious
SOLID in depth
• Interface segregation principle (ISP)
‣ No client should be forced to depend on
methods it does not use.
‣ Many client-specific interfaces are better than
one general-purpose interface.
16
>< nextprevious
SOLID in depth
17
>< nextprevious
SOLID in depth
• Dependency inversion principle (ISP)
‣ High-level modules should not depend on
low-level modules. Both should depend on
abstractions.
‣ Abstractions should not depend on details.
Details should depend on abstractions.
18
>< nextprevious
SOLID in depth
19
>< nextprevious
SOLID in depth
Some other concepts related to SOLID
• Separation of Concerns (SoC)
‣ The process of breaking a computer program
into distinct features that overlap in
functionality as little as possible
20
>< nextprevious
SOLID in depth
• Law of Demeter (LoD) aka Principle of Least
Knowledge
‣ Each unit should have only limited knowledge
about other units: only units "closely" related
to the current unit.
‣ Each unit should only talk to its friends; don't
talk to strangers.
‣ Only talk to your immediate friends.
21
>< nextprevious
SOLID in depth
• Program to an interface, not an implementation
‣ One of good object-oriented design
techniques that GoF mentioned in “Design
Patterns: Elements of Reusable Object-
Oriented Software”
22
>< nextprevious
SOLID in depth
• SOLID in Action - Checkout examples at Github
https://github.com/wataridori/solid-php-example
23
>< nextprevious
SOLID in depth
All SOLID principles work perfectly together.
Breaking one principle may also make some (or even
all) of the remaining principles become broken too!
24
>< nextprevious
Building well-designed app
• The MVC Story: Model vs Controller
‣ Where to put your business logic?
‣ Fat Controllers - Skinny Models?
‣ Fat Models - Skinny Controllers?
‣ Fat Models - Fat Controllers?
25
>< nextprevious
“MVC is killing you”
~ Taylor Otwell - Laravel’s creator ~
26
>< nextprevious
Think different!
“Think outside of the ‘Model’ Box”
27
>< nextprevious
• Some ideas when working with Laravel
‣ Get rid of “Model” with lots of business, try “Entity”
‣ Repository design pattern for Data Access Layer
‣ Form Request Validation
‣ Job
‣ Event
‣ View Presenter, or any kind of wrappers that helps you get rid of
God Object
‣ Design Patterns
‣ …
Building well-designed app
28
>< nextprevious
• Symptoms of Bad Design
‣ Rigidity
‣ Fragility
‣ Immobility
‣ Viscosity
‣ Needless Complexity
‣ Needless Repetition
‣ Opacity
Building well-designed app
29
>< nextprevious
• Funny: Avoid STUPID codes
‣ Singleton Pattern
‣ Tight coupling
‣ Untestability
‣ Premature Optimization
‣ Indescriptive Naming
‣ Duplication
Building well-designed app
30
>< nextprevious
Summarisation
• SOLID principles, as well as other design
principles and design patterns help you to build
large applications which are easy-to-be-
extended, easy-to-be-maintained, easy-to-be-
tested.
31
>< nextprevious
Summarisation
• SOLID principles, as well as other design
principles and design patterns help you to build
LARGE applications which are easy-to-be-
extended, easy-to-be-maintained, easy-to-be-
tested.
• Principles are just a set of GUIDELINES. They
are not LAWS!
• Don’t take the above argument as a reason to
be lazy!
32
>< nextprevious
Summarisation
Extract Responsibilities
&&
Programming to the Interface
33
>< nextprevious
References
‣ https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
‣ http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
‣ http://www.oodesign.com/
‣ https://lostechies.com/derickbailey/2009/02/11/solid-
development-principles-in-motivational-pictures/
‣ https://nikic.github.io/2011/12/27/Dont-be-STUPID-GRASP-
SOLID.html
‣ http://williamdurand.fr/2013/07/30/from-stupid-to-solid-code/
‣ http://www.codeproject.com/Articles/567768/Object-Oriented-
Design-Principles
‣ “Design Principles and Design Patterns” - Robert C. Martin
‣ “From Apprentice To Artisan” - Taylor Otwell
34
>< nextprevious
Thank you for listening!
Q&A
For any discussion, you can refer this post on Viblo
https://viblo.asia/thangtd90/posts/pVYRPJPmG4ng
35

More Related Content

What's hot (20)

PPT
Domain Driven Design Demonstrated
Alan Christensen
 
PDF
Clean Architecture
Badoo
 
PDF
Clean architecture with ddd layering in php
Leonardo Proietti
 
PDF
Clean Architecture
NSCoder Mexico
 
PPTX
Learning solid principles using c#
Aditya Kumar Rajan
 
PPTX
Clean architecture
.NET Crowd
 
PDF
Vue.js
Jadson Santos
 
PPTX
SOLID Principles
akbarashaikh
 
PPT
TDD (Test Driven Design)
nedirtv
 
PPTX
Apresentação Clean Code
André Leoni
 
PPTX
Open Closed Principle kata
Paul Blundell
 
PPTX
The Art of Metaprogramming in Java
Abdelmonaim Remani
 
PPTX
A Practical Guide to Domain Driven Design: Presentation Slides
thinkddd
 
PDF
Introduction to Docker
Aditya Konarde
 
PPTX
Going Serverless with CQRS on AWS
Anton Udovychenko
 
PPTX
Kotlin InDepth Tutorial for beginners 2022
Simplilearn
 
PPTX
Solid principles
Monica Rodrigues
 
PDF
Repository and Unit Of Work Design Patterns
Hatim Hakeel
 
PPSX
SOLID Principles and The Clean Architecture
Mohamed Galal
 
PPT
.NET Framework Overview
Doncho Minkov
 
Domain Driven Design Demonstrated
Alan Christensen
 
Clean Architecture
Badoo
 
Clean architecture with ddd layering in php
Leonardo Proietti
 
Clean Architecture
NSCoder Mexico
 
Learning solid principles using c#
Aditya Kumar Rajan
 
Clean architecture
.NET Crowd
 
SOLID Principles
akbarashaikh
 
TDD (Test Driven Design)
nedirtv
 
Apresentação Clean Code
André Leoni
 
Open Closed Principle kata
Paul Blundell
 
The Art of Metaprogramming in Java
Abdelmonaim Remani
 
A Practical Guide to Domain Driven Design: Presentation Slides
thinkddd
 
Introduction to Docker
Aditya Konarde
 
Going Serverless with CQRS on AWS
Anton Udovychenko
 
Kotlin InDepth Tutorial for beginners 2022
Simplilearn
 
Solid principles
Monica Rodrigues
 
Repository and Unit Of Work Design Patterns
Hatim Hakeel
 
SOLID Principles and The Clean Architecture
Mohamed Galal
 
.NET Framework Overview
Doncho Minkov
 

Similar to Object Oriented Design Principles (20)

PPTX
Solid
Hadi Ehterami
 
PPTX
Becoming a better developer by using the SOLID design principles
Katerina Trajchevska
 
KEY
SOLID Design Principles
Samuel Breed
 
PDF
S.O.L.I.D xp
XP Conference India
 
PDF
Writing S.O.L.I.D Code
Rajeev Bharshetty
 
PDF
Solid principles of oo design
Confiz
 
ODP
Geecon09: SOLID Design Principles
Bruno Bossola
 
PPTX
SOLID Principles of Refactoring Presentation - Inland Empire User Group
Adnan Masood
 
PPTX
Establishing a SOLID Foundation
Cameron Presley
 
PPTX
Software design principles
Md.Mojibul Hoque
 
PPT
Best practices for agile design
Igor Moochnick
 
PPTX
From Good to SOLID: How to become a better PHP developer
Katerina Trajchevska
 
PPTX
Is your code solid
Nathan Gloyn
 
PDF
Developing solid applications
Nilesh Bangar
 
PPTX
SOLID Principles
Surendra Shukla
 
PDF
Clean architecturebookreport
Halil Co?gun
 
PDF
Clean code
Jean Carlo Machado
 
PPTX
SOLID
ferca_sl
 
PPTX
The good, the bad and the SOLID
Frikkie van Biljon
 
PPTX
Improving The Quality of Existing Software
Steven Smith
 
Becoming a better developer by using the SOLID design principles
Katerina Trajchevska
 
SOLID Design Principles
Samuel Breed
 
S.O.L.I.D xp
XP Conference India
 
Writing S.O.L.I.D Code
Rajeev Bharshetty
 
Solid principles of oo design
Confiz
 
Geecon09: SOLID Design Principles
Bruno Bossola
 
SOLID Principles of Refactoring Presentation - Inland Empire User Group
Adnan Masood
 
Establishing a SOLID Foundation
Cameron Presley
 
Software design principles
Md.Mojibul Hoque
 
Best practices for agile design
Igor Moochnick
 
From Good to SOLID: How to become a better PHP developer
Katerina Trajchevska
 
Is your code solid
Nathan Gloyn
 
Developing solid applications
Nilesh Bangar
 
SOLID Principles
Surendra Shukla
 
Clean architecturebookreport
Halil Co?gun
 
Clean code
Jean Carlo Machado
 
SOLID
ferca_sl
 
The good, the bad and the SOLID
Frikkie van Biljon
 
Improving The Quality of Existing Software
Steven Smith
 
Ad

Recently uploaded (20)

PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PPTX
Human Resources Information System (HRIS)
Amity University, Patna
 
PDF
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
PPTX
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
PDF
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PDF
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PDF
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
Human Resources Information System (HRIS)
Amity University, Patna
 
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
Ad

Object Oriented Design Principles

  • 1. >< nextprevious Object Oriented Design Principles How to become a SOLID programmer Tran Duc Thang Framgia Vietnam - Business Strategy Office - Human Development Section A guide to make a well-designed application with Laravel 1
  • 2. >< nextprevious “Proper Object Oriented design makes a developer's life easy, whereas bad design makes it a disaster.” 2
  • 3. Table of Contents 01 Design Principles first look ‣ What is Design Principle? ‣ Design Principle vs Design Pattern 02 03 04 >< nextprevious SOLID in depth ‣ What are SOLID? ‣ Decoding SOLID ‣ Other related principles Building well-design app ‣ A story with MVC ‣ Some ideas when working with Laravel ‣ Symptoms of Bad Design Summarisation ‣ Annotations, disclaims and notes 3
  • 4. >< nextprevious Design Principles • Object Oriented Design Patterns ‣ A general repeatable solution to a commonly occurring problem in software design. ‣ A description or template for how to solve a problem that can be used in many different situations. ‣ Gained popularity after the book “Design Patterns: Elements of Reusable Object- Oriented Software” was published in 1994 by the so-called “Gang of Four” 4
  • 5. >< nextprevious Design Principles • Object Oriented Design Principles ‣ Associated to Robert Cecil Martin who gathered them in “Agile Software Development: Principles, Patterns, and Practices” ‣ Represent a set of guidelines that ensures OOP concepts, then helps us to avoid having a bad design. ‣ It’s abstract. (Not concrete). 5
  • 6. >< nextprevious Design Principles • Robert Cecil Martin ‣ Agile software development: principles, patterns, and practices. ‣ Clean code: a handbook of agile software craftsmanship. ‣ The clean coder: a code of conduct for professional programmers. 6
  • 7. >< nextprevious Design Principles • Some Software Design Principles in examples ‣ DRY (Don’t Repeat Yourself) ‣ KISS (Keep It Simple, Stupid!) ‣ YAGNI (You Aren't Gonna Need It) 7
  • 8. >< nextprevious Design Principles • Design Patterns vs Design Principles ‣ Principles: low-level, general guidelines ‣ Patterns: high-level, concrete examples. Provide reusable solutions to real world problems. ‣ Good Design Patterns should comply good Design Principles 8
  • 9. >< nextprevious SOLID in depth • What are SOLID? ‣ A mnemonic acronym introduced by Michael Feathers for the “first five principles” named by Robert Cecil Martin. ‣ Single responsibility principle ‣ Open/closed principle ‣ Liskov substitution principle ‣ Interface segregation principle ‣ Dependency inversion principle 9
  • 10. >< nextprevious SOLID in depth • Single responsibility principle (SRP) ‣ A class should have only a single responsibility. In other words, a class should have one, and only one, reason to change. 10
  • 12. >< nextprevious SOLID in depth • Open/closed principle (OCP) ‣ Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification ‣ An entity can allow its behaviour to be extended without modifying its source code 12
  • 14. >< nextprevious SOLID in depth • Liskov substitution principle (LSP) ‣ If S is a subtype of T, then objects of type T may be replaced with objects of type S without altering any of the desirable properties of that program. 14
  • 16. >< nextprevious SOLID in depth • Interface segregation principle (ISP) ‣ No client should be forced to depend on methods it does not use. ‣ Many client-specific interfaces are better than one general-purpose interface. 16
  • 18. >< nextprevious SOLID in depth • Dependency inversion principle (ISP) ‣ High-level modules should not depend on low-level modules. Both should depend on abstractions. ‣ Abstractions should not depend on details. Details should depend on abstractions. 18
  • 20. >< nextprevious SOLID in depth Some other concepts related to SOLID • Separation of Concerns (SoC) ‣ The process of breaking a computer program into distinct features that overlap in functionality as little as possible 20
  • 21. >< nextprevious SOLID in depth • Law of Demeter (LoD) aka Principle of Least Knowledge ‣ Each unit should have only limited knowledge about other units: only units "closely" related to the current unit. ‣ Each unit should only talk to its friends; don't talk to strangers. ‣ Only talk to your immediate friends. 21
  • 22. >< nextprevious SOLID in depth • Program to an interface, not an implementation ‣ One of good object-oriented design techniques that GoF mentioned in “Design Patterns: Elements of Reusable Object- Oriented Software” 22
  • 23. >< nextprevious SOLID in depth • SOLID in Action - Checkout examples at Github https://github.com/wataridori/solid-php-example 23
  • 24. >< nextprevious SOLID in depth All SOLID principles work perfectly together. Breaking one principle may also make some (or even all) of the remaining principles become broken too! 24
  • 25. >< nextprevious Building well-designed app • The MVC Story: Model vs Controller ‣ Where to put your business logic? ‣ Fat Controllers - Skinny Models? ‣ Fat Models - Skinny Controllers? ‣ Fat Models - Fat Controllers? 25
  • 26. >< nextprevious “MVC is killing you” ~ Taylor Otwell - Laravel’s creator ~ 26
  • 27. >< nextprevious Think different! “Think outside of the ‘Model’ Box” 27
  • 28. >< nextprevious • Some ideas when working with Laravel ‣ Get rid of “Model” with lots of business, try “Entity” ‣ Repository design pattern for Data Access Layer ‣ Form Request Validation ‣ Job ‣ Event ‣ View Presenter, or any kind of wrappers that helps you get rid of God Object ‣ Design Patterns ‣ … Building well-designed app 28
  • 29. >< nextprevious • Symptoms of Bad Design ‣ Rigidity ‣ Fragility ‣ Immobility ‣ Viscosity ‣ Needless Complexity ‣ Needless Repetition ‣ Opacity Building well-designed app 29
  • 30. >< nextprevious • Funny: Avoid STUPID codes ‣ Singleton Pattern ‣ Tight coupling ‣ Untestability ‣ Premature Optimization ‣ Indescriptive Naming ‣ Duplication Building well-designed app 30
  • 31. >< nextprevious Summarisation • SOLID principles, as well as other design principles and design patterns help you to build large applications which are easy-to-be- extended, easy-to-be-maintained, easy-to-be- tested. 31
  • 32. >< nextprevious Summarisation • SOLID principles, as well as other design principles and design patterns help you to build LARGE applications which are easy-to-be- extended, easy-to-be-maintained, easy-to-be- tested. • Principles are just a set of GUIDELINES. They are not LAWS! • Don’t take the above argument as a reason to be lazy! 32
  • 34. >< nextprevious References ‣ https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) ‣ http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod ‣ http://www.oodesign.com/ ‣ https://lostechies.com/derickbailey/2009/02/11/solid- development-principles-in-motivational-pictures/ ‣ https://nikic.github.io/2011/12/27/Dont-be-STUPID-GRASP- SOLID.html ‣ http://williamdurand.fr/2013/07/30/from-stupid-to-solid-code/ ‣ http://www.codeproject.com/Articles/567768/Object-Oriented- Design-Principles ‣ “Design Principles and Design Patterns” - Robert C. Martin ‣ “From Apprentice To Artisan” - Taylor Otwell 34
  • 35. >< nextprevious Thank you for listening! Q&A For any discussion, you can refer this post on Viblo https://viblo.asia/thangtd90/posts/pVYRPJPmG4ng 35