Professional Documents
Culture Documents
Martin Ledvinka
martin.ledvinka@fel.cvut.cz
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 1 / 42
Contents
1 Software Architecture
2 Architectural Styles
Layered Architecture
3 Design Patterns
GoF Design Patterns
Enterprise Design Patterns
Other Useful Patterns
5 Conclusions
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 2 / 42
Some buzzwords and acronyms for today
Software architecture
Inversion of Control (IoC)
Design pattern
Dependency injection (DI)
Separation of concerns
Data Access Object (DAO)
Single responsibility principle
Model View Controller (MVC)
Keep it simple, stupid (KISS)
Hollywood principle
Don’t repeat yourself (DRY)
Encapsulation
Don’t talk to strangers
High cohesion, loose coupling
(Demeter’s law)
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 3 / 42
Software Architecture
Software Architecture
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 4 / 42
Software Architecture
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 5 / 42
Software Architecture
Software architecture
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 6 / 42
Software Architecture
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 7 / 42
Software Architecture
Architecture example
System architecture
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 9 / 42
Architectural Styles
Architectural Styles
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 10 / 42
Architectural Styles
Architectural styles
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 11 / 42
Architectural Styles
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 12 / 42
Architectural Styles
Client/Server
Client sends requests, server responds,
Web applications use this pattern,
Server – possible single point of failure and scalability issue.
N(3)-tier
Independent tiers providing functionality,
Easier scaling,
E.g. load balancing, company firewall.
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 14 / 42
Architectural Styles
Domain-driven Design
Business components represent domain entities,
Suitable for modelling complex domains,
Common language and model for developers and domain experts.
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 15 / 42
Architectural Styles
Object-oriented
Objects consist of both behaviour and data,
Natural representation of real world,
Encapsulation of the implementation details.
Layered
More on layers later...
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 16 / 42
Architectural Styles
Component-based
System decomposed into logical or functional components,
Components provide public interfaces,
Supports separation of concerns and encapsulation,
Components can be managed by architecture provider,
Dependency injection and Service locator used to managed
dependencies,
Components can be distributed,
Higher level than OOP.
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 17 / 42
Architectural Styles Layered Architecture
Layered architecture
Layered architecture II
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 19 / 42
Design Patterns
Design Patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 20 / 42
Design Patterns
Design patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 21 / 42
Design Patterns GoF Design Patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 22 / 42
Design Patterns GoF Design Patterns
Creational Patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 23 / 42
Design Patterns GoF Design Patterns
Structural Patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 24 / 42
Design Patterns GoF Design Patterns
Decorator
Decorator in Java I/O
BufferedReader in = new BufferedReader(new FileReader(new
File("input.txt")));
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 25 / 42
Design Patterns GoF Design Patterns
Behavioral Patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 26 / 42
Design Patterns GoF Design Patterns
Behavioral Patterns II
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 27 / 42
Design Patterns Enterprise Design Patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 28 / 42
Design Patterns Enterprise Design Patterns
PEAA
Lazy Load
Object does not contain all of its data initially, but knows how to load
it,
Useful for objects holding large amounts of data (e.g. binary data),
Often overused as a way of premature optimization.
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 29 / 42
Design Patterns Enterprise Design Patterns
PEAA II
Unit Of Work
Maintains objects affected by a business transaction and coordinates
the writing out of changes and the resolution of concurrency problems,
Common in JPA implementations (e.g. Eclipselink).
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 30 / 42
Design Patterns Other Useful Patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 31 / 42
Design Patterns Other Useful Patterns
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 32 / 42
Design Patterns Other Useful Patterns
IoC II
Dependency Injection
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 34 / 42
Design Patterns Other Useful Patterns
Dependency Injection II
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 35 / 42
Spring Web Application Architecture
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 36 / 42
Spring Web Application Architecture
Typically layered,
Usually three layers,
Relies on DI and IoC provided by the Spring container,
Various possibilites for the top and bottom layers:
Spring MVC, REST services, SOAP services for the web layer,
Spring JPA, Spring JDBC,
Integrated support for security.
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 37 / 42
Spring Web Application Architecture
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 38 / 42
Conclusions
Conclusions
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 39 / 42
Conclusions
Conclusions
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 40 / 42
Conclusions
The End
Thank You
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 41 / 42
Conclusions
Resources
Martin Ledvinka (martin.ledvinka@fel.cvut.cz) Application Architectures, Design Patterns Winter Term 2017 42 / 42