KISS
“Keep it simple, stupid”
“Keep it stupid simple”
U.S. Navy in 1960,
aircraft engineer Kelly Johnson
Slide 12
Slide 12 text
KISS
Slide 13
Slide 13 text
< = >
LESS IS MORE
Slide 14
Slide 14 text
SOLID
• SRP (Single Responsible Principle)
• OCP (Open/Closed Principle)
• LSP (Liskov Substitution Principle)
• ISP (Interface Segregation Principle)
• DIP (Dependency Inversion Principle)
Robert C. Martin
(Uncle Bob)
Slide 15
Slide 15 text
SRP
Single Responsible Principle
• 2002
• A class should have
one, and only one,
reason to change
http://rubyblog.pro/2017/05/solid-single-responsibility-principle-by-example
Slide 16
Slide 16 text
SRP
Single Responsible Principle
Slide 17
Slide 17 text
Contexts
Slide 18
Slide 18 text
OCP
Open/Closed Principle
• 1996
• You should be able
to extend a classes
behavior, without
modifying it
http://rubyblog.pro/2017/05/solid-open-closed-principle-by-example
Slide 19
Slide 19 text
LSP
Liskov Substitution Principle
• 1987
• Barbara Liskov
• Let Φ(x) be a property provable about objects x of type
T. Then Φ(y) should be true for objects y of type S
where S is a subtype of T.
http://rubyblog.pro/2017/06/solid-liskov-substitution-principle
Slide 20
Slide 20 text
LSP
Liskov Substitution Principle
• objects in a program
should be
replaceable with
instances of their
subtypes without
altering the
correctness of that
program
http://rubyblog.pro/2017/06/solid-liskov-substitution-principle
Slide 21
Slide 21 text
LSP anti-pattern
Slide 22
Slide 22 text
ISP
Interface Segregation Principle
• 1996
• Clients should not
be forced to depend
upon interfaces that
they don't use.
http://rubyblog.pro/2017/07/solid-interface-segregation-principle
Slide 23
Slide 23 text
DIP
Dependency Inversion Principle
• 1996
• 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.
http://rubyblog.pro/2017/07/solid-dependency-inversion-principle
Slide 24
Slide 24 text
SOLID
Robert C. Martin
(Uncle Bob)
Slide 25
Slide 25 text
YAGNI
You aren't gonna need it
• principle of extreme
programming (XP)
• XP co-founder Ron
Jeffries has written:
"Always implement
things when you
actually need them,
never when you just
foresee that you
need them."
CQS
Command Query Separation
• devised by Bertrand Meyer during his work on the Eiffel
programming language
• Queries: Return a result and do not change the observable state
of the system (are free of side effects)
• Commands: Change the state of a system but do not return a
value
Slide 43
Slide 43 text
Command Query
Responsible Segregation
2006 Greg Young describes CQRS