From STUPID To SOLID
STUPID
Singleton
Tight Coupling
Untestability
Premature Optimization
Indescriptive Naming
Duplication
Singleton
Most well-known design pattern
Singleton syndrome
Using global state is very difficult to test
If the *best solution is a singleton, you're doing something wrong.
Tight Coupling
Coupling is the degree which each module relies on each one of the other modules
Does coupling exist in your programs?
Do you instantiante objects on the constructor?
Difficult to reuse & to test
Untestability
Test should not be hard
Symptom of tight coupling
You should always write tests
Make sure you always have a complete suite
Premature Optimization
Changing architecture is more complex that rewriting loops
Don't dare to optimize without any data
You could introduce more bugs
Leave it the experts
To Experts: don't do it (yet)
Indescriptive Naming
Name your classes, methods, variables, attributes properly!
Don't abbreviate!
Write code for humans
"Programming languages are for humans"
Duplication
Don't Repeat Yourself (Dry)
Be lazy (the right way)
Keep it simple, stupid (Kiss)
If you're copying and pasting constantly you might be violating this principle
SOLID: The path of the righteous
S
ingle Responsibility Principle
O
pen/Closed Principle
L
iskov Substitution Principle
I
nterface Segregation Principle
D
ependency Inversion Principle
Principles, not laws
Single Responsibility Principle
Just because you can doesn't mean you should
Ask before you add something if that should be there.
Avoid God classes
High cohesion
Open/Closed Principle
X-Rays are not needed to put on a shirt.
Show only what you need to show (And through getters and setters)
Open for extension and close for modification.
Liskov Substitution Principle
If it looks like a duck, quacks like a duck but it needs batteries, you probably have the wrong abstraction.
"O
bjects in a program should be
replaceable with instances of their subtypes without altering the correctness
of the program."
Interface Segregation Principle
Many client-specific interfaces are better than one general purpose
Low coupling + High cohesion
Keep your components focused and try to minimize the dependence between them
Dependency Inversion
Abstraction should not depend upon details
Details should not depend upon abstraction
High level classes -> Abstraction Layer-> Low level classes
Conclusion
Avoid Tight coupling
Tight cohesion
Use your brain
Think about the future (all code is legacy code)
Made with Slides.com