Submit Search
Upload
Domain Driven Design Javaday Roma2007
•
12 likes
•
791 views
Antonio Terreno
Follow
Presentation on DDD Domain Driven Design, Javaday Roma 2007
Read less
Read more
Technology
Report
Share
Report
Share
1 of 25
Download now
Download to read offline
Recommended
Nio
Nio
nextlib
20071214: An Identity Provider's Guide to the Core Attributes
20071214: An Identity Provider's Guide to the Core Attributes
iay
hibernate
hibernate
Arjun Shanka
Moving to Dojo 1.7 and the path to 2.0
Moving to Dojo 1.7 and the path to 2.0
James Thomas
Building Real-World Dojo Web Applications
Building Real-World Dojo Web Applications
Andrew Ferrier
Rich internet application development using the dojo toolkit
Rich internet application development using the dojo toolkit
alexklaeser
Functional programming in C#
Functional programming in C#
Thomas Jaskula
Dojo tutorial
Dojo tutorial
Girish Srivastava
Recommended
Nio
Nio
nextlib
20071214: An Identity Provider's Guide to the Core Attributes
20071214: An Identity Provider's Guide to the Core Attributes
iay
hibernate
hibernate
Arjun Shanka
Moving to Dojo 1.7 and the path to 2.0
Moving to Dojo 1.7 and the path to 2.0
James Thomas
Building Real-World Dojo Web Applications
Building Real-World Dojo Web Applications
Andrew Ferrier
Rich internet application development using the dojo toolkit
Rich internet application development using the dojo toolkit
alexklaeser
Functional programming in C#
Functional programming in C#
Thomas Jaskula
Dojo tutorial
Dojo tutorial
Girish Srivastava
Effective Strategies for Distributed Testing
Effective Strategies for Distributed Testing
Anand Bagmar
Tw specifications for-testing1
Tw specifications for-testing1
ThoughtWorks Studios
Functional testing patterns
Functional testing patterns
Premanand Chandrasekaran
Machine learning in software testing
Machine learning in software testing
Thoughtworks
Strategies for Distributed Testing
Strategies for Distributed Testing
vodQA
What is Agile Testing?
What is Agile Testing?
vodQA
Weather Presentation
Weather Presentation
bu.lauren
Amy&Per Erik
Amy&Per Erik
vinion
Roysville
Roysville
retamplifier
Produtos e serviços da Web 2.0
Produtos e serviços da Web 2.0
Elcio Ferreira
Lost In The Kingdom Of Vorg
Lost In The Kingdom Of Vorg
Kwan Tuck Soon
Souper Bowl 2005 Pictures
Souper Bowl 2005 Pictures
burnsc62
独特的荷兰风车
独特的荷兰风车
Kwan Tuck Soon
Verdaderas Obras De Arte
Verdaderas Obras De Arte
blackangel
Biz Cafe
Biz Cafe
Paula Ionescu
Kazen evanjelizacia&ucenictvo-16.02.2014
Kazen evanjelizacia&ucenictvo-16.02.2014
Cirkev bratská Svätý Jur
Artalk
Artalk
Chiara Antonacci
Publizitate Eraginkortasunaren Baliospena 5
Publizitate Eraginkortasunaren Baliospena 5
katixa
Deforestation
Deforestation
kimoneill
Zine Teoriak2
Zine Teoriak2
katixa
Building a JavaScript Library
Building a JavaScript Library
jeresig
Android Bootcamp
Android Bootcamp
ahkjsdcsadc
More Related Content
Viewers also liked
Effective Strategies for Distributed Testing
Effective Strategies for Distributed Testing
Anand Bagmar
Tw specifications for-testing1
Tw specifications for-testing1
ThoughtWorks Studios
Functional testing patterns
Functional testing patterns
Premanand Chandrasekaran
Machine learning in software testing
Machine learning in software testing
Thoughtworks
Strategies for Distributed Testing
Strategies for Distributed Testing
vodQA
What is Agile Testing?
What is Agile Testing?
vodQA
Weather Presentation
Weather Presentation
bu.lauren
Amy&Per Erik
Amy&Per Erik
vinion
Roysville
Roysville
retamplifier
Produtos e serviços da Web 2.0
Produtos e serviços da Web 2.0
Elcio Ferreira
Lost In The Kingdom Of Vorg
Lost In The Kingdom Of Vorg
Kwan Tuck Soon
Souper Bowl 2005 Pictures
Souper Bowl 2005 Pictures
burnsc62
独特的荷兰风车
独特的荷兰风车
Kwan Tuck Soon
Verdaderas Obras De Arte
Verdaderas Obras De Arte
blackangel
Biz Cafe
Biz Cafe
Paula Ionescu
Kazen evanjelizacia&ucenictvo-16.02.2014
Kazen evanjelizacia&ucenictvo-16.02.2014
Cirkev bratská Svätý Jur
Artalk
Artalk
Chiara Antonacci
Publizitate Eraginkortasunaren Baliospena 5
Publizitate Eraginkortasunaren Baliospena 5
katixa
Deforestation
Deforestation
kimoneill
Zine Teoriak2
Zine Teoriak2
katixa
Viewers also liked
(20)
Effective Strategies for Distributed Testing
Effective Strategies for Distributed Testing
Tw specifications for-testing1
Tw specifications for-testing1
Functional testing patterns
Functional testing patterns
Machine learning in software testing
Machine learning in software testing
Strategies for Distributed Testing
Strategies for Distributed Testing
What is Agile Testing?
What is Agile Testing?
Weather Presentation
Weather Presentation
Amy&Per Erik
Amy&Per Erik
Roysville
Roysville
Produtos e serviços da Web 2.0
Produtos e serviços da Web 2.0
Lost In The Kingdom Of Vorg
Lost In The Kingdom Of Vorg
Souper Bowl 2005 Pictures
Souper Bowl 2005 Pictures
独特的荷兰风车
独特的荷兰风车
Verdaderas Obras De Arte
Verdaderas Obras De Arte
Biz Cafe
Biz Cafe
Kazen evanjelizacia&ucenictvo-16.02.2014
Kazen evanjelizacia&ucenictvo-16.02.2014
Artalk
Artalk
Publizitate Eraginkortasunaren Baliospena 5
Publizitate Eraginkortasunaren Baliospena 5
Deforestation
Deforestation
Zine Teoriak2
Zine Teoriak2
Similar to Domain Driven Design Javaday Roma2007
Building a JavaScript Library
Building a JavaScript Library
jeresig
Android Bootcamp
Android Bootcamp
ahkjsdcsadc
Java EE Revisits GoF Design Patterns
Java EE Revisits GoF Design Patterns
Murat Yener
Smart Client Development
Smart Client Development
Tamir Khason
What's new in DWR version 3
What's new in DWR version 3
Joe Walker
Usability in the GeoWeb
Usability in the GeoWeb
Dave Bouwman
Project Zero For Javapolis 2007
Project Zero For Javapolis 2007
Jason McGee
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Guillaume Laforge
How to make Ajax Libraries work for you
How to make Ajax Libraries work for you
Simon Willison
Ruby on Rails Presentation
Ruby on Rails Presentation
Michael MacDonald
Rise of the Single Page Application
Rise of the Single Page Application
Piyush Katariya
Language-Oriented Programming and Language Workbenches: Building Domain Langu...
Language-Oriented Programming and Language Workbenches: Building Domain Langu...
elliando dias
Javascript Framework Roundup FYB
Javascript Framework Roundup FYB
nukeevry1
JRuby - Enterprise 2.0
JRuby - Enterprise 2.0
Jan Sifra
Os Haase
Os Haase
oscon2007
Internship softwaretraining@ijse
Internship softwaretraining@ijse
Jinadi Rashmika
J2EE vs JavaEE
J2EE vs JavaEE
eanimou
Node azure
Node azure
Emanuele DelBono
Ajax Tutorial
Ajax Tutorial
oscon2007
Why Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
Jackson Tian
Similar to Domain Driven Design Javaday Roma2007
(20)
Building a JavaScript Library
Building a JavaScript Library
Android Bootcamp
Android Bootcamp
Java EE Revisits GoF Design Patterns
Java EE Revisits GoF Design Patterns
Smart Client Development
Smart Client Development
What's new in DWR version 3
What's new in DWR version 3
Usability in the GeoWeb
Usability in the GeoWeb
Project Zero For Javapolis 2007
Project Zero For Javapolis 2007
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
How to make Ajax Libraries work for you
How to make Ajax Libraries work for you
Ruby on Rails Presentation
Ruby on Rails Presentation
Rise of the Single Page Application
Rise of the Single Page Application
Language-Oriented Programming and Language Workbenches: Building Domain Langu...
Language-Oriented Programming and Language Workbenches: Building Domain Langu...
Javascript Framework Roundup FYB
Javascript Framework Roundup FYB
JRuby - Enterprise 2.0
JRuby - Enterprise 2.0
Os Haase
Os Haase
Internship softwaretraining@ijse
Internship softwaretraining@ijse
J2EE vs JavaEE
J2EE vs JavaEE
Node azure
Node azure
Ajax Tutorial
Ajax Tutorial
Why Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
More from Antonio Terreno
Serverless conference-labrador-at-2018
Serverless conference-labrador-at-2018
Antonio Terreno
Blend it up - leancamp london presentation
Blend it up - leancamp london presentation
Antonio Terreno
Programmer Anarchy
Programmer Anarchy
Antonio Terreno
Socket.io
Socket.io
Antonio Terreno
Agiler without a schema @forward
Agiler without a schema @forward
Antonio Terreno
Mongo db
Mongo db
Antonio Terreno
J2Me Il Micro Mondo Java
J2Me Il Micro Mondo Java
Antonio Terreno
Jc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno Fluidtime
Antonio Terreno
Kommons
Kommons
Antonio Terreno
From Amber To Green in Four Weeks
From Amber To Green in Four Weeks
Antonio Terreno
Time Boxing
Time Boxing
Antonio Terreno
Importance Of Being Driven
Importance Of Being Driven
Antonio Terreno
More from Antonio Terreno
(12)
Serverless conference-labrador-at-2018
Serverless conference-labrador-at-2018
Blend it up - leancamp london presentation
Blend it up - leancamp london presentation
Programmer Anarchy
Programmer Anarchy
Socket.io
Socket.io
Agiler without a schema @forward
Agiler without a schema @forward
Mongo db
Mongo db
J2Me Il Micro Mondo Java
J2Me Il Micro Mondo Java
Jc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno Fluidtime
Kommons
Kommons
From Amber To Green in Four Weeks
From Amber To Green in Four Weeks
Time Boxing
Time Boxing
Importance Of Being Driven
Importance Of Being Driven
Recently uploaded
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
HarshalMandlekar2
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
Neo4j
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
Hiroshi SHIBATA
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
LoriGlavin3
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Scott Andery
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
Pixlogix Infotech
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
panagenda
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
Raghuram Pandurangan
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
panagenda
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
ThousandEyes
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
LoriGlavin3
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
Mydbops
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
Alan Dix
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
Nathaniel Shimoni
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
BookNet Canada
A Framework for Development in the AI Age
A Framework for Development in the AI Age
Cprime
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Mark Goldstein
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
UiPathCommunity
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Pim van der Noll
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
AliaaTarek5
Recently uploaded
(20)
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
A Framework for Development in the AI Age
A Framework for Development in the AI Age
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
Domain Driven Design Javaday Roma2007
1.
Domain Driven Design
Antonio Terreno Javaday 1 December 2007, Rome Javaday Roma 2007 © ThoughtWorks, 2007
2.
Javaday Roma 2007
Software design is art “Software design is an art, and like any art it cannot be taught and learned as a precise science, by means of theorems and formulas.” Floyd Marinescu Javaday Roma 2007 © ThoughtWorks, 2007
3.
Javaday Roma 2007
The Agile Way • No upfront design, requirement gathering • The team makes the design • Participation with the stakeholder • Simple, what is simple for you? • What is good for you? • Refactoring, refactoring how? (dev skills) • Refactoring how much? (fear) Javaday Roma 2007 © ThoughtWorks, 2007
4.
Javaday Roma 2007
Domain Driven Development • Focus on the domain • A common language • Layered architecture • Entities / Value Objects • Services • Modules • Aggregates • Factories • Repositories Javaday Roma 2007 © ThoughtWorks, 2007
5.
Javaday Roma 2007
Domain Driven • Layered architecture – User interface – Application Layer • No business logic • No State of business objects • Holds state of an application task progress – Domain Layer • Info about the domain • State is held here – Infrastructure Layer • Communication between layers • Persistence for business objects • Support libraries Javaday Roma 2007 © ThoughtWorks, 2007
6.
Javaday Roma 2007
Why layers? • Manage changes • Avoids coupling of code • Avoids unexpected behaviors after changes Javaday Roma 2007 © ThoughtWorks, 2007
7.
Javaday Roma 2007
Entities • Objects that have an identity • Spanning the life of the system and even after • a Person object for example • The Id does never change • Some domain objects have already the concept of id – National number, airport code, … • All the domain objects are then entities? Javaday Roma 2007 © ThoughtWorks, 2007
8.
Javaday Roma 2007
User public class User { private string name; private bool isAuthorised; private readonly IList myPermissions = new List<Permission>(); protected Guid id; public User(string name, bool isAuthorised, params Permission[] permissions) { id = Guid.Empty; this.name = name; this.isAuthorised = isAuthorised; SetPermissions(permissions); } Javaday Roma 2007 © ThoughtWorks, 2007
9.
Javaday Roma 2007
Value Objects • When we care about what an object has and not about which object is – How and when write a VO? • First we write a VO when the object is NOT an Entity! • Will be great if a VO is immutable • For performance but mostly • They will manifest integrity • If value objects are sharable they should be immutable • Keep VO thin and simple • Please no huge VO, a VO can contain value objects and reference to Entities Javaday Roma 2007 © ThoughtWorks, 2007
10.
Javaday Roma 2007
TaskRecord public class TaskRecord { private readonly Reference reference; private readonly decimal value; private readonly string xml; private readonly User generatedBy; private readonly DateTime generationTime; public TaskRecord(…) { this… = … } Javaday Roma 2007 © ThoughtWorks, 2007
11.
Javaday Roma 2007
Services • In the ubiquitous language the objects are the nouns, the services are the verbs. • A service provides functionality for the domain • I can’t really put this stuff on an object! • A service performs an operation – The operation refers to a domain concept – The operations refers to other object in the domain model – The operation is stateless • Keeps the domain isolated Javaday Roma 2007 © ThoughtWorks, 2007
12.
Javaday Roma 2007
IImageReplicationService public interface IImageReplicationService { void Send(ISessionContext sessionContext, Image image, PhotoDetails photoDetails); } Javaday Roma 2007 © ThoughtWorks, 2007
13.
Javaday Roma 2007
Tasks & Commands • Not Stateless operations • Fairly Isolated • A Presenter uses one or more Tasks • A Task can use one more Commands Javaday Roma 2007 © ThoughtWorks, 2007
14.
Javaday Roma 2007
SaveUserCommand public void Execute() { user.Username = username; user.IsAuthorised = isAuthorised; user.CardNumber = cardNumber; sessionContext.SaveOrUpdate(user); } Javaday Roma 2007 © ThoughtWorks, 2007
15.
Javaday Roma 2007
Modules • In a complex system the model grows – Let’s split it in to modules, in order to reduce complexity – High level of cohesion, low level of coupling – Communicational cohesion • Parts of the module work with same data – Functional cohesion • Parts of the module work together to perform well-defined tasks Javaday Roma 2007 © ThoughtWorks, 2007
16.
Javaday Roma 2007
Aggregates • Relations between objects – One to many, many to many, complexity! – First, try to remove and refactor when you don’t need it – Try to reduce multiplicity and direction (bi to mono) – Cascade on update/delete, usually the db does this for us – Typically then what happen? Poor performances! – Use aggregate • An aggregate has an entity as root element • Only the root is obtainable through queries • The Entity is responsible of maintaining the invariants Javaday Roma 2007 © ThoughtWorks, 2007
17.
Javaday Roma 2007
Factories • When creating an objects instance is complex • When creating an object (especially an Aggregate) is a responsibility – Use factories. – I create the root of the Aggregate and all the contained object – Atomic creation – Factories violates objects encapsulation, be careful! – Use a constructor when: • It’s simple • All the attributes can be passed via the constructor • The class is the type, there’s no need to choose different implementation Javaday Roma 2007 © ThoughtWorks, 2007
18.
Javaday Roma 2007
IPresenterFactory public interface IPresenterFactory { IPresenter CreateTaskDetailPresenter(ITaskDetailView view, IAddCommentsUserAction addCommentsAction); … } Javaday Roma 2007 © ThoughtWorks, 2007
19.
Javaday Roma 2007
Repositories • We don’t want to be coupled to the DB/persistence infrastructure – A repository encapsulate the logic in order to obtain object references – It may include a Strategy – It should be simple (find, add for example) • A factory creates, a repository retrieves. • A factory is pure domain, a repository communicates with the infrastructure Javaday Roma 2007 © ThoughtWorks, 2007
20.
Javaday Roma 2007
IUserRepository public interface IUserRepository : IRepository<User> { User FindWithCardId(string cardNumber); ICollection<User> FindAllUsers(); ICollection<User> FindAllActiveUsers(); bool IsUniqueUsername(string username, User currentUser); bool IsValidUsername(string username); IList<User> GetUsersByCardId(string cardNumber); } Javaday Roma 2007 © ThoughtWorks, 2007
21.
Javaday Roma 2007
All together . Javaday Roma 2007 © ThoughtWorks, 2007
22.
Javaday Roma 2007
Domain Specific Languages • Small, Domain focused language • Domain experts themselves can understand, validate, modify, and often even develop DSL programs • Do I really need a new language? • Fluent interfaces Javaday Roma 2007 © ThoughtWorks, 2007
23.
Javaday Roma 2007
UserBuilder public class UserBuilder { private string name = quot;UserBuilder generated userquot;; private bool isAuthorised = true; private readonly List<Permission> permissions = new List<Permission>(); public UserBuilder Name(string value) { name = value; return this; } public UserBuilder CardNumber(string value) { cardNumber = value; return this; } public User ToUser() { return new User(name, cardNumber, isAuthorised, permissions.ToArray()); } … User testUser = new UserBuilder().Name(“antonio”).CardNumber(“1234”). ToUser(); Javaday Roma 2007 © ThoughtWorks, 2007
24.
Javaday Roma 2007
Dev/BA • Dev pair sessions with BA • Domain Experts • Code that “even” a BA can read and change Javaday Roma 2007 © ThoughtWorks, 2007
25.
Javaday Roma 2007
Q&A? Grazie! Javaday Roma 2007 © ThoughtWorks, 2007
Download now