SlideShare a Scribd company logo
Software Development
Training wheels
Naveen Muguda
Software Development: Beyond Training wheels
Training Wheels
• Programming with Static Classes
• Data Driven Design
• Transaction scripts
• Anemic Domain Model
Complexity vs Familiarity
• lineItemList.stream().map(lineItem ->
lineItem.getTerms().getPrice()).reduce(ZERO, BigDecimal::add)
• map()
• reduce()
• anonymous function
• Is this code complex or is the programming style unfamiliar?
currying
• function add (a, b) { return a + b; }
• function add (a) { return function (b) { return a + b; } }
• add(3)(4);
• var add3 = add(3);
• add3(4);
• https://en.wikipedia.org/wiki/Currying
Currying (continued)
• add x y = x + y
• map (add 2) [1, 2, 3] -- gives [3, 4, 5]
• add2 y = add 2 y
• map add2 [1, 2, 3]
Software Development: Beyond Training wheels
Static classes
• public class Position{
• public double latitude; public double longitude; }
• public class PositionUtility {
• public static double distance( Position position1, Position position2 )
public static double heading( Position position1, Position position2 )
}
• Positions are parameters to PositionUtility
Static classes(..continued)
• double distance = PositionUtility.distance( myHouse, coffeeShop );
double heading = PositionUtility.heading( myHouse, coffeeShop);
Object Oriented Programming
• public class Position {
• public double distance( Position position )}
• public double heading( Position position ) {}
• private double latitude; private double longitude; }
Object Oriented Programming(..continued)
• Position myHouse = new Position( , );
• Position coffeeShop = new Position( , );
• double distance = myHouse.distance( coffeeShop );
• double heading = myHouse.heading( coffeeShop );
Currying vs Object Orientedness
• add(3, 4) => PositionUtil.distance(Position position1, Position
position2 )
• add 3 = > Position house = new ….
• add3(4) = > house.distance(coffeeShop)
• ‘identity’
Stack in procedural style
structure stack:
maxsize : integer
top : integer
items : array of item
procedure push(stk : stack, x : item):
if stk.top = stk.maxsize:
report overflow error
else:
stk.items[stk.top] ← x
stk.top ← stk.top + 1
procedure pop(stk : stack):
if stk.top = 0:
report underflow error
else:
stk.top ← stk.top − 1
r ← stk.items[stk.top]
Stack in Object Oriented style
public Class Stack
{
private ...
public Stack(){}
public push(){}
public pop(){}
}
Encapsulation and Information Hiding
• Changes to fields(from array to linked list), will cascade to other
methods
• Lazy initialization in the constructor, will move additional behavior to
push and pop
capsule
• a small (glass or plastic) container that has something (such as a
liquid) inside of it.
• There is an inside and outside to the capsule
• There is no or partial understanding of the contents of the capsule for
the outside
Invariants
• size of the stack = total valid pushs – total valid pops
• stk.top is at the top of the data in the stack
• The responsibility of maintaining these invariants lie with Stack
• Stack is in charge of its destiny
• Single place to reason
encapsulation
• encapsulate what varies
• encapsulating with classes frees a dimension of change
• Object oriented-ness provides currying at the object level
Spring2.0 feature
• http://tinyurl.com/j7wykok
Design Approaches
Different schools
• Data Driven Design: Head, Tail, Body, 4 Legs
• Event Driven Design: Start, Stop, Speed Up, Slow Down
• Responsibility Driven Design: eat, run, stand, sit, sleep, poop
Data driven design
• Modelling done for Data(ER diagrams, DFDs)
• Programs are massagers, routers and processors of data
• No recommendations on modularizing the behavior
• Typically this behavior is placed in classes Service, Util, Helper or
Manager.
• Useful for building CRUDy applications
• https://en.wikipedia.org/wiki/Data-driven_programming
Responsibility Driven Design
focuses on the contract by asking:
• What actions is this object responsible for?
• What information does this object share?
RDD:Objects
• things that have machine like behaviors that can be plugged together
to work in concert
• play well-defined roles and encapsulate scripted responses and
information
• Subsystem: logical grouping of collaborators.
RDD:responsibilities
• an obligation to perform a task or know information
• public(checkout), private, subordinate(provider), sequencing
Data Driven vs Responsibility Driven Design
• https://practicingruby.com/articles/responsibility-centric-vs-data-
centric-design
Control Style
• distribution of control responsibilities that results in developing a
control style.
• Central
• Clustered
• Delegated
• https://en.wikipedia.org/wiki/Responsibility-driven_design
• Same school of thought as Kent Beck and Ward
Cunningham(http://wiki.c2.com/?ResponsibilityDrivenDesign)
Software Development: Beyond Training wheels
Transaction Scripts
• business applications modelled as a series of transactions.
• Each transaction will have its own Transaction Script
• A Transaction Script organizes all this logic primarily as a single
procedure
• although common subtasks can be broken into sub procedures.
• Not (functionally)scalable
Transaction Scripts: Symptoms
• AddHandler
• RemoveHandler
• ViewHandler
• PaymentHandler
Software Development: Beyond Training wheels
Domain Model
• https://www.cp.eng.chula.ac.th/~wiwat/EAA/EAAdomain.pdf
Software Development: Beyond Training wheels
Software Development: Beyond Training wheels
Software Development: Beyond Training wheels
Fowler Speak: Anemic Domain Model
• Domain objects are just bags of getters and setters
• No behavior in Domain objects
• a set of service objects which capture all the domain logic.
• Services use domain model for data
• http://www.martinfowler.com/bliki/AnemicDomainModel.html
invariants
• Remember the stack example, similarly maintaining invariant
• The responsibility of getting the terms lies with Checkout and not an
external utility/Service
(Application)Services
Application Services (..continued)
• This layer is kept thin. It does not contain business rules or knowledge,
but only coordinates tasks
• delegates work to collaborations of domain objects in the next layer
down.
• The key point here is that the Service Layer is thin - all the key logic
lies in the domain layer.
• Domain objects are re-used, services are typically not
Application Services (..continued)
• In general, the more behavior you find in the services, the more likely
you are to be robbing yourself of the benefits of a domain model.
• If all your logic is in services, you've robbed yourself blind.
Rich Domain Model
• https://www.link-intersystems.com/blog/2011/10/01/anemic-vs-rich-
domain-models/
• Services in a service-oriented architecture are usually application
services that encapsulate use cases.
• The only difference to plain transaction scripts is often that they
use parameter objects that are named after domain objects.
Static Object
Data Driven
Responsibility
Driven
Transaction
Script
Domain
Model
Anemic Domain
Model
Rich Domain
Model
Procedural
Static Object
Data Driven
Responsibility
Driven
Transaction
Script
Domain
Model
Anemic Domain
Model
Rich Domain
Model
Domain
Driven Design
Naked Objects
Domain Driven Design
• https://en.wikipedia.org/wiki/Domain-driven_design
• Entity
• Value Object An object that contains attributes but has no conceptual
identity. They should be treated as immutable.
• Service
• Factory.
Entity
• An object that is not defined by its attributes, but rather by a thread
of continuity and its identity.
• have life cycles that can radically change their form and content
• class definitions, responsibilities, attributes, and associations should
revolve around who they are
• Eg. Cart, Checkout, Order, Store
Services
• The operation relates to a domain concept that is not a natural part of
an Entity or Value Object
• The interface is defined in terms of other elements in the domain
model
• The operation is stateless
Services (..continued)
• They exist in three layers
• Application
• Domain
• Infrastructure
• http://tinyurl.com/z2yeutt
Application Services
• Application Services are the interface used by the outside world,
where the outside world can’t communicate via our Entity objects,
but may have other representations of them.
• Application Services could map outside messages to internal
operations and processes
• communicating with services in the Domain and Infrastructure layers
to provide cohesive operations for outside clients.
• Don’t contain any business logic
• Not part of domain layer
Domain services
• Domain services are the coordinators, allowing higher level
functionality between many different smaller parts.
• Part of domain model
• Can contain business logic
Factories and Repositories
• http://tinyurl.com/jdhuebj
• Factory encapsulates the knowledge needed to create a complex
object
• Can use FactoryMethod, AbstractFactory or Builder
• Can create Entities and ValueObjects
Repositories
• To do anything with an object, you have to hold a reference to it. How
do you get that reference?
• One way is to create the object
• A second way is to traverse an association. You start with an object you
already know and ask it for an associated object.
• Repositories are the second way
• Example: StoreRegistry
Naked Objects
• https://en.wikipedia.org/wiki/Naked_objects
Take Aways
• Domain Model >> Data Model
• Domain Objects >> bags of getters and setters
• Heart and Brain of your system is Domain Model
• Domain Objects(and services) are responsible for all of our business
logic
• Entities have identity and continuity
• Entities trump Services
• Layers preceding Domain Model have as little logic as possible
• Domain Objects react to ’business events’ and delegate

More Related Content

PDF
Open event (Drupalcamp Sunderland 2015)
PDF
Data centric Metaprogramming by Vlad Ulreche
PPTX
The openCypher Project - An Open Graph Query Language
PDF
Introducing Neo4j 3.0
PPTX
Graph database & neo4j
PDF
GraphQL 101
PDF
A general introduction to Spring Data / Neo4J
PDF
Introducing Neo4j
Open event (Drupalcamp Sunderland 2015)
Data centric Metaprogramming by Vlad Ulreche
The openCypher Project - An Open Graph Query Language
Introducing Neo4j 3.0
Graph database & neo4j
GraphQL 101
A general introduction to Spring Data / Neo4J
Introducing Neo4j

What's hot (9)

PDF
Intro to Neo4j and Graph Databases
PDF
How Graph Databases efficiently store, manage and query connected data at s...
PPT
DITA 1.3 Keyscopes
PDF
Migrate
PPTX
NoSQL Graph Databases - Why, When and Where
PPTX
Introduction: Relational to Graphs
PPTX
Graph Analytics: Graph Algorithms Inside Neo4j
PDF
Interpreting Relational Schema to Graphs
PDF
Getting started with Graph Databases & Neo4j
Intro to Neo4j and Graph Databases
How Graph Databases efficiently store, manage and query connected data at s...
DITA 1.3 Keyscopes
Migrate
NoSQL Graph Databases - Why, When and Where
Introduction: Relational to Graphs
Graph Analytics: Graph Algorithms Inside Neo4j
Interpreting Relational Schema to Graphs
Getting started with Graph Databases & Neo4j
Ad

Viewers also liked (20)

PPT
Poligonos
DOC
Anschp25
PPTX
Commercial for CE Courses
PPT
Presentaciomateria
PPT
Maria Fojk Edu Learn Conference Presentation
PPTX
PDF
Kaip padidinti gydymo režimo laikymąsi
PPT
iPractice banners
PPTX
PRESENTATION JONAS BROTHERS
PPTX
Presentatie Onderstroom 2015 op Stroom Event 29 september 2015 in LantarenVen...
PPT
Focus the digital revolution
PPT
The Splendid Island Of Moorea
PPT
You Can Dance Roztańczone Miasto 2007
PPS
Things you don't see every day‏
PPTX
PDF
E Tqf Open Source Lms
PPT
Victoria, Eli, Mica
ODP
Open Graphics
PPS
Pictures Of Earth Takeb By Astronaut Sunita Williams
PPSX
Using Traditional Media In Nontraditional Ways
Poligonos
Anschp25
Commercial for CE Courses
Presentaciomateria
Maria Fojk Edu Learn Conference Presentation
Kaip padidinti gydymo režimo laikymąsi
iPractice banners
PRESENTATION JONAS BROTHERS
Presentatie Onderstroom 2015 op Stroom Event 29 september 2015 in LantarenVen...
Focus the digital revolution
The Splendid Island Of Moorea
You Can Dance Roztańczone Miasto 2007
Things you don't see every day‏
E Tqf Open Source Lms
Victoria, Eli, Mica
Open Graphics
Pictures Of Earth Takeb By Astronaut Sunita Williams
Using Traditional Media In Nontraditional Ways
Ad

Similar to Software Development: Beyond Training wheels (20)

PPT
Domain Driven Design (DDD)
PDF
Domain driven design and model driven development
PDF
Domain Driven Design Development Spring Portfolio
PDF
Domain-Driven Design
PPTX
Domain Driven Design
PPTX
Intro to Domain Driven Design
PPTX
Domain Driven Design
PPTX
Seminar - Scalable Enterprise Application Development Using DDD and CQRS
PDF
D2 domain driven-design
PPTX
Domain Driven Design
PDF
Software design with Domain-driven design
PPT
Importance Of Being Driven
PPTX
Marco Mancuso - Data Context Interaction
PPTX
Schibsted Spain - Day 1 - DDD Course
PPTX
Domain Driven Design
ODP
RailswayCon 2010 - Command Your Domain
PDF
Domain driven design: a gentle introduction
PPTX
Programming in the large
PPTX
Introduction to DDD
Domain Driven Design (DDD)
Domain driven design and model driven development
Domain Driven Design Development Spring Portfolio
Domain-Driven Design
Domain Driven Design
Intro to Domain Driven Design
Domain Driven Design
Seminar - Scalable Enterprise Application Development Using DDD and CQRS
D2 domain driven-design
Domain Driven Design
Software design with Domain-driven design
Importance Of Being Driven
Marco Mancuso - Data Context Interaction
Schibsted Spain - Day 1 - DDD Course
Domain Driven Design
RailswayCon 2010 - Command Your Domain
Domain driven design: a gentle introduction
Programming in the large
Introduction to DDD

More from Naveenkumar Muguda (11)

PPTX
Ads quality
PPTX
Components: An overlooked abstraction
PPTX
Powerful software linkedin
PPTX
Yin Yangs of Software Development
PPTX
Abstract Algebra and Category Theory
PPTX
Invariants & inversions
PPTX
Functional Programming, simplified
PPTX
Log* with Cassandra
PDF
Refactoring et al
PDF
System design
Ads quality
Components: An overlooked abstraction
Powerful software linkedin
Yin Yangs of Software Development
Abstract Algebra and Category Theory
Invariants & inversions
Functional Programming, simplified
Log* with Cassandra
Refactoring et al
System design

Recently uploaded (20)

PPTX
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
PDF
737-MAX_SRG.pdf student reference guides
PPT
Mechanical Engineering MATERIALS Selection
DOCX
573137875-Attendance-Management-System-original
PDF
Human-AI Collaboration: Balancing Agentic AI and Autonomy in Hybrid Systems
DOCX
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
PDF
Artificial Superintelligence (ASI) Alliance Vision Paper.pdf
PPTX
Construction Project Organization Group 2.pptx
PDF
BIO-INSPIRED HORMONAL MODULATION AND ADAPTIVE ORCHESTRATION IN S-AI-GPT
PPTX
UNIT 4 Total Quality Management .pptx
PDF
Categorization of Factors Affecting Classification Algorithms Selection
PPTX
additive manufacturing of ss316l using mig welding
PPTX
Safety Seminar civil to be ensured for safe working.
PPTX
Engineering Ethics, Safety and Environment [Autosaved] (1).pptx
PPTX
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
PDF
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
PPT
Introduction, IoT Design Methodology, Case Study on IoT System for Weather Mo...
PDF
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
PPTX
Fundamentals of Mechanical Engineering.pptx
PDF
Embodied AI: Ushering in the Next Era of Intelligent Systems
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
737-MAX_SRG.pdf student reference guides
Mechanical Engineering MATERIALS Selection
573137875-Attendance-Management-System-original
Human-AI Collaboration: Balancing Agentic AI and Autonomy in Hybrid Systems
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
Artificial Superintelligence (ASI) Alliance Vision Paper.pdf
Construction Project Organization Group 2.pptx
BIO-INSPIRED HORMONAL MODULATION AND ADAPTIVE ORCHESTRATION IN S-AI-GPT
UNIT 4 Total Quality Management .pptx
Categorization of Factors Affecting Classification Algorithms Selection
additive manufacturing of ss316l using mig welding
Safety Seminar civil to be ensured for safe working.
Engineering Ethics, Safety and Environment [Autosaved] (1).pptx
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
Introduction, IoT Design Methodology, Case Study on IoT System for Weather Mo...
Mohammad Mahdi Farshadian CV - Prospective PhD Student 2026
Fundamentals of Mechanical Engineering.pptx
Embodied AI: Ushering in the Next Era of Intelligent Systems

Software Development: Beyond Training wheels

  • 3. Training Wheels • Programming with Static Classes • Data Driven Design • Transaction scripts • Anemic Domain Model
  • 4. Complexity vs Familiarity • lineItemList.stream().map(lineItem -> lineItem.getTerms().getPrice()).reduce(ZERO, BigDecimal::add) • map() • reduce() • anonymous function • Is this code complex or is the programming style unfamiliar?
  • 5. currying • function add (a, b) { return a + b; } • function add (a) { return function (b) { return a + b; } } • add(3)(4); • var add3 = add(3); • add3(4); • https://en.wikipedia.org/wiki/Currying
  • 6. Currying (continued) • add x y = x + y • map (add 2) [1, 2, 3] -- gives [3, 4, 5] • add2 y = add 2 y • map add2 [1, 2, 3]
  • 8. Static classes • public class Position{ • public double latitude; public double longitude; } • public class PositionUtility { • public static double distance( Position position1, Position position2 ) public static double heading( Position position1, Position position2 ) } • Positions are parameters to PositionUtility
  • 9. Static classes(..continued) • double distance = PositionUtility.distance( myHouse, coffeeShop ); double heading = PositionUtility.heading( myHouse, coffeeShop);
  • 10. Object Oriented Programming • public class Position { • public double distance( Position position )} • public double heading( Position position ) {} • private double latitude; private double longitude; }
  • 11. Object Oriented Programming(..continued) • Position myHouse = new Position( , ); • Position coffeeShop = new Position( , ); • double distance = myHouse.distance( coffeeShop ); • double heading = myHouse.heading( coffeeShop );
  • 12. Currying vs Object Orientedness • add(3, 4) => PositionUtil.distance(Position position1, Position position2 ) • add 3 = > Position house = new …. • add3(4) = > house.distance(coffeeShop) • ‘identity’
  • 13. Stack in procedural style structure stack: maxsize : integer top : integer items : array of item procedure push(stk : stack, x : item): if stk.top = stk.maxsize: report overflow error else: stk.items[stk.top] ← x stk.top ← stk.top + 1 procedure pop(stk : stack): if stk.top = 0: report underflow error else: stk.top ← stk.top − 1 r ← stk.items[stk.top]
  • 14. Stack in Object Oriented style public Class Stack { private ... public Stack(){} public push(){} public pop(){} }
  • 15. Encapsulation and Information Hiding • Changes to fields(from array to linked list), will cascade to other methods • Lazy initialization in the constructor, will move additional behavior to push and pop
  • 16. capsule • a small (glass or plastic) container that has something (such as a liquid) inside of it. • There is an inside and outside to the capsule • There is no or partial understanding of the contents of the capsule for the outside
  • 17. Invariants • size of the stack = total valid pushs – total valid pops • stk.top is at the top of the data in the stack • The responsibility of maintaining these invariants lie with Stack • Stack is in charge of its destiny • Single place to reason
  • 18. encapsulation • encapsulate what varies • encapsulating with classes frees a dimension of change • Object oriented-ness provides currying at the object level
  • 21. Different schools • Data Driven Design: Head, Tail, Body, 4 Legs • Event Driven Design: Start, Stop, Speed Up, Slow Down • Responsibility Driven Design: eat, run, stand, sit, sleep, poop
  • 22. Data driven design • Modelling done for Data(ER diagrams, DFDs) • Programs are massagers, routers and processors of data • No recommendations on modularizing the behavior • Typically this behavior is placed in classes Service, Util, Helper or Manager. • Useful for building CRUDy applications • https://en.wikipedia.org/wiki/Data-driven_programming
  • 23. Responsibility Driven Design focuses on the contract by asking: • What actions is this object responsible for? • What information does this object share?
  • 24. RDD:Objects • things that have machine like behaviors that can be plugged together to work in concert • play well-defined roles and encapsulate scripted responses and information • Subsystem: logical grouping of collaborators.
  • 25. RDD:responsibilities • an obligation to perform a task or know information • public(checkout), private, subordinate(provider), sequencing
  • 26. Data Driven vs Responsibility Driven Design • https://practicingruby.com/articles/responsibility-centric-vs-data- centric-design
  • 27. Control Style • distribution of control responsibilities that results in developing a control style. • Central • Clustered • Delegated • https://en.wikipedia.org/wiki/Responsibility-driven_design • Same school of thought as Kent Beck and Ward Cunningham(http://wiki.c2.com/?ResponsibilityDrivenDesign)
  • 29. Transaction Scripts • business applications modelled as a series of transactions. • Each transaction will have its own Transaction Script • A Transaction Script organizes all this logic primarily as a single procedure • although common subtasks can be broken into sub procedures. • Not (functionally)scalable
  • 30. Transaction Scripts: Symptoms • AddHandler • RemoveHandler • ViewHandler • PaymentHandler
  • 36. Fowler Speak: Anemic Domain Model • Domain objects are just bags of getters and setters • No behavior in Domain objects • a set of service objects which capture all the domain logic. • Services use domain model for data • http://www.martinfowler.com/bliki/AnemicDomainModel.html
  • 37. invariants • Remember the stack example, similarly maintaining invariant • The responsibility of getting the terms lies with Checkout and not an external utility/Service
  • 39. Application Services (..continued) • This layer is kept thin. It does not contain business rules or knowledge, but only coordinates tasks • delegates work to collaborations of domain objects in the next layer down. • The key point here is that the Service Layer is thin - all the key logic lies in the domain layer. • Domain objects are re-used, services are typically not
  • 40. Application Services (..continued) • In general, the more behavior you find in the services, the more likely you are to be robbing yourself of the benefits of a domain model. • If all your logic is in services, you've robbed yourself blind.
  • 41. Rich Domain Model • https://www.link-intersystems.com/blog/2011/10/01/anemic-vs-rich- domain-models/ • Services in a service-oriented architecture are usually application services that encapsulate use cases. • The only difference to plain transaction scripts is often that they use parameter objects that are named after domain objects.
  • 43. Static Object Data Driven Responsibility Driven Transaction Script Domain Model Anemic Domain Model Rich Domain Model Domain Driven Design Naked Objects
  • 44. Domain Driven Design • https://en.wikipedia.org/wiki/Domain-driven_design • Entity • Value Object An object that contains attributes but has no conceptual identity. They should be treated as immutable. • Service • Factory.
  • 45. Entity • An object that is not defined by its attributes, but rather by a thread of continuity and its identity. • have life cycles that can radically change their form and content • class definitions, responsibilities, attributes, and associations should revolve around who they are • Eg. Cart, Checkout, Order, Store
  • 46. Services • The operation relates to a domain concept that is not a natural part of an Entity or Value Object • The interface is defined in terms of other elements in the domain model • The operation is stateless
  • 47. Services (..continued) • They exist in three layers • Application • Domain • Infrastructure • http://tinyurl.com/z2yeutt
  • 48. Application Services • Application Services are the interface used by the outside world, where the outside world can’t communicate via our Entity objects, but may have other representations of them. • Application Services could map outside messages to internal operations and processes • communicating with services in the Domain and Infrastructure layers to provide cohesive operations for outside clients. • Don’t contain any business logic • Not part of domain layer
  • 49. Domain services • Domain services are the coordinators, allowing higher level functionality between many different smaller parts. • Part of domain model • Can contain business logic
  • 50. Factories and Repositories • http://tinyurl.com/jdhuebj • Factory encapsulates the knowledge needed to create a complex object • Can use FactoryMethod, AbstractFactory or Builder • Can create Entities and ValueObjects
  • 51. Repositories • To do anything with an object, you have to hold a reference to it. How do you get that reference? • One way is to create the object • A second way is to traverse an association. You start with an object you already know and ask it for an associated object. • Repositories are the second way • Example: StoreRegistry
  • 53. Take Aways • Domain Model >> Data Model • Domain Objects >> bags of getters and setters • Heart and Brain of your system is Domain Model • Domain Objects(and services) are responsible for all of our business logic • Entities have identity and continuity • Entities trump Services • Layers preceding Domain Model have as little logic as possible • Domain Objects react to ’business events’ and delegate

Editor's Notes

  • #13: StoreRegistry
  • #20: Compare with StoreCheckoutFactory
  • #26: Responsibility of cart, checkout, provider etc.
  • #29: Delegation between Checkout and Providers
  • #34: Controller vs WebProxy, Controller vs Facade
  • #51: StoreCheckoutFactory