SlideShare une entreprise Scribd logo
1  sur  93
Agenda:
- Software architecture overview
- Software development methodologies overview
- Design and modeling principles overview
- Architectural patterns overview
- Q and A
What is Software
Architecture?
The highest possible concept of a
software system in its
environment ...
Martin Fowler:
https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
The highest level concept of the
expert developers ...
Martin Fowler:
https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
I define architecture as a word we
use when we want to talk about
design but want to puff it up to
make it sound important.
Martin Fowler:
https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
Architecture is about the
important stuff.
Whatever that is!!!
Ralph Johnson
It is not architecture if there is no
boxes and lines ...
Simon Brown
“Cargo - cult”:
ritual way of doing stuff without
deeper (or any) understanding -
just because it’s cool and trendy
https://en.wikipedia.org/wiki/Cargo_cult_programming
Side by side comparison and
analogy with C4 software and
architecture visualisation system
(by Simon Brown)
C4 visualisation of architecture: http://static.codingthearchitecture.com/c4.pdf
C1 zoom level: Software Context
- Users interacting with the system
- System in center surrounded by users to describe context in which
system is used
- Broader picture which non tech people can understand
C4 visualisation of architecture: http://static.codingthearchitecture.com/c4.pdf
C1 zoom level: Software Context
C2 zoom level: Containers
- Illustration of high level tech choices in which system runs, such as:
- Web applications
- Web services
- System services
- Databases, file systems, etc...
C4 visualisation of architecture: http://static.codingthearchitecture.com/c4.pdf
C1 zoom level: Software Context
C3 zoom level: Components
- Major structural building blocks contained within container
- Component: an encapsulated unit of software that has a well defined
interface and a clear and concise role and responsibility statement
C2 zoom level: Containers
C4 visualisation of architecture: http://static.codingthearchitecture.com/c4.pdf
C1 zoom level: Software Context
C4 zoom level: Classes or Code
- Can be visualized with UML or whatever it makes sense
C2 zoom level: Containers
C3 zoom level: Components
Comparing C4 to abstract/conceptual design and architectural concept
C1: Context
C2: Containers
C3: Components
C4: Classes
Software System visualisation
Software Architecture and Design on
conceptual abstract level - zoom level
matches?
?
Comparing C4 to abstract/conceptual design and architectural concept
C1: Context
C2: Containers
C3: Components
C4: Classes
C1: Architectural Context
- Set of targeted quality attributes expected from a
system
- Also known as “itties” - scalability, maintanability,
testability ...
- Usually three primary (must have) and three
secondary (nice to have)
- https://en.wikipedia.org/wiki/List_of_system_quality_
attributes
-
accessibility evolvability repeatability accountability extensibility reproducibility
accuracy failure transparency resilience adaptability fault-tolerance
responsiveness administrability fidelity reusability affordability flexibility
robustness agility inspectability safety auditability installability scalability
autonomy integrity seamlessness availability interchangeability
self-sustainability compatibility interoperability serviceability composability
learnability supportability configurability maintainability securability
correctness manageability simplicity credibility mobility stability
customizability modifiability standards compliance debugability modularity
survivability degradability operability sustainability determinability orthogonality
tailorability demonstrability portability testability dependability precision
timeliness deployability predictability traceability discoverability process
capabilities transparency distributability producibility ubiquity durability
provability understandability effectiveness recoverability upgradability
efficiency relevance usability
- "over time we are expecting the entire company to use
this system" - ?
- "the budget and timeframe for this system is very, very
tight" - ?
- "we need lightning-fast response time to keep up with
the backlog of calls" - ?
- "we are planning to acquire several businesses in the
next 5 years" - ?
- "over time we are expecting the entire company to use
this system" - scalability
- "the budget and timeframe for this system is very, very
tight" - feasibility
- "we need lightning-fast response time to keep up with
the backlog of calls" - performance
- "we are planning to acquire several businesses in the
next 5 years" - extensibility, agility, maintainability
Enterprise software or Line of Business software common
architectural contexts:
- Reliability (or less fragility)
- Testability
- Flexibility (or less rigidity)
- Reusability and modularity
- Maintainability - stability, analyzability, readability,
changeability, testability
Consequences of ignoring architectural context and quality
attributes
Comparing C4 to abstract/conceptual design and architectural concept
C1: Context
C2: Containers
C3: Components
C4: Classes
C2: Architectural patterns/style classification
- Big Ball of Mud
- Monolithic: Layered, Microkernel, Pipeline...
- Distributed: Event-driven, Space-based,
Service-oriented, Service-based, Microservices...
- Hybrids: Event-driven layered, Layered-microkernel,
many, many different combination…
- Highly specialized architecture: LMAX
Big Ball of Mud - absence of any perceivable architecture
Layered architecture
- Separation of Concerns
- Cross cutting concerns?
- Open or closed layers?
- Service Layer?
- Physical Tiers and scalability?
- Vertical decomposition strategies?
(functional, velocity of change,
bounded context, CQRS ...)
Microkernel (plug-in) architecture
- Core - minimal logic to run the system and
business logic
- Plug in - standalone independent module
with additional logic
- Example - claims processing, each state
with own plug in
- modern browsers implementations
- Business applications
Event-driven architecture
- Broker topology - message
queue
- vs
- Mediator topology - series of
parallel events
- Transaction problem
- Delphi Corba
Pipeline architecture
- Self contained and independent
from other filters
- Designed to perform single task
- Four types of filters
- Example: Captures data from
different sources and multiple
formats and, process them and
sends them to output
Space-based architecture
- Separate, independent, scalable processing units
- Middleware manages: input and sessions, data
replication, distributed request processing,
dynamic deployment
- Commercial implementations: javaspaces,
gigaspaces, ibm object grid, oracle coherence…
- All about variable scalability (variable load or
inconsistent peak times)
- Not good for traditional relational db systems and
complex and expensive
Microservices architecture
- Distributed - Protocol aware heterogeneous
interoperability (Java, .net, python, etc)
- Separately deployed
- Service components (functional services,
infrastructure services, messaging services)
- Bounded context (common, ubiquitous language )
- Data domains (no acid transactions, replication or
nosql)
- Api layer (http or lightweight messaging)
- Event driven or pipeline
Service-oriented architecture
- Distributed: Protocol agnostic heterogeneous
interoperability
- Contract decoupling
- Integration server (integrability, b2b)
- Good for large organizations with lots of legacy
systems
- Commercial implementations: MS BizTalk, IBM
WebSphere
Service-based architecture - let’s find some middle ground between SOA and
Microservices
Service-based architecture
Advantages:
- Unit of Work transactional context
- Performance and robustness
(joins, orchestration)
- Domain scope
- Shared resources
- Feasibility
Tradeoffs:
- Service deployment and testing
- Deployment pipeline planning
- Change control
- Bounded context
- Couplings, schema changes
Service-based architecture - transition to microservices
Service-based architecture - transition to microservices
Service-based architecture - transition to microservices
Comparing C4 to abstract/conceptual design and architectural concept
C1: Context
C2: Containers
C3: Components
C4: Classes
C3: Architectural Patterns
- Transactional script
- Active Record and Data Mapper
- Data Repositories and Units of Work
- Domain Models
- Model View Whatever (MVC, MVP, MVVP, …)
Comparing C4 to abstract/conceptual design and architectural concept
C1: Context
C2: Containers
C3: Components
C4: Classes
C4: Design patterns
- Creational: Factory, Abstract Factory, Dependency
Injection, Singletons, etc...
- Structural: Adapter, Proxy, Facade, Manager,
Composite, Decorator, etc...
- Behavioral: Command, Iterator, Mediator, Strategy, ...
- Concurrency: Thread-pool, Lock, Join, Double-check
locking, etc...
- Lots of criticism and lots of cargo-cult -
https://gist.github.com/jaysonrowe/1592775 vs
https://github.com/EnterpriseQualityCoding/FizzBuzzE
nterpriseEdition
-
Development Methodologies
module
1. Database First (bottom-up)
db
module module
module
ui
- Most common methodology - strong
emphasis on database design
- Starts with modeling your storage device
schema
- Relational database is optimized for easy or
optimized general purpose querying not for
actual solution
- Awkward object models of actual solution
(domain) - impedance mismatch problem
2. DDD: Domain-driven development (top-down)
db
repositories
ui
Domain model
- DDD starts with development of domain model first.
- Domain model is object oriented (in-memory) model of solution
of your problem (business object model)
- Developed without second thought how data
should be persisted - db schema is modeled at
the end, after the domain, domain is persistence
ignorant, - don’t know and even don’t care
anything about db schema
- db model derives from domain schema and it is modeled to
accommodate domain object model persistence
- Repository pattern is used to communicate to database (object
are put to and retrieved from repositories)
- Test Driven Development - TDD - can be applied from start!
view models
3. TDD: Test-driven development
RED
GREEN
REFACTOR
1. Write a failing test - red
2. Write just enough code to
make your failing test pass -
green
3. Refactor your code to make it better - apply modeling
principles or project guidelines and standards - your test is
red again
4. Repeat everything
until results are
satisfactory
Development Modeling
Principles
Low coupling and High cohesion
- Coupling: extent to which components know about
each other
- Types of coupling:
- Afferent - A, B and C are coupled to D
- Efferent - A is coupled to B, C and D
- Temporal - timing dependencies like transaction
A B C
A B C
Low coupling and High cohesion
- Coupling: extent to which components know about
each other
- Degrees of coupling:
1) Tight coupling (pathological coupling) - depending on inner workings
of component or system
2) External coupling - components share externally imposed protocol
(rest, soap)
3) Control coupling - one component passes info to others what to do
4) Loose coupling - data coupling - components are bound to shared
data context
A B C
A B C
Low coupling and High cohesion
Low coupling and High cohesion
- Cohesion:
1) Degree to which the components belong together, suggestion is all the
related code should be close to each other
2) How clear is component responsibility:
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition/tre
e/master/src/main/java/com/seriouscompany/business/java/fizzbuzz/pack
agenamingpackage/impl/stringreturners
GOF: Program to an interface - not to
implementation
- Classes should aware only of interface and not of
implementation
- It means your code should operate on interfaces rather
than concrete objects with concrete implementation
- We should avoid pathological coupling -
depending on inner workings of component
or system
- Makes your code much more flexible
interface
Impl. 1. Impl. 2. Impl. N.
Client
code
GOF: Favor composition to inheritance
- Derived is tightly coupled to base - they are
in “is a” relationship
- Base class exposes it’s private parts to
derived - breaks encapsulation
- Composition is “has a” relationship - it can
be replaced any time - it is much more
loosely coupled.
base
derived
Composed
(owned)
Composer
(owner)
S.O.L.I.D. principles
When applied together, it is more likely that a programmer will create a system
that is easy to maintain and extend over time.
- SRP, OCP, LSP, ISP, DIP
- Robert C. Martin, aka Uncle Bob
SRP - Single Responsibility Principle
- A class should have only ONE reason to change or ONE, single, and CLEAR
responsibility!
- Methods have intent or intention, classes have responsibility!
responsibility
intent
SRP - Single Responsibility Principle
- Responsibility = reason to change (not being bugfix or refactoring)
- Responsibility = it is an axis of change.
- If there are more than one reason to change, more than one motive to change or it changes on
different occasion for different reason - violates SRP
- Things that change for same reasons belong into same class!
- Each of those responsibilities could change from different reason in different time - and on every
single change we have to deal with each and every piece of code of ALL of those responsibilities.
- That reeks on rigidity - harder to change!
- Also reeks on fragility - that change can cause undesired behavior on
unexpected places!
SRP - Single Responsibility Principle
- Textbook example:
- We need to calculate some value using certain algorithm using some values stored in database
- How many responsibilites are there?
SRP - Single Responsibility Principle
- Textbook example 2:
- We have two separate and different views that will be showing same data using same query:
View A View B
Query X Query X
OR?
View A View B
Query X
Changeability, agility? Fragility, changeability, testability,
analyzability, stability?
SRP - Single Responsibility Principle
- Uncle Bob: Axis of change is only if change actually happens.
Small, over-fragmented classes smell on needless complexity and lack of
cohesion!
- Java FizzBuzz enterprise example of needless complexity and lack of cohesion
- Classes can and should do different things if they all lay on same axis of change.
On the other hand…
- The “god object” or the “monster object” is offensive anti-pattern - class that
has too many functionalities implemented, like a swiss knife.
- When something breaks, and it will, you might lose your entire toolset.
SRP - Single Responsibility Principle
SRP - Single Responsibility Principle
- The right balance between needles complexity and violation of SRP:
- Experience
- Feedback from domain expert
- Class-responsibility-collaboration card or CRC cards in design process
OCP - Open-Closed Principle
- Software entities (modules, classes, functions) - should
be open for extension and closed for modifications
- OR:
1) Code is opened to extension
2) Code is closed for modifications
- No code lives in total isolation - complete decoupling is not possible.
- So, when change happens, and it will - it may cascade through dependent modules and cause
undesired behaviour.
We want to prevent fragility.
OCP - Open-Closed Principle
- Abstraction is the key for this principle.
- To be able to make class extendable with new code, abstraction is used - we
just insert layer of abstraction between code we want to protect from
changes and the calling code.
- Textbook example:
- Geometrical drawing application. Drawing different geometrical shapes on
screen - square, circle, rectangle, triangle …
OCP - Open-Closed Principle
So, can we close all code for changes?
OCP - Open-Closed Principle
- Trying to close all closures is offensive anti-pattern -
over-engineering.
- Since, we cannot and should not close all closures -
closures need to be strategic - strategic closure!
- Example - calling function to determine is service available
SRP - Single Responsibility Principle
- How can we detect strategic closures?
- Experience
- Feedback from domain expert
- CRC cards and upright design process
- Design pattern examples that allows us closing code for modifications:
- Facade design pattern - simplified interface for larger
body of code such as service or library
- Proxy design pattern - interface for something else
- Adapter design pattern - allows some interface to be
used as another interface
SRP - Single Responsibility Principle
SRP - Single Responsibility Principle
LSP - Liskov Substitution Principle
- Functions that use pointers or references to base classes
must be able to use objects of derived classes without
knowing it.
- Wants to tell us something important about inheritance:
- Object instance from base and derived classes must be
replaceable!
- Inheritance should be “is substitution for” instead of “is” relation
LSP - Liskov Substitution Principle
- Breaking the LSP will also break an OCP principle
- If introduce derived class, for which we need to modify calling code - that
modification can easily cascade through system and dependent modules
bringing unwanted undesired behaviour and errors.
- If we use “is instance” type operators to form conditional statements - that is
strong indication of LSP violation - and, OCP is also violated where that type
operator is used!
LSP - Liskov Substitution Principle
Square
+ SetWidth()
+ SetHeight()
+ CalcArea()
Rectangle
+ SetWidth()
+ SetHeight()
+ CalcArea()
OR?
Rectangle
+ SetWidth()
+ SetHeight()
+ CalcArea()
Square
+ SetSide()
Calculable Area
(abstract)
+ CalcArea()
LSP - Liskov Substitution Principle
ISP - Interface Segregation Principle
- Clients should NOT be forced to depend upon
interfaces that they do not use!
- This principle deals with disadvantages of having so called “fat”
interfaces”.
- We don’t want “fat” interfaces! We want only what we use!
- No-one should be forced to depend on what it doesn’t use!
ISP - Interface Segregation Principle
- Same basic idea as SRP but from different angle:
- Unlike SRP which states that each module should
have one responsibility - ISP is tells us not to be
confronted with something that you might not actually
need.
ISP - Interface Segregation Principle
DIP - Dependency Inversion Principle
a) High level modules should NOT depend on low level
modules. Both should depend on abstraction.
b) Abstraction should NOT depend upon details. Details
should depend upon abstraction.
DIP - Dependency Inversion Principle
- Same basic idea as OCP, but, it tells us exactly what
our strategic closure should be - module level
- Between modules there should be layer of abstraction
upon both modules depend, rather on each other
directly.
- This is the principle that is at the very heart of
frameworks design.
DIP - Dependency Inversion Principle
- And in case of enterprise architecture - that is exactly
what we are trying to accomplish - to create framework
for our enterprise or business!
- It is at the root of many of the benefits claimed for
object-oriented technology.
DIP - Dependency Inversion Principle
Copy
Keyboard
reader
Printer
writer
- Can you test “copy” without Keyboard reader or Printer writer?
- Can you replace Keyboard reader with some custom File reader?
- Can you replace Printer writer with with some custom File writer?
DIP - Dependency Inversion Principle
Copy
Reader
(abstract)
Writer
(abstract)
Keyboard
reader
Printer
writer
- Higher level module - copy
- Lower level modules - keyboard reader and
printer writer
- Abstraction - abstract reader and writer
- Details - higher level module and lower level
modules
- Abstraction doesn’t depend on anyone or
anything.
- Details depend on abstraction, not on each other -
dependency structure is inverted.
DIP - Dependency Inversion Principle
- Can be used whenever two pieces of code talk to each other - to be able
to supply alternative implementation dynamically!
- Makes your code reliable, flexible, reusable and maintainable.
- Essential part of good design
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
- if we use dependency inversion - how that dependency should be
supplied to a higher level module or a class?
- Also, where are those classes are supposed to be created then?
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
Injection:
- Property injection
(is this abomination?)
- Method injection
- Constructor injection
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
Creation:
- Poor man’s DI - default parameters (not really
decoupled)
- Factory design pattern
- Service locator design pattern
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
Creation:
- Note:
- Created dependencies can be really really complex,
and have its own complex dependencies and so
on…
- Those structures are usually called - Structure
Maps
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
Creation:
- Poor man’s DI - default parameters (not really
decoupled)
- Good to start with, simple structure maps
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
Creation:
- Factory design pattern, support more complex
structure maps
Client
code
Factory Created
objects
uses >> creates >>
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
Creation:
- Service Locator design pattern
Client
code
Service
locator
Service
instance
ABC
Service
instance
XYZ
Service
instance
123
uses >>
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
Creation: IoC Container - true followers of “Don’t call us, we’ll call you”
concept.
- Dependency is completely inverted, it is usually bootstrapped at
application startup from some kind of configuration file usually.
Usually some 3rd party library, but not necessarily.
By using an IoC Container, the client code can simply depend on an interface
or abstract class and not have a care in the world as to what is providing it
with the concrete implementation at runtime.
Dependency Injection (DI) and Inversion of
Control (IOC) - Hollywood Principle
factories
service locators
configuration /
containers
main
concrete implementations
app. services
domain objects
main / init / global
application
SOC - Separation of Concerns
- Concern - module level
- Responsibility - class level
- Intent - method level
- Concern = Any piece of interest or focus in our
program!
- We can or we should focus our
attention on one focus or one
aspect at the time.
concern
responsibility
intent
SOC - Separation of Concerns
storage
device
Your code
ui
device
storage
device
ui
device
ui device
concern
Your app
logic
Storage
concern
Presentation / UI layer
Business / Domain layer
Persistence / Data Access layer
Database
layer
ui
SOC - Separation of Concerns
Persistence / Data Access layer
- Relations models
- Repositories, Units of Works, Query
Builders
- ORM’s and Queries
Presentation / UI
layer
View Models
Business / Domain layer
- Domain models, domain entities, value
objects, factories, processors and
managers
- Loose coupled with pub/subs
Database
layer
- Conways law
- Schema changes containment and logic
duplication
- Change management, rate of change, different
motivations and deployment
- Cross cutting concerns?
- Service Layer?
- DI between layers?
- Service separation and tiers
- Vertical decomposition strategies:
- Functional
- Velocity and value streams
- Bounded context
- Command and query segregation
Service layer
Messages,
Request/Response
models
Architectural Patterns
Transactional Script Architectural Pattern
- Transactionional Script Strengths
- Simple, easy and fast to develop
- Suitable for small schemas
- Transactionional Script Weaknesses
- Hard or impossible to test
- Procedural style, no modelling
- Hard to compensate schema changes
Active Record and Data Mapper
- Active Record, Data Mapper and ORM’s
- Differences and Strengths
- Weaknesses and Impedance Mismatch
Active Record, Data Mapper, ORM’s
- Is it real abstraction or just mapping?
- Vietnam of Computer Science
- Some examples of strange manifestations of
Impedance Mismatch
Domain models, domain modeling and some
other architectural patterns
- Domain models, Anemic Domain Models, Identity
objects, Value objects and Bounded Context
- Data Repositories, Aggregate roots
- Presentation patterns, Service patterns, etc...
Some resources
- https://www.thoughtworks.com/ - global consultancy company, anything from them
- Neal Ford: http://nealford.com/ - software architecture consultant at thoughtworks, books, videos, lectures
and workshops
- Martin Fowler, chief scientist at thoughtworks, books, videos, lectures
- Juval Löwy, software legend, ceo and founder of IDesign - http://www.idesign.net/ - consultancy, lectures,
videos, workshops
- Simon Brown - http://simonbrown.je/ consultancy, visualization software, videos, lectures
- Many other consultants in the field that offer lectures, books, free videos, etc, like Mark Richards, Dino
Esposito, Allen Holub, etc…
- Listen to the software architecture radio: http://www.softwarearchitecturerad.io/
Thank you for your attention

Contenu connexe

Tendances

Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services webCHOUAIB EL HACHIMI
 
6 modeling system requirements
6 modeling system requirements6 modeling system requirements
6 modeling system requirementsricardovigan
 
Introduction to Enterprise Architecture
Introduction to Enterprise ArchitectureIntroduction to Enterprise Architecture
Introduction to Enterprise ArchitectureMohammed Omar
 
Lecture 2: The Concept of Enterprise Architecture
Lecture 2: The Concept of Enterprise ArchitectureLecture 2: The Concept of Enterprise Architecture
Lecture 2: The Concept of Enterprise ArchitectureSvyatoslav Kotusev
 
A Brief Introduction to Enterprise Architecture
A Brief Introduction to  Enterprise Architecture A Brief Introduction to  Enterprise Architecture
A Brief Introduction to Enterprise Architecture Daljit Banger
 
Clean Architecture By Jason Taylor
Clean Architecture By Jason TaylorClean Architecture By Jason Taylor
Clean Architecture By Jason Taylormaa77
 
Rapport PFE ISMAGI SQLI Microsoft
Rapport PFE ISMAGI SQLI MicrosoftRapport PFE ISMAGI SQLI Microsoft
Rapport PFE ISMAGI SQLI MicrosoftOussama BAHLOULI
 
Enterprise Architecture - TOGAF Overview
Enterprise Architecture - TOGAF OverviewEnterprise Architecture - TOGAF Overview
Enterprise Architecture - TOGAF OverviewMohamed Sami El-Tahawy
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
Modeling Big Data with the ArchiMate 3.0 Language
Modeling Big Data with the ArchiMate 3.0 LanguageModeling Big Data with the ArchiMate 3.0 Language
Modeling Big Data with the ArchiMate 3.0 LanguageIver Band
 
Méthodologie 2 Track Unified Process
Méthodologie 2 Track Unified ProcessMéthodologie 2 Track Unified Process
Méthodologie 2 Track Unified ProcessZakaria Bouazza
 
Software Architecture Views and Viewpoints
Software Architecture Views and ViewpointsSoftware Architecture Views and Viewpoints
Software Architecture Views and ViewpointsHenry Muccini
 
Génie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesGénie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesMohammed Amine Mostefai
 
Strategies and Tools for Model Reuse with Capella
Strategies and Tools for Model Reuse with CapellaStrategies and Tools for Model Reuse with Capella
Strategies and Tools for Model Reuse with CapellaObeo
 
Connecting Textual Requirements with Capella Models
Connecting Textual Requirements with Capella Models Connecting Textual Requirements with Capella Models
Connecting Textual Requirements with Capella Models Obeo
 
TOGAF Classroom Series - M1 intro-ea-togaf
TOGAF Classroom Series - M1 intro-ea-togafTOGAF Classroom Series - M1 intro-ea-togaf
TOGAF Classroom Series - M1 intro-ea-togafCuneyt Kaya
 
SOA for Enterprise Architecture
SOA for Enterprise ArchitectureSOA for Enterprise Architecture
SOA for Enterprise ArchitectureYan Zhao
 
Microservices avec Spring Cloud
Microservices avec Spring CloudMicroservices avec Spring Cloud
Microservices avec Spring CloudFlorian Beaufumé
 
Projet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsProjet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsJean-Marc Dupont
 

Tendances (20)

Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
 
6 modeling system requirements
6 modeling system requirements6 modeling system requirements
6 modeling system requirements
 
Introduction to Enterprise Architecture
Introduction to Enterprise ArchitectureIntroduction to Enterprise Architecture
Introduction to Enterprise Architecture
 
Audit des systemes d'information
Audit des systemes d'informationAudit des systemes d'information
Audit des systemes d'information
 
Lecture 2: The Concept of Enterprise Architecture
Lecture 2: The Concept of Enterprise ArchitectureLecture 2: The Concept of Enterprise Architecture
Lecture 2: The Concept of Enterprise Architecture
 
A Brief Introduction to Enterprise Architecture
A Brief Introduction to  Enterprise Architecture A Brief Introduction to  Enterprise Architecture
A Brief Introduction to Enterprise Architecture
 
Clean Architecture By Jason Taylor
Clean Architecture By Jason TaylorClean Architecture By Jason Taylor
Clean Architecture By Jason Taylor
 
Rapport PFE ISMAGI SQLI Microsoft
Rapport PFE ISMAGI SQLI MicrosoftRapport PFE ISMAGI SQLI Microsoft
Rapport PFE ISMAGI SQLI Microsoft
 
Enterprise Architecture - TOGAF Overview
Enterprise Architecture - TOGAF OverviewEnterprise Architecture - TOGAF Overview
Enterprise Architecture - TOGAF Overview
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Modeling Big Data with the ArchiMate 3.0 Language
Modeling Big Data with the ArchiMate 3.0 LanguageModeling Big Data with the ArchiMate 3.0 Language
Modeling Big Data with the ArchiMate 3.0 Language
 
Méthodologie 2 Track Unified Process
Méthodologie 2 Track Unified ProcessMéthodologie 2 Track Unified Process
Méthodologie 2 Track Unified Process
 
Software Architecture Views and Viewpoints
Software Architecture Views and ViewpointsSoftware Architecture Views and Viewpoints
Software Architecture Views and Viewpoints
 
Génie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesGénie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architectures
 
Strategies and Tools for Model Reuse with Capella
Strategies and Tools for Model Reuse with CapellaStrategies and Tools for Model Reuse with Capella
Strategies and Tools for Model Reuse with Capella
 
Connecting Textual Requirements with Capella Models
Connecting Textual Requirements with Capella Models Connecting Textual Requirements with Capella Models
Connecting Textual Requirements with Capella Models
 
TOGAF Classroom Series - M1 intro-ea-togaf
TOGAF Classroom Series - M1 intro-ea-togafTOGAF Classroom Series - M1 intro-ea-togaf
TOGAF Classroom Series - M1 intro-ea-togaf
 
SOA for Enterprise Architecture
SOA for Enterprise ArchitectureSOA for Enterprise Architecture
SOA for Enterprise Architecture
 
Microservices avec Spring Cloud
Microservices avec Spring CloudMicroservices avec Spring Cloud
Microservices avec Spring Cloud
 
Projet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsProjet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoins
 

Similaire à Software architecture, methodologies and design

Simon Brown: Software Architecture as Code at I T.A.K.E. Unconference 2015
Simon Brown: Software Architecture as Code at I T.A.K.E. Unconference 2015Simon Brown: Software Architecture as Code at I T.A.K.E. Unconference 2015
Simon Brown: Software Architecture as Code at I T.A.K.E. Unconference 2015Mozaic Works
 
Introduction to SOFTWARE ARCHITECTURE
Introduction to SOFTWARE ARCHITECTUREIntroduction to SOFTWARE ARCHITECTURE
Introduction to SOFTWARE ARCHITECTUREIvano Malavolta
 
Best Practices Building Cloud Scale Apps with Microservices
Best Practices Building Cloud Scale Apps with MicroservicesBest Practices Building Cloud Scale Apps with Microservices
Best Practices Building Cloud Scale Apps with MicroservicesJim (张建军) Zhang
 
agile architecture - two hour presentation - two worked examples
agile architecture  - two hour presentation - two worked examplesagile architecture  - two hour presentation - two worked examples
agile architecture - two hour presentation - two worked examplesMark Collins-Cope
 
Cc unit 2 ppt
Cc unit 2 pptCc unit 2 ppt
Cc unit 2 pptDr VISU P
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservicesAnil Allewar
 
The REMICS model-driven process for migrating legacy applications to the cloud
The REMICS model-driven process for migrating legacy applications to the cloudThe REMICS model-driven process for migrating legacy applications to the cloud
The REMICS model-driven process for migrating legacy applications to the cloudMarcos Almeida
 
System Architect and Rhapsody
System Architect and RhapsodySystem Architect and Rhapsody
System Architect and RhapsodyMartin Owen
 
Software architecture-patterns
Software architecture-patternsSoftware architecture-patterns
Software architecture-patternspedro
 
Software arquitectura patron diseño
Software arquitectura patron diseñoSoftware arquitectura patron diseño
Software arquitectura patron diseñopedro
 
software-architecture-patterns
software-architecture-patternssoftware-architecture-patterns
software-architecture-patternsPallav Kumar
 
Systems architecting experience
Systems architecting experienceSystems architecting experience
Systems architecting experienceAlexander SAMARIN
 
Better application architecture with #microservices and #BPM (as APaaS)
Better application architecture with #microservices and #BPM (as APaaS)Better application architecture with #microservices and #BPM (as APaaS)
Better application architecture with #microservices and #BPM (as APaaS)Alexander SAMARIN
 
WebSphere Message Broker Application Development Training
WebSphere Message Broker Application Development TrainingWebSphere Message Broker Application Development Training
WebSphere Message Broker Application Development TrainingVijaya Raghava Vuligundam
 
Essay On Workplace Telecommunications
Essay On Workplace TelecommunicationsEssay On Workplace Telecommunications
Essay On Workplace TelecommunicationsJennifer Campbell
 
Cloud Computing Course Overview
Cloud Computing Course OverviewCloud Computing Course Overview
Cloud Computing Course OverviewAshraf Ali
 
[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLESIvano Malavolta
 

Similaire à Software architecture, methodologies and design (20)

Simon Brown: Software Architecture as Code at I T.A.K.E. Unconference 2015
Simon Brown: Software Architecture as Code at I T.A.K.E. Unconference 2015Simon Brown: Software Architecture as Code at I T.A.K.E. Unconference 2015
Simon Brown: Software Architecture as Code at I T.A.K.E. Unconference 2015
 
Introduction to SOFTWARE ARCHITECTURE
Introduction to SOFTWARE ARCHITECTUREIntroduction to SOFTWARE ARCHITECTURE
Introduction to SOFTWARE ARCHITECTURE
 
Best Practices Building Cloud Scale Apps with Microservices
Best Practices Building Cloud Scale Apps with MicroservicesBest Practices Building Cloud Scale Apps with Microservices
Best Practices Building Cloud Scale Apps with Microservices
 
The Trinity Architecture
The Trinity ArchitectureThe Trinity Architecture
The Trinity Architecture
 
agile architecture - two hour presentation - two worked examples
agile architecture  - two hour presentation - two worked examplesagile architecture  - two hour presentation - two worked examples
agile architecture - two hour presentation - two worked examples
 
L02 Architecture
L02 ArchitectureL02 Architecture
L02 Architecture
 
Cc unit 2 ppt
Cc unit 2 pptCc unit 2 ppt
Cc unit 2 ppt
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
The REMICS model-driven process for migrating legacy applications to the cloud
The REMICS model-driven process for migrating legacy applications to the cloudThe REMICS model-driven process for migrating legacy applications to the cloud
The REMICS model-driven process for migrating legacy applications to the cloud
 
System Architect and Rhapsody
System Architect and RhapsodySystem Architect and Rhapsody
System Architect and Rhapsody
 
Software architecture-patterns
Software architecture-patternsSoftware architecture-patterns
Software architecture-patterns
 
Software arquitectura patron diseño
Software arquitectura patron diseñoSoftware arquitectura patron diseño
Software arquitectura patron diseño
 
software-architecture-patterns
software-architecture-patternssoftware-architecture-patterns
software-architecture-patterns
 
Systems architecting experience
Systems architecting experienceSystems architecting experience
Systems architecting experience
 
Better application architecture with #microservices and #BPM (as APaaS)
Better application architecture with #microservices and #BPM (as APaaS)Better application architecture with #microservices and #BPM (as APaaS)
Better application architecture with #microservices and #BPM (as APaaS)
 
WebSphere Message Broker Application Development Training
WebSphere Message Broker Application Development TrainingWebSphere Message Broker Application Development Training
WebSphere Message Broker Application Development Training
 
Essay On Workplace Telecommunications
Essay On Workplace TelecommunicationsEssay On Workplace Telecommunications
Essay On Workplace Telecommunications
 
Cloud Computing Course Overview
Cloud Computing Course OverviewCloud Computing Course Overview
Cloud Computing Course Overview
 
[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES
 
Explicit architecture
Explicit architectureExplicit architecture
Explicit architecture
 

Dernier

Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfIdiosysTechnologies1
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 

Dernier (20)

Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdf
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 

Software architecture, methodologies and design

  • 1. Agenda: - Software architecture overview - Software development methodologies overview - Design and modeling principles overview - Architectural patterns overview - Q and A
  • 3. The highest possible concept of a software system in its environment ... Martin Fowler: https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
  • 4. The highest level concept of the expert developers ... Martin Fowler: https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
  • 5. I define architecture as a word we use when we want to talk about design but want to puff it up to make it sound important. Martin Fowler: https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
  • 6. Architecture is about the important stuff. Whatever that is!!! Ralph Johnson
  • 7. It is not architecture if there is no boxes and lines ... Simon Brown
  • 8. “Cargo - cult”: ritual way of doing stuff without deeper (or any) understanding - just because it’s cool and trendy https://en.wikipedia.org/wiki/Cargo_cult_programming
  • 9. Side by side comparison and analogy with C4 software and architecture visualisation system (by Simon Brown)
  • 10. C4 visualisation of architecture: http://static.codingthearchitecture.com/c4.pdf C1 zoom level: Software Context - Users interacting with the system - System in center surrounded by users to describe context in which system is used - Broader picture which non tech people can understand
  • 11. C4 visualisation of architecture: http://static.codingthearchitecture.com/c4.pdf C1 zoom level: Software Context C2 zoom level: Containers - Illustration of high level tech choices in which system runs, such as: - Web applications - Web services - System services - Databases, file systems, etc...
  • 12. C4 visualisation of architecture: http://static.codingthearchitecture.com/c4.pdf C1 zoom level: Software Context C3 zoom level: Components - Major structural building blocks contained within container - Component: an encapsulated unit of software that has a well defined interface and a clear and concise role and responsibility statement C2 zoom level: Containers
  • 13. C4 visualisation of architecture: http://static.codingthearchitecture.com/c4.pdf C1 zoom level: Software Context C4 zoom level: Classes or Code - Can be visualized with UML or whatever it makes sense C2 zoom level: Containers C3 zoom level: Components
  • 14. Comparing C4 to abstract/conceptual design and architectural concept C1: Context C2: Containers C3: Components C4: Classes Software System visualisation Software Architecture and Design on conceptual abstract level - zoom level matches? ?
  • 15. Comparing C4 to abstract/conceptual design and architectural concept C1: Context C2: Containers C3: Components C4: Classes C1: Architectural Context - Set of targeted quality attributes expected from a system - Also known as “itties” - scalability, maintanability, testability ... - Usually three primary (must have) and three secondary (nice to have) - https://en.wikipedia.org/wiki/List_of_system_quality_ attributes -
  • 16. accessibility evolvability repeatability accountability extensibility reproducibility accuracy failure transparency resilience adaptability fault-tolerance responsiveness administrability fidelity reusability affordability flexibility robustness agility inspectability safety auditability installability scalability autonomy integrity seamlessness availability interchangeability self-sustainability compatibility interoperability serviceability composability learnability supportability configurability maintainability securability correctness manageability simplicity credibility mobility stability customizability modifiability standards compliance debugability modularity survivability degradability operability sustainability determinability orthogonality tailorability demonstrability portability testability dependability precision timeliness deployability predictability traceability discoverability process capabilities transparency distributability producibility ubiquity durability provability understandability effectiveness recoverability upgradability efficiency relevance usability
  • 17. - "over time we are expecting the entire company to use this system" - ? - "the budget and timeframe for this system is very, very tight" - ? - "we need lightning-fast response time to keep up with the backlog of calls" - ? - "we are planning to acquire several businesses in the next 5 years" - ?
  • 18. - "over time we are expecting the entire company to use this system" - scalability - "the budget and timeframe for this system is very, very tight" - feasibility - "we need lightning-fast response time to keep up with the backlog of calls" - performance - "we are planning to acquire several businesses in the next 5 years" - extensibility, agility, maintainability
  • 19. Enterprise software or Line of Business software common architectural contexts: - Reliability (or less fragility) - Testability - Flexibility (or less rigidity) - Reusability and modularity - Maintainability - stability, analyzability, readability, changeability, testability
  • 20. Consequences of ignoring architectural context and quality attributes
  • 21. Comparing C4 to abstract/conceptual design and architectural concept C1: Context C2: Containers C3: Components C4: Classes C2: Architectural patterns/style classification - Big Ball of Mud - Monolithic: Layered, Microkernel, Pipeline... - Distributed: Event-driven, Space-based, Service-oriented, Service-based, Microservices... - Hybrids: Event-driven layered, Layered-microkernel, many, many different combination… - Highly specialized architecture: LMAX
  • 22. Big Ball of Mud - absence of any perceivable architecture
  • 23. Layered architecture - Separation of Concerns - Cross cutting concerns? - Open or closed layers? - Service Layer? - Physical Tiers and scalability? - Vertical decomposition strategies? (functional, velocity of change, bounded context, CQRS ...)
  • 24. Microkernel (plug-in) architecture - Core - minimal logic to run the system and business logic - Plug in - standalone independent module with additional logic - Example - claims processing, each state with own plug in - modern browsers implementations - Business applications
  • 25. Event-driven architecture - Broker topology - message queue - vs - Mediator topology - series of parallel events - Transaction problem - Delphi Corba
  • 26. Pipeline architecture - Self contained and independent from other filters - Designed to perform single task - Four types of filters - Example: Captures data from different sources and multiple formats and, process them and sends them to output
  • 27. Space-based architecture - Separate, independent, scalable processing units - Middleware manages: input and sessions, data replication, distributed request processing, dynamic deployment - Commercial implementations: javaspaces, gigaspaces, ibm object grid, oracle coherence… - All about variable scalability (variable load or inconsistent peak times) - Not good for traditional relational db systems and complex and expensive
  • 28. Microservices architecture - Distributed - Protocol aware heterogeneous interoperability (Java, .net, python, etc) - Separately deployed - Service components (functional services, infrastructure services, messaging services) - Bounded context (common, ubiquitous language ) - Data domains (no acid transactions, replication or nosql) - Api layer (http or lightweight messaging) - Event driven or pipeline
  • 29. Service-oriented architecture - Distributed: Protocol agnostic heterogeneous interoperability - Contract decoupling - Integration server (integrability, b2b) - Good for large organizations with lots of legacy systems - Commercial implementations: MS BizTalk, IBM WebSphere
  • 30. Service-based architecture - let’s find some middle ground between SOA and Microservices
  • 31. Service-based architecture Advantages: - Unit of Work transactional context - Performance and robustness (joins, orchestration) - Domain scope - Shared resources - Feasibility Tradeoffs: - Service deployment and testing - Deployment pipeline planning - Change control - Bounded context - Couplings, schema changes
  • 32. Service-based architecture - transition to microservices
  • 33. Service-based architecture - transition to microservices
  • 34. Service-based architecture - transition to microservices
  • 35. Comparing C4 to abstract/conceptual design and architectural concept C1: Context C2: Containers C3: Components C4: Classes C3: Architectural Patterns - Transactional script - Active Record and Data Mapper - Data Repositories and Units of Work - Domain Models - Model View Whatever (MVC, MVP, MVVP, …)
  • 36. Comparing C4 to abstract/conceptual design and architectural concept C1: Context C2: Containers C3: Components C4: Classes C4: Design patterns - Creational: Factory, Abstract Factory, Dependency Injection, Singletons, etc... - Structural: Adapter, Proxy, Facade, Manager, Composite, Decorator, etc... - Behavioral: Command, Iterator, Mediator, Strategy, ... - Concurrency: Thread-pool, Lock, Join, Double-check locking, etc... - Lots of criticism and lots of cargo-cult - https://gist.github.com/jaysonrowe/1592775 vs https://github.com/EnterpriseQualityCoding/FizzBuzzE nterpriseEdition -
  • 38. module 1. Database First (bottom-up) db module module module ui - Most common methodology - strong emphasis on database design - Starts with modeling your storage device schema - Relational database is optimized for easy or optimized general purpose querying not for actual solution - Awkward object models of actual solution (domain) - impedance mismatch problem
  • 39. 2. DDD: Domain-driven development (top-down) db repositories ui Domain model - DDD starts with development of domain model first. - Domain model is object oriented (in-memory) model of solution of your problem (business object model) - Developed without second thought how data should be persisted - db schema is modeled at the end, after the domain, domain is persistence ignorant, - don’t know and even don’t care anything about db schema - db model derives from domain schema and it is modeled to accommodate domain object model persistence - Repository pattern is used to communicate to database (object are put to and retrieved from repositories) - Test Driven Development - TDD - can be applied from start! view models
  • 40. 3. TDD: Test-driven development RED GREEN REFACTOR 1. Write a failing test - red 2. Write just enough code to make your failing test pass - green 3. Refactor your code to make it better - apply modeling principles or project guidelines and standards - your test is red again 4. Repeat everything until results are satisfactory
  • 42. Low coupling and High cohesion - Coupling: extent to which components know about each other - Types of coupling: - Afferent - A, B and C are coupled to D - Efferent - A is coupled to B, C and D - Temporal - timing dependencies like transaction A B C A B C
  • 43. Low coupling and High cohesion - Coupling: extent to which components know about each other - Degrees of coupling: 1) Tight coupling (pathological coupling) - depending on inner workings of component or system 2) External coupling - components share externally imposed protocol (rest, soap) 3) Control coupling - one component passes info to others what to do 4) Loose coupling - data coupling - components are bound to shared data context A B C A B C
  • 44. Low coupling and High cohesion
  • 45. Low coupling and High cohesion - Cohesion: 1) Degree to which the components belong together, suggestion is all the related code should be close to each other 2) How clear is component responsibility: https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition/tre e/master/src/main/java/com/seriouscompany/business/java/fizzbuzz/pack agenamingpackage/impl/stringreturners
  • 46. GOF: Program to an interface - not to implementation - Classes should aware only of interface and not of implementation - It means your code should operate on interfaces rather than concrete objects with concrete implementation - We should avoid pathological coupling - depending on inner workings of component or system - Makes your code much more flexible interface Impl. 1. Impl. 2. Impl. N. Client code
  • 47. GOF: Favor composition to inheritance - Derived is tightly coupled to base - they are in “is a” relationship - Base class exposes it’s private parts to derived - breaks encapsulation - Composition is “has a” relationship - it can be replaced any time - it is much more loosely coupled. base derived Composed (owned) Composer (owner)
  • 48. S.O.L.I.D. principles When applied together, it is more likely that a programmer will create a system that is easy to maintain and extend over time. - SRP, OCP, LSP, ISP, DIP - Robert C. Martin, aka Uncle Bob
  • 49. SRP - Single Responsibility Principle - A class should have only ONE reason to change or ONE, single, and CLEAR responsibility! - Methods have intent or intention, classes have responsibility! responsibility intent
  • 50. SRP - Single Responsibility Principle - Responsibility = reason to change (not being bugfix or refactoring) - Responsibility = it is an axis of change. - If there are more than one reason to change, more than one motive to change or it changes on different occasion for different reason - violates SRP - Things that change for same reasons belong into same class! - Each of those responsibilities could change from different reason in different time - and on every single change we have to deal with each and every piece of code of ALL of those responsibilities. - That reeks on rigidity - harder to change! - Also reeks on fragility - that change can cause undesired behavior on unexpected places!
  • 51. SRP - Single Responsibility Principle - Textbook example: - We need to calculate some value using certain algorithm using some values stored in database - How many responsibilites are there?
  • 52. SRP - Single Responsibility Principle - Textbook example 2: - We have two separate and different views that will be showing same data using same query: View A View B Query X Query X OR? View A View B Query X Changeability, agility? Fragility, changeability, testability, analyzability, stability?
  • 53. SRP - Single Responsibility Principle - Uncle Bob: Axis of change is only if change actually happens. Small, over-fragmented classes smell on needless complexity and lack of cohesion! - Java FizzBuzz enterprise example of needless complexity and lack of cohesion - Classes can and should do different things if they all lay on same axis of change. On the other hand… - The “god object” or the “monster object” is offensive anti-pattern - class that has too many functionalities implemented, like a swiss knife. - When something breaks, and it will, you might lose your entire toolset.
  • 54. SRP - Single Responsibility Principle
  • 55. SRP - Single Responsibility Principle - The right balance between needles complexity and violation of SRP: - Experience - Feedback from domain expert - Class-responsibility-collaboration card or CRC cards in design process
  • 56. OCP - Open-Closed Principle - Software entities (modules, classes, functions) - should be open for extension and closed for modifications - OR: 1) Code is opened to extension 2) Code is closed for modifications - No code lives in total isolation - complete decoupling is not possible. - So, when change happens, and it will - it may cascade through dependent modules and cause undesired behaviour. We want to prevent fragility.
  • 57. OCP - Open-Closed Principle - Abstraction is the key for this principle. - To be able to make class extendable with new code, abstraction is used - we just insert layer of abstraction between code we want to protect from changes and the calling code. - Textbook example: - Geometrical drawing application. Drawing different geometrical shapes on screen - square, circle, rectangle, triangle …
  • 58. OCP - Open-Closed Principle So, can we close all code for changes?
  • 59. OCP - Open-Closed Principle - Trying to close all closures is offensive anti-pattern - over-engineering. - Since, we cannot and should not close all closures - closures need to be strategic - strategic closure! - Example - calling function to determine is service available
  • 60. SRP - Single Responsibility Principle - How can we detect strategic closures? - Experience - Feedback from domain expert - CRC cards and upright design process
  • 61. - Design pattern examples that allows us closing code for modifications: - Facade design pattern - simplified interface for larger body of code such as service or library - Proxy design pattern - interface for something else - Adapter design pattern - allows some interface to be used as another interface SRP - Single Responsibility Principle
  • 62. SRP - Single Responsibility Principle
  • 63. LSP - Liskov Substitution Principle - Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it. - Wants to tell us something important about inheritance: - Object instance from base and derived classes must be replaceable! - Inheritance should be “is substitution for” instead of “is” relation
  • 64. LSP - Liskov Substitution Principle - Breaking the LSP will also break an OCP principle - If introduce derived class, for which we need to modify calling code - that modification can easily cascade through system and dependent modules bringing unwanted undesired behaviour and errors. - If we use “is instance” type operators to form conditional statements - that is strong indication of LSP violation - and, OCP is also violated where that type operator is used!
  • 65. LSP - Liskov Substitution Principle Square + SetWidth() + SetHeight() + CalcArea() Rectangle + SetWidth() + SetHeight() + CalcArea() OR? Rectangle + SetWidth() + SetHeight() + CalcArea() Square + SetSide() Calculable Area (abstract) + CalcArea()
  • 66. LSP - Liskov Substitution Principle
  • 67. ISP - Interface Segregation Principle - Clients should NOT be forced to depend upon interfaces that they do not use! - This principle deals with disadvantages of having so called “fat” interfaces”. - We don’t want “fat” interfaces! We want only what we use! - No-one should be forced to depend on what it doesn’t use!
  • 68. ISP - Interface Segregation Principle - Same basic idea as SRP but from different angle: - Unlike SRP which states that each module should have one responsibility - ISP is tells us not to be confronted with something that you might not actually need.
  • 69. ISP - Interface Segregation Principle
  • 70. DIP - Dependency Inversion Principle a) High level modules should NOT depend on low level modules. Both should depend on abstraction. b) Abstraction should NOT depend upon details. Details should depend upon abstraction.
  • 71. DIP - Dependency Inversion Principle - Same basic idea as OCP, but, it tells us exactly what our strategic closure should be - module level - Between modules there should be layer of abstraction upon both modules depend, rather on each other directly. - This is the principle that is at the very heart of frameworks design.
  • 72. DIP - Dependency Inversion Principle - And in case of enterprise architecture - that is exactly what we are trying to accomplish - to create framework for our enterprise or business! - It is at the root of many of the benefits claimed for object-oriented technology.
  • 73. DIP - Dependency Inversion Principle Copy Keyboard reader Printer writer - Can you test “copy” without Keyboard reader or Printer writer? - Can you replace Keyboard reader with some custom File reader? - Can you replace Printer writer with with some custom File writer?
  • 74. DIP - Dependency Inversion Principle Copy Reader (abstract) Writer (abstract) Keyboard reader Printer writer - Higher level module - copy - Lower level modules - keyboard reader and printer writer - Abstraction - abstract reader and writer - Details - higher level module and lower level modules - Abstraction doesn’t depend on anyone or anything. - Details depend on abstraction, not on each other - dependency structure is inverted.
  • 75. DIP - Dependency Inversion Principle - Can be used whenever two pieces of code talk to each other - to be able to supply alternative implementation dynamically! - Makes your code reliable, flexible, reusable and maintainable. - Essential part of good design
  • 76. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle - if we use dependency inversion - how that dependency should be supplied to a higher level module or a class? - Also, where are those classes are supposed to be created then?
  • 77. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle Injection: - Property injection (is this abomination?) - Method injection - Constructor injection
  • 78. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle Creation: - Poor man’s DI - default parameters (not really decoupled) - Factory design pattern - Service locator design pattern
  • 79. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle Creation: - Note: - Created dependencies can be really really complex, and have its own complex dependencies and so on… - Those structures are usually called - Structure Maps
  • 80. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle Creation: - Poor man’s DI - default parameters (not really decoupled) - Good to start with, simple structure maps
  • 81. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle Creation: - Factory design pattern, support more complex structure maps Client code Factory Created objects uses >> creates >>
  • 82. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle Creation: - Service Locator design pattern Client code Service locator Service instance ABC Service instance XYZ Service instance 123 uses >>
  • 83. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle Creation: IoC Container - true followers of “Don’t call us, we’ll call you” concept. - Dependency is completely inverted, it is usually bootstrapped at application startup from some kind of configuration file usually. Usually some 3rd party library, but not necessarily. By using an IoC Container, the client code can simply depend on an interface or abstract class and not have a care in the world as to what is providing it with the concrete implementation at runtime.
  • 84. Dependency Injection (DI) and Inversion of Control (IOC) - Hollywood Principle factories service locators configuration / containers main concrete implementations app. services domain objects main / init / global application
  • 85. SOC - Separation of Concerns - Concern - module level - Responsibility - class level - Intent - method level - Concern = Any piece of interest or focus in our program! - We can or we should focus our attention on one focus or one aspect at the time. concern responsibility intent
  • 86. SOC - Separation of Concerns storage device Your code ui device storage device ui device ui device concern Your app logic Storage concern Presentation / UI layer Business / Domain layer Persistence / Data Access layer Database layer ui
  • 87. SOC - Separation of Concerns Persistence / Data Access layer - Relations models - Repositories, Units of Works, Query Builders - ORM’s and Queries Presentation / UI layer View Models Business / Domain layer - Domain models, domain entities, value objects, factories, processors and managers - Loose coupled with pub/subs Database layer - Conways law - Schema changes containment and logic duplication - Change management, rate of change, different motivations and deployment - Cross cutting concerns? - Service Layer? - DI between layers? - Service separation and tiers - Vertical decomposition strategies: - Functional - Velocity and value streams - Bounded context - Command and query segregation Service layer Messages, Request/Response models
  • 89. Transactional Script Architectural Pattern - Transactionional Script Strengths - Simple, easy and fast to develop - Suitable for small schemas - Transactionional Script Weaknesses - Hard or impossible to test - Procedural style, no modelling - Hard to compensate schema changes
  • 90. Active Record and Data Mapper - Active Record, Data Mapper and ORM’s - Differences and Strengths - Weaknesses and Impedance Mismatch
  • 91. Active Record, Data Mapper, ORM’s - Is it real abstraction or just mapping? - Vietnam of Computer Science - Some examples of strange manifestations of Impedance Mismatch
  • 92. Domain models, domain modeling and some other architectural patterns - Domain models, Anemic Domain Models, Identity objects, Value objects and Bounded Context - Data Repositories, Aggregate roots - Presentation patterns, Service patterns, etc...
  • 93. Some resources - https://www.thoughtworks.com/ - global consultancy company, anything from them - Neal Ford: http://nealford.com/ - software architecture consultant at thoughtworks, books, videos, lectures and workshops - Martin Fowler, chief scientist at thoughtworks, books, videos, lectures - Juval Löwy, software legend, ceo and founder of IDesign - http://www.idesign.net/ - consultancy, lectures, videos, workshops - Simon Brown - http://simonbrown.je/ consultancy, visualization software, videos, lectures - Many other consultants in the field that offer lectures, books, free videos, etc, like Mark Richards, Dino Esposito, Allen Holub, etc… - Listen to the software architecture radio: http://www.softwarearchitecturerad.io/ Thank you for your attention