Philosophical Architecture in Grails

Post on 02-Jul-2015

551 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

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

david.dawson@simplicityitself.com

@davidthecoder@SimplicityItse1

david.dawson@simplicityitself.com

@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?

david.dawson@simplicityitself.com

Trouble changing your software?

david.dawson@simplicityitself.com

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

top related