Sunteți pe pagina 1din 35

Object Oriented Design Principles

How to become a SOLID programmer


A guide to make a well-designed application with Laravel

Tran Duc Thang


Framgia Vietnam - Business Strategy Office - Human Development Section

<

previous

next
1

>

Proper Object Oriented design makes


a developer's life easy, whereas bad
design makes it a disaster.

<

previous

next
2

>

Table of Contents

<

01

Design Principles first look

02

SOLID in depth

What is Design Principle?


Design Principle vs Design Pattern

What are SOLID?


Decoding SOLID
Other related principles

previous

03

Building well-design app

04

Summarisation

A story with MVC


Some ideas when working with Laravel
Symptoms of Bad Design

Annotations, disclaims and notes

next
3

>

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 ObjectOriented Software was published in 1994
by the so-called Gang of Four

previous

next
4

>

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.

Its abstract. (Not concrete).

previous

next
5

>

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.

previous

next
6

>

Design Principles

<

Some Software Design Principles in examples

DRY (Dont Repeat Yourself)


KISS (Keep It Simple, Stupid!)
YAGNI (You Aren't Gonna Need It)

previous

next
7

>

Design Principles

<

Design Patterns vs Design Principles

Principles: low-level, general guidelines

Good Design Patterns should comply good


Design Principles

Patterns: high-level, concrete examples.


Provide reusable solutions to real world
problems.

previous

next
8

>

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

previous

next
9

>

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.

previous

next
10

>

SOLID in depth

<

previous

next
11

>

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

previous

next
12

>

SOLID in depth

<

previous

next
13

>

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.

previous

next
14

>

SOLID in depth

<

previous

next
15

>

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.

previous

next
16

>

SOLID in depth

<

previous

next
17

>

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.

previous

next
18

>

SOLID in depth

<

previous

next
19

>

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

previous

next
20

>

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.

previous

next
21

>

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 ObjectOriented Software

previous

next
22

>

SOLID in depth

SOLID in Action - Checkout examples at Github

https://github.com/wataridori/solid-php-example

<

previous

next
23

>

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!

<

previous

next
24

>

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?

previous

next
25

>

MVC is killing you


~ Taylor Otwell - Laravels creator ~

<

previous

next
26

>

Think dierent!
Think outside of the Model Box

<

previous

next
27

>

Building well-designed app

<

Some ideas when working with Laravel

Get rid of Model with lots of business, try Entity

Design Patterns

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

previous

next
28

>

Building well-designed app

<

Symptoms of Bad Design

Rigidity
Fragility
Immobility
Viscosity
Needless Complexity
Needless Repetition
Opacity

previous

next
29

>

Building well-designed app

<

Funny: Avoid STUPID codes

Singleton Pattern
Tight coupling
Untestability
Premature Optimization
Indescriptive Naming
Duplication

previous

next
30

>

Summarisation

<

SOLID principles, as well as other design


principles and design patterns help you to build
large applications which are easy-to-beextended, easy-to-be-maintained, easy-to-betested.

previous

next
31

>

Summarisation

<

SOLID principles, as well as other design


principles and design patterns help you to build
LARGE applications which are easy-to-beextended, easy-to-be-maintained, easy-to-betested.

Principles are just a set of GUIDELINES. They


are not LAWS!

Dont take the above argument as a reason to


be lazy!

previous

next
32

>

Summarisation
Extract Responsibilities
&&
Programming to the Interface

<

previous

next
33

>

<

References

https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

https://nikic.github.io/2011/12/27/Dont-be-STUPID-GRASPSOLID.html

http://williamdurand.fr/2013/07/30/from-stupid-to-solid-code/

Design Principles and Design Patterns - Robert C. Martin

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
http://www.oodesign.com/
https://lostechies.com/derickbailey/2009/02/11/soliddevelopment-principles-in-motivational-pictures/

http://www.codeproject.com/Articles/567768/Object-OrientedDesign-Principles

From Apprentice To Artisan - Taylor Otwell

previous

next
34

>

Thank you for listening!


Q&A
For any discussion, you can refer this post on Viblo
https://viblo.asia/thangtd90/posts/pVYRPJPmG4ng

<

previous

next
35

>

S-ar putea să vă placă și