SlideShare a Scribd company logo
Lecture 07
Organizing Domain Logic
Agenda
 Layering
 The Three Principal Layers
 Domain layer Patterns
– Transaction Script
– Domain Model
– Table Module
– Service Layer
 From Problem to Pattern
 Building the domain
Reading
 Fowler Introduction
– Thinking about Performance (p. 6-9)
 Fowler 1: Layering
 Fowler 2: Organizing Domain Logic
 Fowler 9: Domain Logic Patterns
Layering
Layering
 Software systems can get complicated
– Abstractions are needed
 Layering provides abstraction by separating
computer systems in layers
– Higher layers use services from
lower layers
– Each layer has dedicated tasks
and hides complexity from upper
layers
Benefits of Layering
 You can understand a single layer as a
coherent whole without knowing much about
other layers
 You can substitute layers with alternative
implementation of the same basic service
 You minimize dependencies between layers
 Layers make good places for standardization
 Once you have a layer built, you can use it for
many higher-level services
Downsides
 Layers encapsulate some, but not all, things well
– Cascading changes
– For example adding a field in the UI requires changes
on each layer
 Extra layers can harm performance
– At every layer things typically need to be transformed
from one presentation to another
 Organizational problems
– If difference teams work on different layers, code
duplications and other problems emerge
The Three Principal Layers
The Three Layers
 Presentation
– User’s interface to the system
– User can be another system
– Accepts input, displays views
 Domain
– The Application of the system
– The “Business logic”
– Tends to creep into presentation and data source
 Data Source
– Connection to the database
– Also Persistence
Where is the Business Logic?
 “Business Logic”
– or “Complex business illogic”?
– Business Rules including all special cases
– It is easy to think of business logic but difficult to spot
– many corner cases
– Also referred to as Domain Logic
 Enterprise software has a lot of “noise”
– “Plumbing” code around the domain logic
– Is getCustomer domain logic?
– Application Logic – or workflow
How to define Domain Logic?
 Definition
– If all environment (noise) is taken way, what is left should
be domain logic
– Environment is any middleware (web, data, ejb)
 Domain Logic should be
– Simple classes and interfaces – POJOs
– Easy to test!
– Easy to move around
– Easy to access
 Limited dependencies
– Dependencies can be reduced by injection
The Three Layers
 Dependencies
– Presentation gets information from lower layers,
preferable Domain Layer
– Domain or Data Source Layers should not depend
on the Presentation Layer
– Domain Layer depends on Data Source Layer
– Data Source Layer could use some objects from the
Domain Layer
Logic that is not Domain Logic
 Logic in different places
Presentation Logic
 How to display items, how things look
– Which colours to choose
– Number and Date formats, zero padding
 The presentation should
– Have easy and unified access to the data
– Avoid having assumptions on the data
– Avoid the need to calculate based on the data
 Example view models
– HTML, Flash
– JSP, ASP
Data Source Logic
 How to query and store items
– Optimization
– Data manipulation for upper layer
 The Data Source Layer should
– Provide simple interface to the domain layer
– Maintain speed and integrity
– Hide the database layout from the object model
 Example data model
– DAO
– Stored Procedures
Application Logic
 Having to do with application responsibilities
– “Workflow” logic
– Noise
 Example:
– Notifying contract administrator
– Checking HTTP parameters and selecting which
controller to pass the responsibility to
Interfaces
 Users can be other programs or services
– Presentation is an external interface that you provide
as a service to others
 Data can be other systems
– Data source is an external interface of services that
you use
Where is the Business Logic?
 Create a specific Layer for the Domain Logic
– Well know patterns like Domain Model
– An object model of the domain that incorporates both
behaviour and data
– Object-oriented programming!!!
Where is the Business Logic?
 Flooding of logic...
 If you don’t provide a place for the Domain Logic
it will find a place – usually in the wrong!
Enterprise Web Layers
 Clients usually run on the user’s machine
– Separate tier
– Web Browser or Rich Internet Application (RIA)
– Can also be processes or other applications
 Web Components run on a Web Server
 Domain Components run on Application Server
– Web Server or EJB Server for EJBs
 Data Source Components run on the same
Application Server (as the domain)
 Database is usually on a separate tier
Domain Layer Patterns
Domain Layer
 Provides the business logic of the application
– Not part of the Presentation Layer nor the Data
Source layer
Domain Layer Patterns
 Transaction Script
– Organizes business logic by procedures where each
procedure handles single request from the
presentation
 Domain Model
– An object model of the domain that incorporates both
data and behaviour
 Table Module
– One class that provides domain logic to table or view
in database
Transaction Scripts
Organizes business logic by procedures
where each procedure handles a single request
from the presentation
 Most business applications can be thought of as
a series of transactions
– A Transaction Script organizes all this logic primarily
as a single procedure
Transaction Scripts
 Works well if model is simple
– Small amount of logic
– No state needed
– Moving data between presentation and database
 Problems
– Code duplication between transactions
– Common code tends to be duplicated
– Since no state is used, and each transaction is
separate from any other, there might be too many
calls to database layer
Transaction Scripts
 Revenue recognitions example
– One script handles all the logic
– Uses a data gateway to access data
Domain Model
An object model of the domain that
incorporates both behavior and data
 Rules and logic describe many different cases
and slants of behavior
 Web of interconnected objects
– Where each object represents some meaningful entity
– Dependencies between objects
 How it works
– Object that represent data (value objects) and
business rules (behavior)
Domain Model
 Simple model
– Similar to the database design
– Simple to map to the database
 Rich model
– Different from the database
design
– Better for solving some
complex logic and doing
calculation
Domain Model
 Revenue recognitions example
– Multiple classes each with different responsibility
– Each class has data and logic to calculate
Table Module
A single instance that handles the business logic for
all rows in a database table or view
 Organizes domain logic with one class per table in
the database
– Single instance of the class contains various procedures
that will act on the data
– One object per table handle
 How it works
– One class that provides domain logic to table or view in
database
– A Domain Model will have one order object per order while
a Table Module will have one object to handle all orders
Table Module
 When to use it
– Useful when application is centered on data
– Objects in the model are similar to the database
Making a Choice
 Pattern depends on
– Complexity of the domain logic and
– How the domain maps to the database
Service Layer
Defines an application’s boundary with a layer of
services that establishes a set of available
opertaions and coordinates the application’s
response in each operation
 Defines an application's boundary
– Provides a set of available operations from the
perspective of interfacing client layers
– Encapsulates the application's business logic
Service Layer
 Domain façade
– Provides thin interface
to the Domain Model
– Does not implement
any business logic
 Operation Script
– Implementation of
application logic
– Use the Domain Model
for domain logic
Design with Service Layer
I want to structure my domain layer and use a pattern that applies to each
situation:
A) The logic is rather extensive
B) The logic is simple and procedure based
C) The logic is moderate and is centered around the database
EXERCISE
From Problem to Pattern
How do I structure my domain layer?
A) The logic is rather extensive
Domain Model
Domain Model
An object model of the domain that
incorporates both behaviour and data
 Rules and logic describe many different cases
and slants of behaviour
 Web of interconnected objects
– Where each object represents some meaningful entity
– Dependencies between objects
 How it works
– Object that represent data (value objects) and
business rules (behaviour)
From Problem to Pattern
How do I structure my domain layer?
B) The logic is simple and procedure
based
Transaction Script
Transaction Scripts
Organizes business logic by procedures
where each procedure handles a single request
from the presentation
 Most business applications can be thought of as
a series of transactions
– A Transaction Script organizes all this logic primarily
as a single procedure
From Problem to Pattern
How do I structure my domain layer?
C) The logic is moderate and is
centered around the database
Table Module
Table Module
A single instance that handles the business logic for
all rows in a database table or view
 Organizes domain logic with one class per table in
the database
– Single instance of the class contains various procedures
that will act on the data
– One object per table handle
 How it works
– One class that provides domain logic to table or view in
database
– A Domain Model will have one order object per order while
a Table Module will have one object to handle all orders
From Problem to Pattern
How do I give my domain logic
distinct API?
Service Layer
Service Layer
Defines an application’s boundary with a layer of
services that establishes a set of available
operations and coordinates the application’s
response in each operation
 Defines an application's boundary
– Provides a set of available operations from the
perspective of interfacing client layers
– Encapsulates the application's business logic
From Problem to Patterns
Problem – Ru Movie DB (rumdb)
From Problem to Pattern
 We need to build a solution
– We know the problem – sort of
 To get to the solution
– What patterns to use?
Rumdb
The RU Movie Database
SolutionProblem
Solution?
 How to we get to this?
How to define Domain Logic?
 Definition
– If all environment (noise) is taken way, what is left should
be domain logic
– Environment is any middleware (web, data, ejb)
 Domain Logic should be
– Simple classes and interfaces – POJOs
– Easy to test!
– Easy to move around
– Easy to access
 Limited dependencies
– Dependencies can be reduced by injection
Building the Domain
 Objects – the nouns
– Movie, Ratings, Channel, …
 User Stories
– What you do with the objects
 Example
– As a Operator, I want to add new movie
– As a User, I want to get all movies for a specific
channel
– As a User, I want to rate specific movie
Movie Database Example
Movie Database Example
 The Service Layer
– MovieService Provides simple and clean interface for
manipulation of Movies
– External services can be injected into the Service
Layer
Movie Database Example
 MovieService
– Provides an interface to manipulate Movies
public class MovieService extends ApplicationService
{
private MovieDataGateway movieDataGateway;
public void addMovie(Movie movie) throws ServiceException
{
movie.initialize();
if(!movie.validate())
{
throw new ServiceException("Movie is invalid");
}
movieDataGateway.addMovie(movie);
getMailGateway().SendMessage("netfang@ru.is", "netfang@ru.is",
"New Movie", "New Movie was added!");
}
...
Movie Database Example
 ApplicationService
– Layered Supertype for the Service Layer
– Provides support for all service classes
public class ApplicationService
{
private MailGateway mailGateway;
public MailGateway getMailGateway()
{
return mailGateway;
}
public void setMailGateway(MailGateway mailGateway)
{
this.mailGateway = mailGateway;
}
}
Movie Database Example
 The Domain Model
– POJOs with attributes and operations
Movie Database Example
 Movie
– Object for describing and manipulating contents
– Has a Rating object which keeps count of views and
rates
public class Movie implements Comparable
{
private int id;
private String title;
private String link;
private String description;
private Date release;
private String director;
private Rating rating = new Rating();
private List<Validator> validators = new ArrayList<Validator>();
Movie Database Example
 Methods in Movie
public void initialize()
{
rating.reset();
clearValidators();
addValidator(new DefaultMovieValidator(this));
}
public boolean validate()
{
for(Validator v : validators)
{
if(!v.validate())
return false;
}
return true;
}
Movie Database Example
 Methods in Movie
– Has validators – easily extendable according to the
Open-Close Principle
public void clearValidators()
{
validators.clear();
}
public void addValidator(Validator validator)
{
validators.add(validator);
}
Movie Database Example
 Methods in Movie
public void view()
{
rating.incrementView();
}
public void rate(int rate)
{
rating.incrementRate(rate);
}
public double getAverageRate()
{
return rating.getAverageRate();
}
Movie Database Example
 Rating
public class Rating
{
private int views; // Number of requests
private int rates; // Number of rates
private int score; // Combined values of scores
public void incrementView()
{
views++;
}
public void incrementRate(int rate)
{
rates++;
score += rate;
}
public double getAverageRate()
{
return score/rates;
}
Movie Database Example
Movie Database Example
 TestSimple
public TestSimple()
{
MovieService movieService = new MovieService();
movieService.setMovieDataGateway(new MovieDataGatewayStub());
movieService.setMailGateway(new MailServerStub());
try {
movieService.addMovie(new Movie(1, "Movie 1”, "http1", "", new Date(), ""));
movieService.addMovie(new Movie(1, "Movie 2", "http2", "", new Date(), ""));
movieService.addMovie(new Movie(1, "Movie 3", "http3", "", new Date(), ""));
movieService.addMovie(new Movie(1, "Movie 4", "http4", "", new Date(), ""));
}
catch (ServiceException sex) { ... }
List<Movie> list = movieService.getMovies();
for (Movie movie : list)
{
System.out.println(movie);
}
Summary
 Layering
 Three Principal Layers
 Domain layer Patterns to choose from
– Transaction Script for simple business logic
– Domain Model for complex business logic
– Table Module for moderate business logic when you
have good tools around Record Set
– Service Layer to provide API
 Building the domain
 From Problem to Pattern

More Related Content

PPTX
Domain logic patterns of Software Architecture
PPTX
L01 Enterprise Application Architecture
PPTX
L10 Web Programming
PPTX
L13 Oranizing Domain Logic
PDF
The Evolution Of Enterprise Application Architecture
DOCX
Client server computing_keypoint_and_questions
PPTX
Finit Solutions - What is New in Hyperion Financial Management 11.1.2.2
PPTX
Adopting a Canonical Data Model - how to apply to an existing environment wit...
Domain logic patterns of Software Architecture
L01 Enterprise Application Architecture
L10 Web Programming
L13 Oranizing Domain Logic
The Evolution Of Enterprise Application Architecture
Client server computing_keypoint_and_questions
Finit Solutions - What is New in Hyperion Financial Management 11.1.2.2
Adopting a Canonical Data Model - how to apply to an existing environment wit...

What's hot (20)

PPT
Info sphere overview
PDF
CRM magic with data migration & integration (Presentation at CRMUG Summit 2013)
PPT
Client Server Architecture1
DOCX
Informatica
PDF
Informatica slides
PPTX
Client/Server Architecture By Faisal Shahzad
PDF
Enterprise Data Integration for Microsoft Dynamics CRM
PDF
eDocumentus for IBM Maximo
PDF
What can power designer do for me
DOCX
Introduction to the client server computing By Attaullah Hazrat
PPSX
Generating XML schemas from a Logical Data Model (EDW 2011)
PPT
Client-Server Computing
PPTX
Informatica Online Training
PPT
Informatica Power Center 7.1
PDF
L19 Application Architecture
PPTX
DMS component for MAXIMO
PPTX
Informatica Powercenter Architecture
PPTX
How to Leverage FME in a Master Data Management Architecture
DOCX
Power BI Interview Questions
PPT
Informatica Server Manager
Info sphere overview
CRM magic with data migration & integration (Presentation at CRMUG Summit 2013)
Client Server Architecture1
Informatica
Informatica slides
Client/Server Architecture By Faisal Shahzad
Enterprise Data Integration for Microsoft Dynamics CRM
eDocumentus for IBM Maximo
What can power designer do for me
Introduction to the client server computing By Attaullah Hazrat
Generating XML schemas from a Logical Data Model (EDW 2011)
Client-Server Computing
Informatica Online Training
Informatica Power Center 7.1
L19 Application Architecture
DMS component for MAXIMO
Informatica Powercenter Architecture
How to Leverage FME in a Master Data Management Architecture
Power BI Interview Questions
Informatica Server Manager
Ad

Viewers also liked (7)

PDF
DDD, CQRS & ES lessons learned (Gitte Vermeiren)
PPTX
Physical Architecture Layer Design
PDF
Defying Logic - Business Logic Testing with Automation
PPTX
Client server architecture
PPT
User Interface Design
PPT
Generating Architectural Concepts & Design Ideas
PPTX
An introduction to fundamental architecture concepts
DDD, CQRS & ES lessons learned (Gitte Vermeiren)
Physical Architecture Layer Design
Defying Logic - Business Logic Testing with Automation
Client server architecture
User Interface Design
Generating Architectural Concepts & Design Ideas
An introduction to fundamental architecture concepts
Ad

Similar to L07 Oranizing Domain Logic (20)

PDF
L15 Organising Domain Layer
PPTX
L15 Data Source Layer
PPTX
L11 Application Architecture
PPTX
L08 Data Source Layer
PPTX
L19 Application Architecture
PDF
L17 Data Source Layer
PPTX
L06 Using Design Patterns
PPTX
Domain Logic Patterns
PPTX
L12 Session State and Distributation Strategies
PPTX
Study the past if you would define the future: How Gang of Four patterns are ...
PPTX
L12 Visualizing Architecture
PPTX
Why you shouldnt use django for that
PPT
session on pattern oriented software architecture
PPT
Implementing the Database Server session 01
PPTX
Crafted Design - ITAKE 2014
PPTX
L21 scalability
PPTX
Crafted Design - GeeCON 2014
PPTX
L02 Architecture
PDF
Application architecture
PPT
Ruby On Rails
L15 Organising Domain Layer
L15 Data Source Layer
L11 Application Architecture
L08 Data Source Layer
L19 Application Architecture
L17 Data Source Layer
L06 Using Design Patterns
Domain Logic Patterns
L12 Session State and Distributation Strategies
Study the past if you would define the future: How Gang of Four patterns are ...
L12 Visualizing Architecture
Why you shouldnt use django for that
session on pattern oriented software architecture
Implementing the Database Server session 01
Crafted Design - ITAKE 2014
L21 scalability
Crafted Design - GeeCON 2014
L02 Architecture
Application architecture
Ruby On Rails

More from Ólafur Andri Ragnarsson (20)

PDF
Nýsköpun - Leiðin til framfara
PDF
Nýjast tækni og framtíðin
PDF
New Technology Summer 2020 Course Introduction
PDF
L01 Introduction
PDF
L23 Robotics and Drones
PDF
L22 Augmented and Virtual Reality
PDF
L20 Personalised World
PDF
L19 Network Platforms
PDF
L18 Big Data and Analytics
PDF
L17 Algorithms and AI
PDF
L16 Internet of Things
PDF
L14 From the Internet to Blockchain
PDF
L14 The Mobile Revolution
PDF
New Technology 2019 L13 Rise of the Machine
PDF
L12 digital transformation
PDF
L10 The Innovator's Dilemma
PDF
L09 Disruptive Technology
PDF
L09 Technological Revolutions
PDF
L07 Becoming Invisible
PDF
L06 Diffusion of Innovation
Nýsköpun - Leiðin til framfara
Nýjast tækni og framtíðin
New Technology Summer 2020 Course Introduction
L01 Introduction
L23 Robotics and Drones
L22 Augmented and Virtual Reality
L20 Personalised World
L19 Network Platforms
L18 Big Data and Analytics
L17 Algorithms and AI
L16 Internet of Things
L14 From the Internet to Blockchain
L14 The Mobile Revolution
New Technology 2019 L13 Rise of the Machine
L12 digital transformation
L10 The Innovator's Dilemma
L09 Disruptive Technology
L09 Technological Revolutions
L07 Becoming Invisible
L06 Diffusion of Innovation

Recently uploaded (20)

PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPT
Teaching material agriculture food technology
PDF
cuic standard and advanced reporting.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Machine learning based COVID-19 study performance prediction
PDF
Approach and Philosophy of On baking technology
PDF
Encapsulation theory and applications.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Cloud computing and distributed systems.
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Understanding_Digital_Forensics_Presentation.pptx
Teaching material agriculture food technology
cuic standard and advanced reporting.pdf
Review of recent advances in non-invasive hemoglobin estimation
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Machine learning based COVID-19 study performance prediction
Approach and Philosophy of On baking technology
Encapsulation theory and applications.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Chapter 3 Spatial Domain Image Processing.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Network Security Unit 5.pdf for BCA BBA.
Cloud computing and distributed systems.
Spectral efficient network and resource selection model in 5G networks
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...

L07 Oranizing Domain Logic

  • 2. Agenda  Layering  The Three Principal Layers  Domain layer Patterns – Transaction Script – Domain Model – Table Module – Service Layer  From Problem to Pattern  Building the domain
  • 3. Reading  Fowler Introduction – Thinking about Performance (p. 6-9)  Fowler 1: Layering  Fowler 2: Organizing Domain Logic  Fowler 9: Domain Logic Patterns
  • 5. Layering  Software systems can get complicated – Abstractions are needed  Layering provides abstraction by separating computer systems in layers – Higher layers use services from lower layers – Each layer has dedicated tasks and hides complexity from upper layers
  • 6. Benefits of Layering  You can understand a single layer as a coherent whole without knowing much about other layers  You can substitute layers with alternative implementation of the same basic service  You minimize dependencies between layers  Layers make good places for standardization  Once you have a layer built, you can use it for many higher-level services
  • 7. Downsides  Layers encapsulate some, but not all, things well – Cascading changes – For example adding a field in the UI requires changes on each layer  Extra layers can harm performance – At every layer things typically need to be transformed from one presentation to another  Organizational problems – If difference teams work on different layers, code duplications and other problems emerge
  • 9. The Three Layers  Presentation – User’s interface to the system – User can be another system – Accepts input, displays views  Domain – The Application of the system – The “Business logic” – Tends to creep into presentation and data source  Data Source – Connection to the database – Also Persistence
  • 10. Where is the Business Logic?  “Business Logic” – or “Complex business illogic”? – Business Rules including all special cases – It is easy to think of business logic but difficult to spot – many corner cases – Also referred to as Domain Logic  Enterprise software has a lot of “noise” – “Plumbing” code around the domain logic – Is getCustomer domain logic? – Application Logic – or workflow
  • 11. How to define Domain Logic?  Definition – If all environment (noise) is taken way, what is left should be domain logic – Environment is any middleware (web, data, ejb)  Domain Logic should be – Simple classes and interfaces – POJOs – Easy to test! – Easy to move around – Easy to access  Limited dependencies – Dependencies can be reduced by injection
  • 12. The Three Layers  Dependencies – Presentation gets information from lower layers, preferable Domain Layer – Domain or Data Source Layers should not depend on the Presentation Layer – Domain Layer depends on Data Source Layer – Data Source Layer could use some objects from the Domain Layer
  • 13. Logic that is not Domain Logic  Logic in different places
  • 14. Presentation Logic  How to display items, how things look – Which colours to choose – Number and Date formats, zero padding  The presentation should – Have easy and unified access to the data – Avoid having assumptions on the data – Avoid the need to calculate based on the data  Example view models – HTML, Flash – JSP, ASP
  • 15. Data Source Logic  How to query and store items – Optimization – Data manipulation for upper layer  The Data Source Layer should – Provide simple interface to the domain layer – Maintain speed and integrity – Hide the database layout from the object model  Example data model – DAO – Stored Procedures
  • 16. Application Logic  Having to do with application responsibilities – “Workflow” logic – Noise  Example: – Notifying contract administrator – Checking HTTP parameters and selecting which controller to pass the responsibility to
  • 17. Interfaces  Users can be other programs or services – Presentation is an external interface that you provide as a service to others  Data can be other systems – Data source is an external interface of services that you use
  • 18. Where is the Business Logic?  Create a specific Layer for the Domain Logic – Well know patterns like Domain Model – An object model of the domain that incorporates both behaviour and data – Object-oriented programming!!!
  • 19. Where is the Business Logic?  Flooding of logic...  If you don’t provide a place for the Domain Logic it will find a place – usually in the wrong!
  • 20. Enterprise Web Layers  Clients usually run on the user’s machine – Separate tier – Web Browser or Rich Internet Application (RIA) – Can also be processes or other applications  Web Components run on a Web Server  Domain Components run on Application Server – Web Server or EJB Server for EJBs  Data Source Components run on the same Application Server (as the domain)  Database is usually on a separate tier
  • 22. Domain Layer  Provides the business logic of the application – Not part of the Presentation Layer nor the Data Source layer
  • 23. Domain Layer Patterns  Transaction Script – Organizes business logic by procedures where each procedure handles single request from the presentation  Domain Model – An object model of the domain that incorporates both data and behaviour  Table Module – One class that provides domain logic to table or view in database
  • 24. Transaction Scripts Organizes business logic by procedures where each procedure handles a single request from the presentation  Most business applications can be thought of as a series of transactions – A Transaction Script organizes all this logic primarily as a single procedure
  • 25. Transaction Scripts  Works well if model is simple – Small amount of logic – No state needed – Moving data between presentation and database  Problems – Code duplication between transactions – Common code tends to be duplicated – Since no state is used, and each transaction is separate from any other, there might be too many calls to database layer
  • 26. Transaction Scripts  Revenue recognitions example – One script handles all the logic – Uses a data gateway to access data
  • 27. Domain Model An object model of the domain that incorporates both behavior and data  Rules and logic describe many different cases and slants of behavior  Web of interconnected objects – Where each object represents some meaningful entity – Dependencies between objects  How it works – Object that represent data (value objects) and business rules (behavior)
  • 28. Domain Model  Simple model – Similar to the database design – Simple to map to the database  Rich model – Different from the database design – Better for solving some complex logic and doing calculation
  • 29. Domain Model  Revenue recognitions example – Multiple classes each with different responsibility – Each class has data and logic to calculate
  • 30. Table Module A single instance that handles the business logic for all rows in a database table or view  Organizes domain logic with one class per table in the database – Single instance of the class contains various procedures that will act on the data – One object per table handle  How it works – One class that provides domain logic to table or view in database – A Domain Model will have one order object per order while a Table Module will have one object to handle all orders
  • 31. Table Module  When to use it – Useful when application is centered on data – Objects in the model are similar to the database
  • 32. Making a Choice  Pattern depends on – Complexity of the domain logic and – How the domain maps to the database
  • 33. Service Layer Defines an application’s boundary with a layer of services that establishes a set of available opertaions and coordinates the application’s response in each operation  Defines an application's boundary – Provides a set of available operations from the perspective of interfacing client layers – Encapsulates the application's business logic
  • 34. Service Layer  Domain façade – Provides thin interface to the Domain Model – Does not implement any business logic  Operation Script – Implementation of application logic – Use the Domain Model for domain logic
  • 36. I want to structure my domain layer and use a pattern that applies to each situation: A) The logic is rather extensive B) The logic is simple and procedure based C) The logic is moderate and is centered around the database EXERCISE
  • 37. From Problem to Pattern How do I structure my domain layer? A) The logic is rather extensive Domain Model
  • 38. Domain Model An object model of the domain that incorporates both behaviour and data  Rules and logic describe many different cases and slants of behaviour  Web of interconnected objects – Where each object represents some meaningful entity – Dependencies between objects  How it works – Object that represent data (value objects) and business rules (behaviour)
  • 39. From Problem to Pattern How do I structure my domain layer? B) The logic is simple and procedure based Transaction Script
  • 40. Transaction Scripts Organizes business logic by procedures where each procedure handles a single request from the presentation  Most business applications can be thought of as a series of transactions – A Transaction Script organizes all this logic primarily as a single procedure
  • 41. From Problem to Pattern How do I structure my domain layer? C) The logic is moderate and is centered around the database Table Module
  • 42. Table Module A single instance that handles the business logic for all rows in a database table or view  Organizes domain logic with one class per table in the database – Single instance of the class contains various procedures that will act on the data – One object per table handle  How it works – One class that provides domain logic to table or view in database – A Domain Model will have one order object per order while a Table Module will have one object to handle all orders
  • 43. From Problem to Pattern How do I give my domain logic distinct API? Service Layer
  • 44. Service Layer Defines an application’s boundary with a layer of services that establishes a set of available operations and coordinates the application’s response in each operation  Defines an application's boundary – Provides a set of available operations from the perspective of interfacing client layers – Encapsulates the application's business logic
  • 45. From Problem to Patterns
  • 46. Problem – Ru Movie DB (rumdb)
  • 47. From Problem to Pattern  We need to build a solution – We know the problem – sort of  To get to the solution – What patterns to use? Rumdb The RU Movie Database SolutionProblem
  • 48. Solution?  How to we get to this?
  • 49. How to define Domain Logic?  Definition – If all environment (noise) is taken way, what is left should be domain logic – Environment is any middleware (web, data, ejb)  Domain Logic should be – Simple classes and interfaces – POJOs – Easy to test! – Easy to move around – Easy to access  Limited dependencies – Dependencies can be reduced by injection
  • 50. Building the Domain  Objects – the nouns – Movie, Ratings, Channel, …  User Stories – What you do with the objects  Example – As a Operator, I want to add new movie – As a User, I want to get all movies for a specific channel – As a User, I want to rate specific movie
  • 52. Movie Database Example  The Service Layer – MovieService Provides simple and clean interface for manipulation of Movies – External services can be injected into the Service Layer
  • 53. Movie Database Example  MovieService – Provides an interface to manipulate Movies public class MovieService extends ApplicationService { private MovieDataGateway movieDataGateway; public void addMovie(Movie movie) throws ServiceException { movie.initialize(); if(!movie.validate()) { throw new ServiceException("Movie is invalid"); } movieDataGateway.addMovie(movie); getMailGateway().SendMessage("netfang@ru.is", "netfang@ru.is", "New Movie", "New Movie was added!"); } ...
  • 54. Movie Database Example  ApplicationService – Layered Supertype for the Service Layer – Provides support for all service classes public class ApplicationService { private MailGateway mailGateway; public MailGateway getMailGateway() { return mailGateway; } public void setMailGateway(MailGateway mailGateway) { this.mailGateway = mailGateway; } }
  • 55. Movie Database Example  The Domain Model – POJOs with attributes and operations
  • 56. Movie Database Example  Movie – Object for describing and manipulating contents – Has a Rating object which keeps count of views and rates public class Movie implements Comparable { private int id; private String title; private String link; private String description; private Date release; private String director; private Rating rating = new Rating(); private List<Validator> validators = new ArrayList<Validator>();
  • 57. Movie Database Example  Methods in Movie public void initialize() { rating.reset(); clearValidators(); addValidator(new DefaultMovieValidator(this)); } public boolean validate() { for(Validator v : validators) { if(!v.validate()) return false; } return true; }
  • 58. Movie Database Example  Methods in Movie – Has validators – easily extendable according to the Open-Close Principle public void clearValidators() { validators.clear(); } public void addValidator(Validator validator) { validators.add(validator); }
  • 59. Movie Database Example  Methods in Movie public void view() { rating.incrementView(); } public void rate(int rate) { rating.incrementRate(rate); } public double getAverageRate() { return rating.getAverageRate(); }
  • 60. Movie Database Example  Rating public class Rating { private int views; // Number of requests private int rates; // Number of rates private int score; // Combined values of scores public void incrementView() { views++; } public void incrementRate(int rate) { rates++; score += rate; } public double getAverageRate() { return score/rates; }
  • 62. Movie Database Example  TestSimple public TestSimple() { MovieService movieService = new MovieService(); movieService.setMovieDataGateway(new MovieDataGatewayStub()); movieService.setMailGateway(new MailServerStub()); try { movieService.addMovie(new Movie(1, "Movie 1”, "http1", "", new Date(), "")); movieService.addMovie(new Movie(1, "Movie 2", "http2", "", new Date(), "")); movieService.addMovie(new Movie(1, "Movie 3", "http3", "", new Date(), "")); movieService.addMovie(new Movie(1, "Movie 4", "http4", "", new Date(), "")); } catch (ServiceException sex) { ... } List<Movie> list = movieService.getMovies(); for (Movie movie : list) { System.out.println(movie); }
  • 63. Summary  Layering  Three Principal Layers  Domain layer Patterns to choose from – Transaction Script for simple business logic – Domain Model for complex business logic – Table Module for moderate business logic when you have good tools around Record Set – Service Layer to provide API  Building the domain  From Problem to Pattern