@despos | http://software2cents.wordpress.com
Dino Esposito
Designing Software Driven by the Domain
Mirror the Business Domain
Domain
Model
Tasks User
Experience
User Experience
Architecture Briefs
Task-based design
DDD and Legacy
Code
Key Points
Legacy Code
Code that works
Code you don’t
like to have
around
Code you can
hardly get rid of
Not necessarily badly and poorly written code!
Has an established and implicit model
Doesn’t typically have a public programmable API
Written to have some work done, not to be reused
Written years ago according to practices now obsolete
Common Aspects of Legacy Code
 Rewrite from scratch with all the abstractions you need
 While rewriting consider, incorporating existing assets as services
 Put legacy assets behind a façade and connect it to the core application
Legacy Code as a Service
NEW
System
Legacy Asset #1
Legacy Asset #2
ACL
ACL
Not all assets
are equal
• Some can be reused
as services, some not
• Some are just old and
obsolete
Before
integrating
• Evaluate costs of not
rewriting from scratch
• Evaluate costs of
integration
If it can become
a service
• Just let it go
• Focus on other things
to do!
LEGACY CODE
All systems are CRUD systems.
CREATE
READ
UPDATE
DELETE
to some extent
Quick and easy to write
Unrealistic
C R U D
Database-centric
Not tracking actions
Limited features
• Amount of business logic
• Concurrency
• Dependencies
What’s CRUD today?
Database-centric
Not tracking actions
Persistence model is just one
model to think about
Context of change must be tracked. An update
can’t simply update overriding the current state
Limited features
Plenty of business logic, concurrency issues,
interconnected entities
C R U D
Graphs of entities
Fill out view models
Log changes
to the state
C U D
R
Way too many great ideas have been first sketched
out on the paper napkins of some cafeterias.
What users perceive of each application is
what they see and what they get while
interacting with it.
What You See Is What You Get
User Interface User Experience
User Experience
The experience that users go
through when they interact with the
application.
The Fine Art of Architecting Software
BUSINESS LOGIC BUSINESS LOGIC
Bottom up Top-down
Bottom-up
Design
Passive users
accepting any UI
enforcements
Build up UI forms
as users love
them
Define
workflows from
there
Connect
workflows to
existing biz logic
Sign-off
here
UX-driven Design in 3 Steps
Sign off on what users
really want
• Sketches/wireframes
• In some cases, mockups
Build prototypes from
requirements
• Do not start on billable hours
until signed off
In Summary
For each screen have a basic flowchart
Determine what comes in and out and create view model classes
Make application layer endpoints receive/return such DTO classes
Make application layer orchestrate tasks on layers down the stack
Responsibilities
Information
architecture
Interaction Visual design
Usability
reviews
Tools Balsamiq UXPin
Infragistics
Indigo
JustInMind
The UX Architect
Pillars of Modern Software
• Task-based
and starting
from UX
• Distinct
stacks
• Avoid tiers
• Ubiquitous
language
• Bounded
contexts
DDD
Analysis
Layers
Top-
down
design
CQRS +
Events

Design Software Driven by Domain

  • 1.
    @despos | http://software2cents.wordpress.com DinoEsposito Designing Software Driven by the Domain
  • 2.
    Mirror the BusinessDomain Domain Model Tasks User Experience
  • 3.
    User Experience Architecture Briefs Task-baseddesign DDD and Legacy Code Key Points
  • 4.
    Legacy Code Code thatworks Code you don’t like to have around Code you can hardly get rid of Not necessarily badly and poorly written code!
  • 5.
    Has an establishedand implicit model Doesn’t typically have a public programmable API Written to have some work done, not to be reused Written years ago according to practices now obsolete Common Aspects of Legacy Code
  • 6.
     Rewrite fromscratch with all the abstractions you need  While rewriting consider, incorporating existing assets as services  Put legacy assets behind a façade and connect it to the core application Legacy Code as a Service NEW System Legacy Asset #1 Legacy Asset #2 ACL ACL
  • 7.
    Not all assets areequal • Some can be reused as services, some not • Some are just old and obsolete Before integrating • Evaluate costs of not rewriting from scratch • Evaluate costs of integration If it can become a service • Just let it go • Focus on other things to do! LEGACY CODE
  • 8.
    All systems areCRUD systems. CREATE READ UPDATE DELETE to some extent
  • 9.
    Quick and easyto write Unrealistic C R U D Database-centric Not tracking actions Limited features • Amount of business logic • Concurrency • Dependencies
  • 10.
  • 11.
    Database-centric Not tracking actions Persistencemodel is just one model to think about Context of change must be tracked. An update can’t simply update overriding the current state Limited features Plenty of business logic, concurrency issues, interconnected entities C R U D Graphs of entities Fill out view models Log changes to the state C U D R
  • 12.
    Way too manygreat ideas have been first sketched out on the paper napkins of some cafeterias.
  • 13.
    What users perceiveof each application is what they see and what they get while interacting with it. What You See Is What You Get User Interface User Experience
  • 14.
    User Experience The experiencethat users go through when they interact with the application.
  • 15.
    The Fine Artof Architecting Software BUSINESS LOGIC BUSINESS LOGIC
  • 16.
  • 17.
  • 19.
    Build up UIforms as users love them Define workflows from there Connect workflows to existing biz logic Sign-off here UX-driven Design in 3 Steps
  • 20.
    Sign off onwhat users really want • Sketches/wireframes • In some cases, mockups Build prototypes from requirements • Do not start on billable hours until signed off In Summary
  • 21.
    For each screenhave a basic flowchart Determine what comes in and out and create view model classes Make application layer endpoints receive/return such DTO classes Make application layer orchestrate tasks on layers down the stack
  • 22.
    Responsibilities Information architecture Interaction Visual design Usability reviews ToolsBalsamiq UXPin Infragistics Indigo JustInMind The UX Architect
  • 23.
    Pillars of ModernSoftware • Task-based and starting from UX • Distinct stacks • Avoid tiers • Ubiquitous language • Bounded contexts DDD Analysis Layers Top- down design CQRS + Events