philosophical architecture in grails
DESCRIPTION
Speaker: David Dawson Software development is hard. Life is hard. We try to keep up with a changing world, and it's hard. Where though, does the problem lie? In this talk, David, CEO at Simplicity Itself, will describe a different way of approaching the problem of software development, a different way of trying to keep up with a changing world. This is not a soft talk, all opinions are backed up by cold hard code in a running Grails application, showing how a change in the way you think can radically change your software.TRANSCRIPT
Philosophical Architecture
(in Grails)
Philosophical Architecture
(in Grails)
David DawsonDavid Dawson
CEO @ Simplicity ItselfCEO @ Simplicity Itself
@davidthecoder@SimplicityItse1
@davidthecoder@SimplicityItse1
What is Architecture?
What is Architecture?
Architecturevs
Design
Architecturevs
Design
Limitless OptionsFor Design
Limitless OptionsFor Design
Only a few ArchitecturesOnly a few
Architectures
Grails' 'default'Architecture
Grails' 'default'Architecture
Grails' 'default'Architecture
N-Tier
Grails' 'default'Architecture
N-Tier
Grails' 'default'Architecture
N-TierData Centric
Grails' 'default'Architecture
N-TierData Centric
My Green Field ProjectMy Green Field Project
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
Data LayerData Layer
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
Data LayerData Layer
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
Data LayerData Layer
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
Data LayerData Layer
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
1.21.2
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
Data LayerData Layer
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
1.31.3
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataServiceDataService
DataServiceDataService
DataServiceDataService MehServ iceMehServ iceBlahServiceBlahServiceDataServiceDataService GahServiceGahService
DoWorkServiceDoWorkService
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
Data LayerData Layer
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
1.31.3
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataServiceDataService
DataServiceDataService
DataServiceDataService MehServ iceMehServ iceBlahServiceBlahServiceDataServiceDataService GahServiceGahService
DoWorkServiceDoWorkService
VIEWSVIEWS
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
Data LayerData Layer
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
1.31.3
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataServiceDataService
DataServiceDataService
DataServiceDataService MehServ iceMehServ iceBlahServiceBlahServiceDataServiceDataService GahServiceGahService
DoWorkServiceDoWorkService
VIEWSVIEWS
My Green Field ProjectMy Green Field Project
Web/ MVC LayerWeb/ MVC Layer
Service LayerService Layer
Data LayerData Layer
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
1.31.3
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataControllerDataController UserControllerUserController AuthControllerAuthController
DataServiceDataService UserServiceUserService
UserUser
OAuthControllerOAuthController
RandomServiceRandomService
UserSupportUserSupportPointPoint
DataServiceDataService
DataServiceDataService
DataServiceDataService MehServ iceMehServ iceBlahServiceBlahServiceDataServiceDataService GahServiceGahService
DoWorkServiceDoWorkService
VIEWSVIEWS
Issues ..Issues ..
Issues ..
Coupling between tiers
Issues ..
Coupling between tiers
Issues ..
Coupling between tiers
Service Spaghetti
Issues ..
Coupling between tiers
Service Spaghetti
Issues ..
Coupling between tiers
Service Spaghetti
User exposed to data model
Issues ..
Coupling between tiers
Service Spaghetti
User exposed to data model
ArchitectureArchitecture
ArchitectureData CentricArchitectureData Centric
ArchitectureData Centric
N-Tier
ArchitectureData Centric
N-Tier
What is Architecture?
What is Architecture?
ArchitectureIs PhilosophyArchitecture
Is Philosophy
What is yourPhilosophy?
Perfection
and How It Ruined the World
Perfection
Plato'sTheory of
Ideal Forms
Plato'sTheory of
Ideal Forms
Aristotlean CategoriesAristotlean Categories
Where did this lead?Where did this lead?
TODO, Petra
TODO, Petra
UtopiaUtopia
Waterfall!Waterfall!
Pure Functional
Programming
Pure Functional
Programming
SOA?SOA?
That's awfulThat's awful
"le mieux est l'ennemi du bien"
"le mieux est l'ennemi du bien"
- Voltaire- Voltaire
- Voltaire- Voltaire
"the perfect is the enemy of the good""the perfect is the
enemy of the good"
Back In
Time
Back In
Time
No man ever steps in the same river twice
No man ever steps in the same river twice
- Heraclitus (a long time ago)
- Heraclitus (a long time ago)
Perfection is a liePerfection is a lie
Change is the only Truth
Change is the only Truth
The StoicsThe Stoics
The StoicsThe Stoics
Stoicism for DevelopersStoicism for Developers
sick and yet happysick and yet happy
Stoicism for DevelopersStoicism for Developers
sick and yet happyin peril and yet happy sick and yet happyin peril and yet happy
Stoicism for DevelopersStoicism for Developers
sick and yet happyin peril and yet happy dying and yet happy
sick and yet happyin peril and yet happy dying and yet happy
Stoicism for DevelopersStoicism for Developers
sick and yet happyin peril and yet happy dying and yet happyin exile and happy
sick and yet happyin peril and yet happy dying and yet happyin exile and happy
Stoicism for DevelopersStoicism for Developers
sick and yet happyin peril and yet happy dying and yet happyin exile and happyin disgrace and happy
sick and yet happyin peril and yet happy dying and yet happyin exile and happyin disgrace and happy
Stoicism for DevelopersStoicism for Developers
How can this be
applied?
How can this be
applied?
PragmatismPragmatism
Reject DogmaReject Dogma
Gather ProofGather Proof
Change is Real
Change is Real
David, show them some code
David, show them some code
A Business ProcessA Business Process
A Business ProcessA Business Process
(Workflow)(Workflow)
A Business ProcessA Business Process
(Workflow)(Workflow)
Create DocumentCreate Document
A Business ProcessA Business Process
(Workflow)(Workflow)
Create DocumentCreate DocumentCreate DocumentCreate Document Review DocumentReview Document
A Business ProcessA Business Process
(Workflow)(Workflow)
Create DocumentCreate DocumentCreate DocumentCreate Document Review DocumentReview Document Approve DocumentApprove Document
A Business ProcessA Business Process
(Workflow)(Workflow)
Create DocumentCreate DocumentCreate DocumentCreate Document Review DocumentReview Document Approve DocumentApprove Document
RejectReject
A Business ProcessA Business Process
(Workflow)(Workflow)
Create DocumentCreate DocumentCreate DocumentCreate Document Review DocumentReview Document Approve DocumentApprove Document
RejectReject Insert into SystemInsert into System
The ChallengesThe Challenges
●The DBA likes to change things●The DBA likes to change things
The ChallengesThe Challenges
●The DBA likes to change things
●The UI will need updating every week.
●The DBA likes to change things
●The UI will need updating every week.
The ChallengesThe Challenges
●The DBA likes to change things
●The UI will need updating every week.
●The Document system gets a new major version every 2 months.
●The DBA likes to change things
●The UI will need updating every week.
●The Document system gets a new major version every 2 months.
The ChallengesThe Challenges
David, show them some code
David, show them some code
The 'Life Preserver'
Approach
The 'Life Preserver'
Approach
Core Domain
Application PoliciesBusiness Rules
Core Domain
Application PoliciesBusiness Rules
DocumentWorkflowDocumentWorkflow
DatabaseDatabaseDocumentWorkflowDocumentWorkflow
DatabaseDatabase
DocumentSystemIntegration
DocumentSystemIntegration
DocumentWorkflowDocumentWorkflow
RESTREST
DatabaseDatabase
DocumentSystemIntegration
DocumentSystemIntegration
DocumentWorkflowDocumentWorkflow
RESTRESTUIUI
DatabaseDatabase
DocumentSystemIntegration
DocumentSystemIntegration
DocumentWorkflowDocumentWorkflow
Events!Events!
What areEvents?What areEvents?
Asynchronous?Asynchronous?
CommunicationCommunication
Imperativeto
Declarative
Imperativeto
Declarative
Give me MilkGive me Milk
OKOK
I used all the milkI used all the milk
I'll get someI'll get some
Point of Decision moves
Caller ==> Callee
Point of Decision moves
Caller ==> Callee
David, show them some code
David, show them some code
we will use:we will use:
we will use:
Communication Centric
we will use:
Communication Centric
we will use:
Communication CentricDomain Based
we will use:
Communication CentricDomain Based
we will use:
Communication CentricDomain Based
Architecture
we will use:
Communication CentricDomain Based
Architecture
we will use:
No NewFrameworks
we will use:
No NewFrameworks
David, show them some code
David, show them some code
https://github.com/daviddawson/philosophical-architecturehttps://github.com/daviddawson/philosophical-architecture
David, show them some code
David, show them some code
What Next?What Next?
RESTRESTUIUI
DatabaseDatabase
DocumentSystemIntegration
DocumentSystemIntegration
DocumentWorkflowDocumentWorkflow
Split DomainsInto Plugins
Split DomainsInto Plugins
Split DomainsInto
Microservices
Split DomainsInto
Microservices
Blatant PromoBlatant Promo
Trouble changing your software?
Trouble changing your software?
Blatant PromoBlatant Promo
https://skillsmatter.com/conferences/6312-muconhttps://skillsmatter.com/conferences/6312-mucon
µCon: The Microservices Conference27th, 28th November, LondonµCon: The Microservices Conference27th, 28th November, London
Blatant PromoBlatant Promo
Simplicity in Software Workshop, Friday 19th July
Simplicity in Software Workshop, Friday 19th July
Questions?Questions?
Thank you!Thank you!
@davidthecoder@davidthecoder