SlideShare a Scribd company logo
1 of 23
Download to read offline
Vertical vs Horizontal
Software Architecture
Christian Hujer
CEO / CTO Nelkinda Software Craft Pvt Ltd.
At RubyConf India 2016
1@christianhujer @nelkinda #RubyConfIndia #Ruby 1
Horizontal Software Architecture
Directory structure reflects framework aspects
app/
┣━ controllers/
┣━ helpers/
┣━ models/
┣━ services/
┗━ views/
2@christianhujer @nelkinda #RubyConfIndia #Ruby 2
Why it’s called “horizontal”?
Because the predominant architecture
represents (mostly) “horizontal” layers:
3@christianhujer @nelkinda #RubyConfIndia #Ruby 3
views
helpers
controllers
services
models
Horizontal Architecture Synonyms
Horizontal Architecture
Layered Architecture
n-Tier Architecture
Multitier Architecture
Technical Architecture
4@christianhujer @nelkinda #RubyConfIndia #Ruby 4
Bad Horizontal - Fundamentals
● Cohesion
● Coupling
● Design Smells, Immobility
● Communicating Intent
● CCP - Common Closure Principle
5@christianhujer @nelkinda #RubyConfIndia #Ruby 5
Cohesion
Things that change together are cohesive.
Examples:
● A model, its view and and its controller.
6@christianhujer @nelkinda #RubyConfIndia #Ruby 6
Collocation
Things which are “next” / “close” to each other.
Examples:
● Files in the same directory
● Classes in the same package
7@christianhujer @nelkinda #RubyConfIndia #Ruby 7
The 4 Design Smells (Uncle Bob)
Design smells are the odors of rotting software.
● Rigidity
● Fragility
● Immobility
● Viscosity
8@christianhujer @nelkinda #RubyConfIndia #Ruby 8
Immobility = Inability to Reuse
Reusable =
● Independently deployable
● Independently developable
● Independently testable
● Scalable (i.e. carving out microservices)
⇒ It’s important even if you don’t reuse!
9@christianhujer @nelkinda #RubyConfIndia #Ruby 9
Oh, this is an MVC web application
(Surprise, surprise!)
vs
Oh, this is an event registration system.
Software Architecture
10@christianhujer @nelkinda #RubyConfIndia #Ruby 10
Communicate Intent!
Like every software entity,
the architecture should
communicate its intent,
not its implementation!
11@christianhujer @nelkinda #RubyConfIndia #Ruby 11
CCP: Common Closure Principle
“Classes that change together are packaged
together.”
From the 11 (sic!) “SOLID” principles
Design Principles and Design Patterns (Robert
C. Martin, 2000)
12@christianhujer @nelkinda #RubyConfIndia #Ruby 12
CCP: Cohesion Collocation Principle
Cohesive things should be collocated!
Put things that change together in the same
place!
13@christianhujer @nelkinda #RubyConfIndia #Ruby 13
Vertical Software Architecture
Directory structure reflects business aspects
app/
┣━ attendee/
┣━ event/
┣━ organizer/
┣━ payment/
┗━ subscription/
14@christianhujer @nelkinda #RubyConfIndia #Ruby 14
Vertical Software Architecture
Directory structure reflects business aspects
app/
┣━ booking/
┣━ cleaning/
┣━ guest/
┣━ payment/
┗━ room/
15@christianhujer @nelkinda #RubyConfIndia #Ruby 15
Let’s talk business!
16@christianhujer @nelkinda #RubyConfIndia #Ruby 16
This talks Business!
app/
┣━ car/
┣━ driver/
┣━ insurance/
┣━ rental/
┗━ repair/
17@christianhujer @nelkinda #RubyConfIndia #Ruby 17
This doesn’t talk Business!
app/
┣━ controllers/
┣━ helpers/
┣━ models/
┣━ services/
┗━ views/
18@christianhujer @nelkinda #RubyConfIndia #Ruby 18
MVC is a pattern!
Pattern ≠ Architecture
19@christianhujer @nelkinda #RubyConfIndia #Ruby 19
Architecture /
Directory Structure
Should Reflect
The Business Model
20@christianhujer @nelkinda #RubyConfIndia #Ruby 20
MVC isn’t bad
But…
it shouldn’t dominate you
21@christianhujer @nelkinda #RubyConfIndia #Ruby 21
Vertical Software Architecture
22@christianhujer @nelkinda #RubyConfIndia #Ruby 22
car driver insurance rental repair
Thank you!
Follow me on Twitter
@christianhujer
23@christianhujer @nelkinda #RubyConfIndia #Ruby 23

More Related Content

What's hot

Building APIs with the OpenApi Spec
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi SpecPedro J. Molina
 
OpenAPI Generator The Babel Fish of The API World - apidays Live Paris
OpenAPI Generator The Babel Fish of The API World - apidays Live ParisOpenAPI Generator The Babel Fish of The API World - apidays Live Paris
OpenAPI Generator The Babel Fish of The API World - apidays Live ParisCliffano Subagio
 
Common blind spots on the journey to production vijay raghavan aravamudhan
Common blind spots on the journey to production  vijay raghavan aravamudhanCommon blind spots on the journey to production  vijay raghavan aravamudhan
Common blind spots on the journey to production vijay raghavan aravamudhanXP Conference India
 
Web is the New Mobile: Building Progressive Web Apps - Erica Stanley - Codemo...
Web is the New Mobile: Building Progressive Web Apps - Erica Stanley - Codemo...Web is the New Mobile: Building Progressive Web Apps - Erica Stanley - Codemo...
Web is the New Mobile: Building Progressive Web Apps - Erica Stanley - Codemo...Codemotion
 
0581OS_FM_Final_NT
0581OS_FM_Final_NT0581OS_FM_Final_NT
0581OS_FM_Final_NTVibhor Kumar
 
Anypoint MQ-DLQ NYC Meet Up
Anypoint MQ-DLQ NYC Meet UpAnypoint MQ-DLQ NYC Meet Up
Anypoint MQ-DLQ NYC Meet UpNeerajKumar1965
 
Developing Great Apps with Apache Cordova
Developing Great Apps with Apache CordovaDeveloping Great Apps with Apache Cordova
Developing Great Apps with Apache CordovaShekhar Gulati
 
APIdays 2015 - The State of Web API Languages
APIdays 2015 - The State of Web API LanguagesAPIdays 2015 - The State of Web API Languages
APIdays 2015 - The State of Web API LanguagesJerome Louvel
 
vodQA Pune (2019) - Jenkins pipeline As code
vodQA Pune (2019) - Jenkins pipeline As codevodQA Pune (2019) - Jenkins pipeline As code
vodQA Pune (2019) - Jenkins pipeline As codevodQA
 
Android clean architecture workshop 3h edition
Android clean architecture workshop 3h editionAndroid clean architecture workshop 3h edition
Android clean architecture workshop 3h editionJorge Ortiz
 
Working effectively with OpenShift
Working effectively with OpenShiftWorking effectively with OpenShift
Working effectively with OpenShiftShekhar Gulati
 
Batch Processing with Mule 4
Batch Processing with Mule 4Batch Processing with Mule 4
Batch Processing with Mule 4NeerajKumar1965
 
Microservices, the lean way
Microservices, the lean wayMicroservices, the lean way
Microservices, the lean wayBruno Bossola
 
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali....NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...NETFest
 
Restlet Framework NG
Restlet Framework NGRestlet Framework NG
Restlet Framework NGJerome Louvel
 
Adopt a painless continuous delivery culture, add more business value
Adopt a painless continuous delivery culture, add more business valueAdopt a painless continuous delivery culture, add more business value
Adopt a painless continuous delivery culture, add more business valueGeshan Manandhar
 
#CNX14 - Building Killer Apps - Moving Beyond Transactions to Experiences
#CNX14 - Building Killer Apps - Moving Beyond Transactions to Experiences#CNX14 - Building Killer Apps - Moving Beyond Transactions to Experiences
#CNX14 - Building Killer Apps - Moving Beyond Transactions to ExperiencesSalesforce Marketing Cloud
 
Gradle: One technology to build them all
Gradle: One technology to build them allGradle: One technology to build them all
Gradle: One technology to build them allBonitasoft
 
Continuous integration & Continuous Delivery @DeVz
Continuous integration & Continuous Delivery @DeVzContinuous integration & Continuous Delivery @DeVz
Continuous integration & Continuous Delivery @DeVzDenis Ristic
 

What's hot (20)

Building APIs with the OpenApi Spec
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi Spec
 
OpenAPI Generator The Babel Fish of The API World - apidays Live Paris
OpenAPI Generator The Babel Fish of The API World - apidays Live ParisOpenAPI Generator The Babel Fish of The API World - apidays Live Paris
OpenAPI Generator The Babel Fish of The API World - apidays Live Paris
 
Common blind spots on the journey to production vijay raghavan aravamudhan
Common blind spots on the journey to production  vijay raghavan aravamudhanCommon blind spots on the journey to production  vijay raghavan aravamudhan
Common blind spots on the journey to production vijay raghavan aravamudhan
 
Web is the New Mobile: Building Progressive Web Apps - Erica Stanley - Codemo...
Web is the New Mobile: Building Progressive Web Apps - Erica Stanley - Codemo...Web is the New Mobile: Building Progressive Web Apps - Erica Stanley - Codemo...
Web is the New Mobile: Building Progressive Web Apps - Erica Stanley - Codemo...
 
0581OS_FM_Final_NT
0581OS_FM_Final_NT0581OS_FM_Final_NT
0581OS_FM_Final_NT
 
Hidden Dragons of CGO
Hidden Dragons of CGOHidden Dragons of CGO
Hidden Dragons of CGO
 
Anypoint MQ-DLQ NYC Meet Up
Anypoint MQ-DLQ NYC Meet UpAnypoint MQ-DLQ NYC Meet Up
Anypoint MQ-DLQ NYC Meet Up
 
Developing Great Apps with Apache Cordova
Developing Great Apps with Apache CordovaDeveloping Great Apps with Apache Cordova
Developing Great Apps with Apache Cordova
 
APIdays 2015 - The State of Web API Languages
APIdays 2015 - The State of Web API LanguagesAPIdays 2015 - The State of Web API Languages
APIdays 2015 - The State of Web API Languages
 
vodQA Pune (2019) - Jenkins pipeline As code
vodQA Pune (2019) - Jenkins pipeline As codevodQA Pune (2019) - Jenkins pipeline As code
vodQA Pune (2019) - Jenkins pipeline As code
 
Android clean architecture workshop 3h edition
Android clean architecture workshop 3h editionAndroid clean architecture workshop 3h edition
Android clean architecture workshop 3h edition
 
Working effectively with OpenShift
Working effectively with OpenShiftWorking effectively with OpenShift
Working effectively with OpenShift
 
Batch Processing with Mule 4
Batch Processing with Mule 4Batch Processing with Mule 4
Batch Processing with Mule 4
 
Microservices, the lean way
Microservices, the lean wayMicroservices, the lean way
Microservices, the lean way
 
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali....NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...
 
Restlet Framework NG
Restlet Framework NGRestlet Framework NG
Restlet Framework NG
 
Adopt a painless continuous delivery culture, add more business value
Adopt a painless continuous delivery culture, add more business valueAdopt a painless continuous delivery culture, add more business value
Adopt a painless continuous delivery culture, add more business value
 
#CNX14 - Building Killer Apps - Moving Beyond Transactions to Experiences
#CNX14 - Building Killer Apps - Moving Beyond Transactions to Experiences#CNX14 - Building Killer Apps - Moving Beyond Transactions to Experiences
#CNX14 - Building Killer Apps - Moving Beyond Transactions to Experiences
 
Gradle: One technology to build them all
Gradle: One technology to build them allGradle: One technology to build them all
Gradle: One technology to build them all
 
Continuous integration & Continuous Delivery @DeVz
Continuous integration & Continuous Delivery @DeVzContinuous integration & Continuous Delivery @DeVz
Continuous integration & Continuous Delivery @DeVz
 

Viewers also liked

2016-04-22: Beyond SOLID: The Package Principles
2016-04-22: Beyond SOLID: The Package Principles2016-04-22: Beyond SOLID: The Package Principles
2016-04-22: Beyond SOLID: The Package PrinciplesChristian Hujer
 
Prototyping in Web Software Development
Prototyping in Web Software DevelopmentPrototyping in Web Software Development
Prototyping in Web Software DevelopmentErkki Tapola
 
Microservices - modern software architecture
Microservices - modern software architectureMicroservices - modern software architecture
Microservices - modern software architectureBilguun Bayarmagnai
 
Dynamic system development method
Dynamic system development methodDynamic system development method
Dynamic system development methodion_ion_ion
 
10 adaptive sd_15
10 adaptive sd_1510 adaptive sd_15
10 adaptive sd_15dcsunu
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Developmentdcsunu
 
UCD and low-fidelity prototyping
UCD and low-fidelity prototypingUCD and low-fidelity prototyping
UCD and low-fidelity prototypingsawsan slii
 
Introduction to Extreme Programming
Introduction to Extreme ProgrammingIntroduction to Extreme Programming
Introduction to Extreme ProgrammingNaresh Jain
 
Spiral model : System analysis and design
Spiral model : System analysis and designSpiral model : System analysis and design
Spiral model : System analysis and designMitul Desai
 
User Interface Prototyping Techniques: Low Fidelity Prototyping
User Interface Prototyping Techniques: Low Fidelity PrototypingUser Interface Prototyping Techniques: Low Fidelity Prototyping
User Interface Prototyping Techniques: Low Fidelity PrototypingHans Põldoja
 
Prototype model
Prototype modelPrototype model
Prototype modelsadhana8
 

Viewers also liked (14)

2016-04-22: Beyond SOLID: The Package Principles
2016-04-22: Beyond SOLID: The Package Principles2016-04-22: Beyond SOLID: The Package Principles
2016-04-22: Beyond SOLID: The Package Principles
 
Prototyping in Web Software Development
Prototyping in Web Software DevelopmentPrototyping in Web Software Development
Prototyping in Web Software Development
 
Microservices - modern software architecture
Microservices - modern software architectureMicroservices - modern software architecture
Microservices - modern software architecture
 
Dynamic system development method
Dynamic system development methodDynamic system development method
Dynamic system development method
 
Prototypemodel
PrototypemodelPrototypemodel
Prototypemodel
 
Zahid Asd
Zahid AsdZahid Asd
Zahid Asd
 
10 adaptive sd_15
10 adaptive sd_1510 adaptive sd_15
10 adaptive sd_15
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Development
 
UCD and low-fidelity prototyping
UCD and low-fidelity prototypingUCD and low-fidelity prototyping
UCD and low-fidelity prototyping
 
Introduction to Extreme Programming
Introduction to Extreme ProgrammingIntroduction to Extreme Programming
Introduction to Extreme Programming
 
Spiral model : System analysis and design
Spiral model : System analysis and designSpiral model : System analysis and design
Spiral model : System analysis and design
 
User Interface Prototyping Techniques: Low Fidelity Prototyping
User Interface Prototyping Techniques: Low Fidelity PrototypingUser Interface Prototyping Techniques: Low Fidelity Prototyping
User Interface Prototyping Techniques: Low Fidelity Prototyping
 
Prototype model
Prototype modelPrototype model
Prototype model
 
Prototyping
PrototypingPrototyping
Prototyping
 

Similar to Vertical vs Horizontal Software Architecture

React Native Vs. Flutter: Which Platform to Choose for Cross-Platform App Dev...
React Native Vs. Flutter: Which Platform to Choose for Cross-Platform App Dev...React Native Vs. Flutter: Which Platform to Choose for Cross-Platform App Dev...
React Native Vs. Flutter: Which Platform to Choose for Cross-Platform App Dev...DashTechnologiesInc
 
Rho mobile v4 - DroidCon Paris 18 june 2013
Rho mobile v4 - DroidCon Paris 18 june 2013Rho mobile v4 - DroidCon Paris 18 june 2013
Rho mobile v4 - DroidCon Paris 18 june 2013Paris Android User Group
 
Why Businesses Should Hire React Native Developers to Build the Best Mobile A...
Why Businesses Should Hire React Native Developers to Build the Best Mobile A...Why Businesses Should Hire React Native Developers to Build the Best Mobile A...
Why Businesses Should Hire React Native Developers to Build the Best Mobile A...Noman Shaikh
 
From Microservices to Service Mesh - devcafe event - July 2018
From Microservices to Service Mesh - devcafe event - July 2018From Microservices to Service Mesh - devcafe event - July 2018
From Microservices to Service Mesh - devcafe event - July 2018Thang Chung
 
Why Use Ruby On Rails.pdf
Why Use Ruby On Rails.pdfWhy Use Ruby On Rails.pdf
Why Use Ruby On Rails.pdfKaty Slemon
 
A Complete Guide on How & Why to Hire React Native Developers.pdf
A Complete Guide on How & Why to Hire React Native Developers.pdfA Complete Guide on How & Why to Hire React Native Developers.pdf
A Complete Guide on How & Why to Hire React Native Developers.pdfBOSC Tech Labs
 
【Primer】WebApp release in 3 hours! Programming from scratch Rails course
【Primer】WebApp release in 3 hours! Programming from scratch Rails course【Primer】WebApp release in 3 hours! Programming from scratch Rails course
【Primer】WebApp release in 3 hours! Programming from scratch Rails courseDIVE INTO CODE Corp.
 
Why is React Native the Best Choice for Mobile App Development.pdf
Why is React Native the Best Choice for Mobile App Development.pdfWhy is React Native the Best Choice for Mobile App Development.pdf
Why is React Native the Best Choice for Mobile App Development.pdfTechugo
 
15 Best React Native Developer Tools in 2024.pdf
15 Best React Native Developer Tools in 2024.pdf15 Best React Native Developer Tools in 2024.pdf
15 Best React Native Developer Tools in 2024.pdfinfowindtech570
 
Cost of React Native App Development in 2023.pdf
Cost of React Native App Development in 2023.pdfCost of React Native App Development in 2023.pdf
Cost of React Native App Development in 2023.pdfTechugo
 
Why is ruby on rails worth investing in 2022
Why is ruby on rails worth investing in 2022 Why is ruby on rails worth investing in 2022
Why is ruby on rails worth investing in 2022 rorbitssoftware
 
Key Benefits Of Choosing Ruby On Rails For Your Project - RORBits
Key Benefits Of Choosing Ruby On Rails For Your Project - RORBitsKey Benefits Of Choosing Ruby On Rails For Your Project - RORBits
Key Benefits Of Choosing Ruby On Rails For Your Project - RORBitsrorbitssoftware
 
Refining Your API Design - Architecture and Modeling Learning Event
Refining Your API Design - Architecture and Modeling Learning EventRefining Your API Design - Architecture and Modeling Learning Event
Refining Your API Design - Architecture and Modeling Learning EventLaunchAny
 
Ruby on Rails Development Services
Ruby on Rails Development ServicesRuby on Rails Development Services
Ruby on Rails Development ServicesSpritleSoftware
 
Ruby on Rails Web Development Best Practices and Tips.pdf
Ruby on Rails Web Development Best Practices and Tips.pdfRuby on Rails Web Development Best Practices and Tips.pdf
Ruby on Rails Web Development Best Practices and Tips.pdflubnayasminsebl
 
How to Successfully Find and Hire the Best React Native Developer in 2022.pdf
How to Successfully Find and Hire the Best React Native Developer in 2022.pdfHow to Successfully Find and Hire the Best React Native Developer in 2022.pdf
How to Successfully Find and Hire the Best React Native Developer in 2022.pdfWDP Technologies
 
How react native app is an ideal choice for every start up businesses
How react native app is an ideal choice for every start up businessesHow react native app is an ideal choice for every start up businesses
How react native app is an ideal choice for every start up businessesOrange Mantra
 
Reasons to Pick Ruby on Rails for Web Development Projects!.pdf
Reasons to Pick Ruby on Rails for Web Development Projects!.pdfReasons to Pick Ruby on Rails for Web Development Projects!.pdf
Reasons to Pick Ruby on Rails for Web Development Projects!.pdfShelly Megan
 
8 awesome benefits of ruby on rails application development
8 awesome benefits of ruby on rails application development 8 awesome benefits of ruby on rails application development
8 awesome benefits of ruby on rails application development rorbitssoftware
 

Similar to Vertical vs Horizontal Software Architecture (20)

React Native Vs. Flutter: Which Platform to Choose for Cross-Platform App Dev...
React Native Vs. Flutter: Which Platform to Choose for Cross-Platform App Dev...React Native Vs. Flutter: Which Platform to Choose for Cross-Platform App Dev...
React Native Vs. Flutter: Which Platform to Choose for Cross-Platform App Dev...
 
Rho mobile v4 - DroidCon Paris 18 june 2013
Rho mobile v4 - DroidCon Paris 18 june 2013Rho mobile v4 - DroidCon Paris 18 june 2013
Rho mobile v4 - DroidCon Paris 18 june 2013
 
Why Businesses Should Hire React Native Developers to Build the Best Mobile A...
Why Businesses Should Hire React Native Developers to Build the Best Mobile A...Why Businesses Should Hire React Native Developers to Build the Best Mobile A...
Why Businesses Should Hire React Native Developers to Build the Best Mobile A...
 
From Microservices to Service Mesh - devcafe event - July 2018
From Microservices to Service Mesh - devcafe event - July 2018From Microservices to Service Mesh - devcafe event - July 2018
From Microservices to Service Mesh - devcafe event - July 2018
 
Why Use Ruby On Rails.pdf
Why Use Ruby On Rails.pdfWhy Use Ruby On Rails.pdf
Why Use Ruby On Rails.pdf
 
A Complete Guide on How & Why to Hire React Native Developers.pdf
A Complete Guide on How & Why to Hire React Native Developers.pdfA Complete Guide on How & Why to Hire React Native Developers.pdf
A Complete Guide on How & Why to Hire React Native Developers.pdf
 
【Primer】WebApp release in 3 hours! Programming from scratch Rails course
【Primer】WebApp release in 3 hours! Programming from scratch Rails course【Primer】WebApp release in 3 hours! Programming from scratch Rails course
【Primer】WebApp release in 3 hours! Programming from scratch Rails course
 
Why is React Native the Best Choice for Mobile App Development.pdf
Why is React Native the Best Choice for Mobile App Development.pdfWhy is React Native the Best Choice for Mobile App Development.pdf
Why is React Native the Best Choice for Mobile App Development.pdf
 
15 Best React Native Developer Tools in 2024.pdf
15 Best React Native Developer Tools in 2024.pdf15 Best React Native Developer Tools in 2024.pdf
15 Best React Native Developer Tools in 2024.pdf
 
Cost of React Native App Development in 2023.pdf
Cost of React Native App Development in 2023.pdfCost of React Native App Development in 2023.pdf
Cost of React Native App Development in 2023.pdf
 
Why is ruby on rails worth investing in 2022
Why is ruby on rails worth investing in 2022 Why is ruby on rails worth investing in 2022
Why is ruby on rails worth investing in 2022
 
Key Benefits Of Choosing Ruby On Rails For Your Project - RORBits
Key Benefits Of Choosing Ruby On Rails For Your Project - RORBitsKey Benefits Of Choosing Ruby On Rails For Your Project - RORBits
Key Benefits Of Choosing Ruby On Rails For Your Project - RORBits
 
Ruby on rails api Development case study
Ruby on rails api Development case studyRuby on rails api Development case study
Ruby on rails api Development case study
 
Refining Your API Design - Architecture and Modeling Learning Event
Refining Your API Design - Architecture and Modeling Learning EventRefining Your API Design - Architecture and Modeling Learning Event
Refining Your API Design - Architecture and Modeling Learning Event
 
Ruby on Rails Development Services
Ruby on Rails Development ServicesRuby on Rails Development Services
Ruby on Rails Development Services
 
Ruby on Rails Web Development Best Practices and Tips.pdf
Ruby on Rails Web Development Best Practices and Tips.pdfRuby on Rails Web Development Best Practices and Tips.pdf
Ruby on Rails Web Development Best Practices and Tips.pdf
 
How to Successfully Find and Hire the Best React Native Developer in 2022.pdf
How to Successfully Find and Hire the Best React Native Developer in 2022.pdfHow to Successfully Find and Hire the Best React Native Developer in 2022.pdf
How to Successfully Find and Hire the Best React Native Developer in 2022.pdf
 
How react native app is an ideal choice for every start up businesses
How react native app is an ideal choice for every start up businessesHow react native app is an ideal choice for every start up businesses
How react native app is an ideal choice for every start up businesses
 
Reasons to Pick Ruby on Rails for Web Development Projects!.pdf
Reasons to Pick Ruby on Rails for Web Development Projects!.pdfReasons to Pick Ruby on Rails for Web Development Projects!.pdf
Reasons to Pick Ruby on Rails for Web Development Projects!.pdf
 
8 awesome benefits of ruby on rails application development
8 awesome benefits of ruby on rails application development 8 awesome benefits of ruby on rails application development
8 awesome benefits of ruby on rails application development
 

More from Christian Hujer

How to improve your skills and how to apply for a job
How to improve your skills and how to apply for a jobHow to improve your skills and how to apply for a job
How to improve your skills and how to apply for a jobChristian Hujer
 
Extreme Programming 2018 — Agile Beyond Scrum
Extreme Programming 2018 — Agile Beyond ScrumExtreme Programming 2018 — Agile Beyond Scrum
Extreme Programming 2018 — Agile Beyond ScrumChristian Hujer
 
2016 10-04: tdd++: tdd made easier
2016 10-04: tdd++: tdd made easier2016 10-04: tdd++: tdd made easier
2016 10-04: tdd++: tdd made easierChristian Hujer
 
The “transformation priority premise”
The “transformation priority premise”The “transformation priority premise”
The “transformation priority premise”Christian Hujer
 

More from Christian Hujer (6)

How to improve your skills and how to apply for a job
How to improve your skills and how to apply for a jobHow to improve your skills and how to apply for a job
How to improve your skills and how to apply for a job
 
Escaping the matrix
Escaping the matrixEscaping the matrix
Escaping the matrix
 
Extreme Programming 2018 — Agile Beyond Scrum
Extreme Programming 2018 — Agile Beyond ScrumExtreme Programming 2018 — Agile Beyond Scrum
Extreme Programming 2018 — Agile Beyond Scrum
 
2016 10-04: tdd++: tdd made easier
2016 10-04: tdd++: tdd made easier2016 10-04: tdd++: tdd made easier
2016 10-04: tdd++: tdd made easier
 
The “transformation priority premise”
The “transformation priority premise”The “transformation priority premise”
The “transformation priority premise”
 
Functional programming
Functional programmingFunctional programming
Functional programming
 

Recently uploaded

chaitra-1.pptx fake news detection using machine learning
chaitra-1.pptx  fake news detection using machine learningchaitra-1.pptx  fake news detection using machine learning
chaitra-1.pptx fake news detection using machine learningmisbanausheenparvam
 
microprocessor 8085 and its interfacing
microprocessor 8085  and its interfacingmicroprocessor 8085  and its interfacing
microprocessor 8085 and its interfacingjaychoudhary37
 
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSAPPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSKurinjimalarL3
 
power system scada applications and uses
power system scada applications and usespower system scada applications and uses
power system scada applications and usesDevarapalliHaritha
 
Internship report on mechanical engineering
Internship report on mechanical engineeringInternship report on mechanical engineering
Internship report on mechanical engineeringmalavadedarshan25
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024hassan khalil
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )Tsuyoshi Horigome
 
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...VICTOR MAESTRE RAMIREZ
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escortsranjana rawat
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130Suhani Kapoor
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...VICTOR MAESTRE RAMIREZ
 
Biology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxBiology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxDeepakSakkari2
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxPoojaBan
 
HARMONY IN THE HUMAN BEING - Unit-II UHV-2
HARMONY IN THE HUMAN BEING - Unit-II UHV-2HARMONY IN THE HUMAN BEING - Unit-II UHV-2
HARMONY IN THE HUMAN BEING - Unit-II UHV-2RajaP95
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
What are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxWhat are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxwendy cai
 

Recently uploaded (20)

chaitra-1.pptx fake news detection using machine learning
chaitra-1.pptx  fake news detection using machine learningchaitra-1.pptx  fake news detection using machine learning
chaitra-1.pptx fake news detection using machine learning
 
microprocessor 8085 and its interfacing
microprocessor 8085  and its interfacingmicroprocessor 8085  and its interfacing
microprocessor 8085 and its interfacing
 
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSAPPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
 
power system scada applications and uses
power system scada applications and usespower system scada applications and uses
power system scada applications and uses
 
Internship report on mechanical engineering
Internship report on mechanical engineeringInternship report on mechanical engineering
Internship report on mechanical engineering
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )
 
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
VICTOR MAESTRE RAMIREZ - Planetary Defender on NASA's Double Asteroid Redirec...
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...
 
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptxExploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
 
Biology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxBiology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptx
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptx
 
HARMONY IN THE HUMAN BEING - Unit-II UHV-2
HARMONY IN THE HUMAN BEING - Unit-II UHV-2HARMONY IN THE HUMAN BEING - Unit-II UHV-2
HARMONY IN THE HUMAN BEING - Unit-II UHV-2
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
 
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCRCall Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
Call Us -/9953056974- Call Girls In Vikaspuri-/- Delhi NCR
 
What are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxWhat are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptx
 

Vertical vs Horizontal Software Architecture

  • 1. Vertical vs Horizontal Software Architecture Christian Hujer CEO / CTO Nelkinda Software Craft Pvt Ltd. At RubyConf India 2016 1@christianhujer @nelkinda #RubyConfIndia #Ruby 1
  • 2. Horizontal Software Architecture Directory structure reflects framework aspects app/ ┣━ controllers/ ┣━ helpers/ ┣━ models/ ┣━ services/ ┗━ views/ 2@christianhujer @nelkinda #RubyConfIndia #Ruby 2
  • 3. Why it’s called “horizontal”? Because the predominant architecture represents (mostly) “horizontal” layers: 3@christianhujer @nelkinda #RubyConfIndia #Ruby 3 views helpers controllers services models
  • 4. Horizontal Architecture Synonyms Horizontal Architecture Layered Architecture n-Tier Architecture Multitier Architecture Technical Architecture 4@christianhujer @nelkinda #RubyConfIndia #Ruby 4
  • 5. Bad Horizontal - Fundamentals ● Cohesion ● Coupling ● Design Smells, Immobility ● Communicating Intent ● CCP - Common Closure Principle 5@christianhujer @nelkinda #RubyConfIndia #Ruby 5
  • 6. Cohesion Things that change together are cohesive. Examples: ● A model, its view and and its controller. 6@christianhujer @nelkinda #RubyConfIndia #Ruby 6
  • 7. Collocation Things which are “next” / “close” to each other. Examples: ● Files in the same directory ● Classes in the same package 7@christianhujer @nelkinda #RubyConfIndia #Ruby 7
  • 8. The 4 Design Smells (Uncle Bob) Design smells are the odors of rotting software. ● Rigidity ● Fragility ● Immobility ● Viscosity 8@christianhujer @nelkinda #RubyConfIndia #Ruby 8
  • 9. Immobility = Inability to Reuse Reusable = ● Independently deployable ● Independently developable ● Independently testable ● Scalable (i.e. carving out microservices) ⇒ It’s important even if you don’t reuse! 9@christianhujer @nelkinda #RubyConfIndia #Ruby 9
  • 10. Oh, this is an MVC web application (Surprise, surprise!) vs Oh, this is an event registration system. Software Architecture 10@christianhujer @nelkinda #RubyConfIndia #Ruby 10
  • 11. Communicate Intent! Like every software entity, the architecture should communicate its intent, not its implementation! 11@christianhujer @nelkinda #RubyConfIndia #Ruby 11
  • 12. CCP: Common Closure Principle “Classes that change together are packaged together.” From the 11 (sic!) “SOLID” principles Design Principles and Design Patterns (Robert C. Martin, 2000) 12@christianhujer @nelkinda #RubyConfIndia #Ruby 12
  • 13. CCP: Cohesion Collocation Principle Cohesive things should be collocated! Put things that change together in the same place! 13@christianhujer @nelkinda #RubyConfIndia #Ruby 13
  • 14. Vertical Software Architecture Directory structure reflects business aspects app/ ┣━ attendee/ ┣━ event/ ┣━ organizer/ ┣━ payment/ ┗━ subscription/ 14@christianhujer @nelkinda #RubyConfIndia #Ruby 14
  • 15. Vertical Software Architecture Directory structure reflects business aspects app/ ┣━ booking/ ┣━ cleaning/ ┣━ guest/ ┣━ payment/ ┗━ room/ 15@christianhujer @nelkinda #RubyConfIndia #Ruby 15
  • 16. Let’s talk business! 16@christianhujer @nelkinda #RubyConfIndia #Ruby 16
  • 17. This talks Business! app/ ┣━ car/ ┣━ driver/ ┣━ insurance/ ┣━ rental/ ┗━ repair/ 17@christianhujer @nelkinda #RubyConfIndia #Ruby 17
  • 18. This doesn’t talk Business! app/ ┣━ controllers/ ┣━ helpers/ ┣━ models/ ┣━ services/ ┗━ views/ 18@christianhujer @nelkinda #RubyConfIndia #Ruby 18
  • 19. MVC is a pattern! Pattern ≠ Architecture 19@christianhujer @nelkinda #RubyConfIndia #Ruby 19
  • 20. Architecture / Directory Structure Should Reflect The Business Model 20@christianhujer @nelkinda #RubyConfIndia #Ruby 20
  • 21. MVC isn’t bad But… it shouldn’t dominate you 21@christianhujer @nelkinda #RubyConfIndia #Ruby 21
  • 22. Vertical Software Architecture 22@christianhujer @nelkinda #RubyConfIndia #Ruby 22 car driver insurance rental repair
  • 23. Thank you! Follow me on Twitter @christianhujer 23@christianhujer @nelkinda #RubyConfIndia #Ruby 23