2. www.luxoft.com
What are we going to
talk about?
2
● SOLID principles
● Dependency inversion
● Component based architecture
principles
● Plugins
● Applications
6. www.luxoft.com
Good system design
could be described as:
6
● Provides ability to change
certain modules without the
breakdown of the whole system
● Relatively easy to understand
● Components can be used in
different software systems
7. www.luxoft.com 7
SOLID Principles
● Single Responsibility principle
An entity in software system must have one and only one reason to change
● Open-Closed principle
An entity should be open for extension but closed for modification.
● Liskov substitution principle
Objects should be replaceable with instances of their subtypes without breaking the program.
● Interface segregation principle
Many client specific interfaces are better than one general-purpose interface
● Dependency inversion principle
One should depend upon abstractions not concretions
8. www.luxoft.com
Dependency inversion
Changes in abstract interface layers correspond to
changes to its concrete implementations. On the
contrary, changes to concrete implementations usually
do not require changes to the interfaces that they
implement. Interfaces must be less volatile than
implementations.
9. www.luxoft.com
This boils down to the following guidelines:
● Don’t refer to concrete classes (refer to abstract interfaces instead)
● Don’t inherit volatile concrete classes (inheritance is the strongest and the most rigid of all source code
dependencies)
● Don’t override concrete functions (you may have to deal with all the dependencies of a function you are going
to override)
11. www.luxoft.com
Component cohesion
principles
● REP - Reuse/release principle
The granule of reuse is the granule of
release.
● CCP - Common closure principle
Components should contain classes
that change for the same reasons and
at the same time.
● CRP - Common reuse principle
Don’t force users of a component to
depend on things they don’t need.
16. www.luxoft.com
Plugin approach
16
The core business rules are kept
separate from, and independent of
those components that are either
optional or that can be
implemented in many different
forms.