ADAPTERS, 367
examples, 130–135, 170–171, 177–179
local vs. global identity, 127
ownership relationships, 126
Agile design
distillation, 483
MODULES, 111
reducing dependencies, 265, 435–437, 463
supple design, 243–244, 260–264
AIDS Memorial Quilt Project, 479
Analysis patterns. See also design patterns.
definition, 293
overview, 294
ADAPTERS, 367
relationships with external systems, 384–385
Architectural frameworks, 70, 74, 156–157, 271–272, 495–496
Astrolabe, 47
Awkwardness, concept analysis, 210–216
Bidirectional associations, 102–103
Blind men and the elephant, 378–381
BOUNDED CONTEXT. See also CONTEXT MAP.
code reuse, 344
CONTINUOUS INTEGRATION, 341–343
defining, 382
large-scale structure, 485–488
testing boundaries, 351
translation layers, 374. See also ANTICORRUPTION LAYER; PUBLISHED LANGUAGE.
vs. MODULES, 335
Brainstorming, 7–13, 207–216, 219
Breakthroughs, 193–200, 202–203
Business logic, in user interface layer, 77
Callbacks, 73
Cargo shipping examples. See examples, cargo shipping.
Changing the design. See refactoring.
Chemical warehouse packer example, 235–241
Chemistry example, 377
Cleese, John, 5
CLOSURE OF OPERATIONS, 268–270
Code as documentation, 40
Code reuse
BOUNDED CONTEXT, 344
Cohesion, MODULES, 109–110, 113
COHESIVE MECHANISMS
and declarative style, 426–427
vs. GENERIC SUBDOMAINS, 425
Common language. See PUBLISHED LANGUAGE; UBIQUITOUS LANGUAGE.
Communication, speech. See UBIQUITOUS LANGUAGE.
Communication, written. See documents; UML (Unified Modeling Language); UBIQUITOUS LANGUAGE.
Complexity, reducing. See distillation; large-scale structure; LAYERED ARCHITECTURE; supple design.
Composite SPECIFICATION, 273–282
Concept analysis. See also analysis patterns; examples, concept analysis.
language of the domain experts, 206–207
processes as domain objects, 222–223
researching existing resources, 217–219
SPECIFICATION, 223
trial and error, 219
Conceptual layers, See LAYERED ARCHITECTURE; RESPONSIBILITY LAYERS
Configuring SPECIFICATION, 226–227
Constructors, 141–142, 174–175. See also FACTORIES.
CONTEXT MAP. See also BOUNDED CONTEXT.
organizing and documenting, 351–352
vs. large-scale structure, 446, 485–488
CONTEXT MAP, choosing a strategy
CUSTOMER/SUPPLIER DEVELOPMENT TEAMS, 356–360
defining BOUNDED CONTEXT, 382
deployment, 387
merging OPEN HOST SERVICE and PUBLISHED LANGUAGE, 394–396
merging SEPARATE WAYS and SHARED KERNEL, 389–391
merging SHARED KERNEL and CONTINUOUS INTEGRATION, 391–393
packaging, 387
phasing out legacy systems, 393–394
for a project in progress, 388–389
specialized terminologies, 386–387
team context, 382
trade-offs, 387
transformations, 389
transforming boundaries, 382–383
Context principle, 328–329. See also BOUNDED CONTEXT; CONTEXT MAP.
CONTINUOUS INTEGRATION, 341–343, 391–393. See also integration.
Contradictions, concept analysis, 216–217
CORE DOMAIN
DOMAIN VISION STATEMENT, 415–416
flagging key elements, 419–420
MECHANISMS, 425
Costs of architecture dictated MODULES, 114–115
Customer-focused teams, 492
Database tuning, example, 102
Declarative style of design, 273–282, 426–427
Decoupling from the client, 156
Deep models
Deployment, 387. See also MODULES.
Design changes. See refactoring.
Design patterns. See also analysis patterns.
FLYWEIGHT, 320
vs. domain patterns, 309
Development teams. See teams.
Diagrams. See documents; UML (Unified Modeling Language).
Distillation. See also examples, distillation.
DOMAIN VISION STATEMENT, 415–416
INTENTION-REVEALING INTERFACES, 422–427
large-scale structure, 483, 488–489
refactoring targets, 437
role in design, 329
separating CORE concepts, 428–434
Distillation, COHESIVE MECHANISMS
and declarative style, 426–427
vs. GENERIC SUBDOMAINS, 425
Distillation, CORE DOMAIN
DOMAIN VISION STATEMENT, 415–416
flagging key elements, 419–420
MECHANISMS, 425
Distillation, GENERIC SUBDOMAINS
adapting a published design, 408
off-the-shelf solutions, 407
overview, 406
vs. COHESIVE MECHANISMS, 425
Distillation document, 418–419, 420–421
code as documentation, 40
distillation document, 418–419, 420–421
DOMAIN VISION STATEMENT, 415–416
gathering requirements from. See concept analysis; knowledge crunching.
language of, 206–207. See also UBIQUITOUS LANGUAGE.
Domain objects, life cycle, 123–124. See also AGGREGATES; FACTORIES; REPOSITORIES.
Domain patterns vs. design pattern, 309
DOMAIN VISION STATEMENT, 415–416
Domain-specific language, 272–273
Elephant and the blind men, 378–381
Encapsulation. See also FACTORIES.
INTENTION-REVEALING INTERFACES, 246
REPOSITORIES, 154
ENTITIES. See also associations; SERVICES; VALUE OBJECTS.
clustering. See AGGREGATES.
ID uniqueness, 96
referencing with VALUE OBJECTS, 98–99
vs. Java entity beans, 91
Examples
chemical warehouse packer, 235–241
chemistry, PUBLISHED LANGUAGE, 377
CLOSURE OF OPERATIONS, 269–270
composite SPECIFICATION, 278–282
extracting hidden concepts, 17–20
integration with other systems, 372–373
INTENTION-REVEALING INTERFACES, 423–424
introducing new features, 181–185
package coding in Java, 111–112
paint-mixing application, 247–249, 252–254, 256–259
PLUGGABLE COMPONENT FRAMEWORK, 475–479
PUBLISHED LANGUAGE, 377
purchase order integrity, 130–135
RESPONSIBILITY LAYERS, 452–460
selecting from Collections, 269–270
SEMATECH CIM framework, 476–479
SIDE-EFFECT-FREE FUNCTIONS, 252–254, 285–286
tuning a database, 102
VALUE OBJECTS, 102
booking
extracting hidden concepts, 17–20
concept analysis, 222
extracting hidden concepts, 17–20
identifying missing concepts, 207–210
large-scale structure, 452–460
multiple development teams, 358–360
RESPONSIBILITY LAYERS, 452–460
shipping operations and routes, 41–43
extracting hidden concepts, 17–20
identifying missing concepts, 207–210
researching existing resources, 217–219
resolving awkwardness, 211–215
COHESIVE MECHANISMS, 423–424, 425–427
organization chart, 423–424, 425–427
Examples, integration
Examples, large-scale structure
PLUGGABLE COMPONENT FRAMEWORK, 475–479
RESPONSIBILITY LAYERS, 452–460
Examples, LAYERED ARCHITECTURE
partitioning applications, 71–72
RESPONSIBILITY LAYERS, 452–460
concept analysis, 211–215, 217–219
interest calculator, 211–215, 217–219, 295–306
Explicit constraints, concept analysis, 220–222
External systems, 383–385. See also integration.
Extracting hidden concepts, 17–20. See also implicit concepts.
Facilities, 194
configuring SPECIFICATION, 226–227
designing the interface, 143
ENTITY vs. VALUE OBJECT, 144–145
invariant logic, 143
requirements, 139
Film editing anecdote, 5
Flexibility. See supple design.
FLYWEIGHT pattern, 320
Functions, SIDE-EFFECT-FREE, 250–254, 285–286
GENERIC SUBDOMAINS
adapting a published design, 408
off-the-shelf solutions, 407
overview, 406
vs. COHESIVE MECHANISMS, 425
Granularity, 108
Hidden concepts, extracting, 17–20
Holy Grail anecdote, 5
Identity
local vs. global, 127
Immutability of VALUE OBJECTS, 100–101
Infrastructure layer, 70
Infrastructure-driven packaging, 112–116
In-house solution, GENERIC SUB DOMAINS, 409–410
Insurance project example, 372–373
CONTINUOUS INTEGRATION, 341–343, 391–393
cost/benefit analysis, 371–373
elephant and the blind men, 378–381
OPEN HOST SERVICE, 374
translation layers, 374. See also PUBLISHED LANGUAGE.
Integrity. See model integrity.
INTENTION-REVEALING INTERFACES, 246–249, 422–427
Interest calculator examples, 211–215, 217–219, 295–306
Internet Explorer bookmark anecdote, 57–59
Inventory management example, 504–505
Investment banking example, 194–200, 211–215, 501
Isolated domain layer, 106–107
Isolating the domain. See ANTICORRUPTION LAYER; distillation; LAYERED ARCHITECTURE.
Iterative design process, 14, 188, 445
Jargon. See PUBLISHED LANGUAGE; UBIQUITOUS LANGUAGE.
Java entity beans vs. ENTITIES, 91
Knowledge crunching, example, 7–12
Language of the domain experts, 206–207
Large-scale structure. See also distillation; examples, large-scale structure; LAYERED ARCHITECTURE; strategic design.
CONTEXT MAP, 446
definition, 442
development constraints, 445–446
minimalism, 481
PLUGGABLE COMPONENT FRAMEWORK, 475–479
refactoring, 481
role in design, 329
team communication, 482
Large-scale structure, RESPONSIBILITY LAYERS
useful characteristics, 461
LAYERED ARCHITECTURE. See also distillation; examples, LAYERED ARCHITECTURE; large-scale structure.
callbacks, 73
conceptual layers, 70
diagram, 68
infrastructure layer, 70
isolated domain layer, 106–107
MVC (MODEL-VIEW-CONTROLLER), 73
OBSERVERS, 73
partitioning complex programs, 70
separating user interface, application, and domain, 76–79
SMART UI, 73
TRANSACTION SCRIPT, 79
user interface layer, 70, 76–79
value of, 69
LAYERED ARCHITECTURE, ANTICORRUPTION LAYER
ADAPTERS, 367
relationships with external systems, 384–385
LAYERED ARCHITECTURE, RESPONSIBILITY LAYERS
useful characteristics, 461
Legacy systems, phasing out, 393–394
Life cycle of domain objects, 123–124. See also AGGREGATES; FACTORIES; REPOSITORIES.
Loan management examples. See examples, loan management.
Local vs. global identity, 127
Merging
OPEN HOST SERVICE and PUBLISHED LANGUAGE, 394–396
SEPARATE WAYS to SHARED KERNEL, 389–391
SHARED KERNEL to CONTINUOUS INTEGRATION, 391–393
METADATA MAPPING LAYERS, 149
Mistaken identity anecdote, 89
Model integrity. See also BOUNDED CONTEXT; CONTEXT MAP; multiple models.
establishing boundaries, 333–334
multiple models, 333
recognizing relationships, 333–334
unification, 332. See also CONTINUOUS INTEGRATION.
Model layer. See domain layer.
Model-based language. See UBIQUITOUS LANGUAGE.
correspondence to design, 50–51
overview, 49
relevance of model, 49
Modeling
integrating with programming, 60–62
Models
binding to implementation. See MODEL-DRIVEN DESIGN.
MODEL-VIEW-CONTROLLER (MVC), 73
agile, 111
determining meaning of, 110
infrastructure-driven packaging, 112–116
naming, 110
overview, 109
packaging domain objects, 115
vs. BOUNDED CONTEXT, 335
Monty Python anecdote, 5
MVC (MODEL-VIEW-CONTROLLER), 73
Naming
BOUNDED CONTEXTS, 345
conventions for supple design, 247
INTENTION-REVEALING INTERFACES, 247
MODULES, 110
SERVICES, 105
Object references. See REPOSITORIES.
Objects. See also ENTITIES; VALUE OBJECTS.
creating, 234–235. See also constructors; FACTORIES.
designing for relational databases, 159–161
made up of objects. See AGGREGATES; COMPOSITE.
OBSERVERS, 73
Off-the-shelf solutions, 407
OPEN HOST SERVICE, converting to PUBLISHED LANGUAGE, 394–396
Overbooking examples, 18–19, 222
Packaging. See deployment; MODULES.
Paint-mixing application, examples, 247–249, 252–254, 256–259
Partitioning
complex programs. See large-scale structure; LAYERED ARCHITECTURE.
SERVICES into layers, 107
Patterns, 507–510. See also analysis patterns; design patterns; large-scale structure.
PCB design anecdote, 7–13, 501
Performance tuning, example, 185–186
PLUGGABLE COMPONENT FRAMEWORK, 475–479
POLICY pattern. See STRATEGY pattern.
Presentation layer. See user interface layer.
Procedural languages, and MODEL-DRIVEN DESIGN, 51–54
Processes as domain objects, 222–223
elephant and the blind men, 378–381
example, 377
merging with OPEN HOST SERVICE, 394–396
Quilt project, 479
definition, 188
designing for developers, 324
distillation, 437
examples, 177–179, 181–185, 194–200, 247–249
large-scale structure, 481
supple design, 191
Refactoring targets, 437
Reference objects. See ENTITIES.
advantages, 152
architectural frameworks, 156–157
decoupling from the client, 156
designing objects for relational databases, 159–161
encapsulation, 154
METADATA MAPPING LAYERS, 149
references to preexisting domain objects, 149
transaction control, 156
transient objects, 149
Requirements gathering. See concept analysis; knowledge crunching; UBIQUITOUS LANGUAGE.
useful characteristics, 461
Reusing code
BOUNDED CONTEXT, 344
Selecting objects, 229–234, 269–270
SEPARATE WAYS, 384–385, 389–391
SERVICES. See also ENTITIES; VALUE OBJECTS.
access to, 108
granularity, 108
and the isolated domain layer, 106–107
naming, 105
partitioning into layers, 107
example, 359
merging with CONTINUOUS INTEGRATION, 391–393
merging with SEPARATE WAYS, 389–391
Sharing VALUE OBJECTS, 100–101
Shipping examples. See examples, cargo shipping.
Side effects, 250. See also ASSERTIONS.
SIDE-EFFECT-FREE FUNCTIONS, 250–254, 285–286
Simplifying your design. See distillation; large-scale structure; LAYERED ARCHITECTURE.
SMART UI, 73
SPECIFICATION. See also analysis patterns; design patterns.
applying, 227
business rules, 225
combining. See composite SPECIFICATION.
implementing, 227
purpose, 227
validating objects, 227, 228–229
Speech, common language. See UBIQUITOUS LANGUAGE.
Speech, modeling through, 30–32
Strategic design. See also large-scale structure.
assessing the situation, 490
customer-focused architecture teams, 492
developers, role of, 494
essential requirements, 492–495
evolution, 493
EVOLVING ORDER, 491
feedback process, 493
multiple development teams, 491
objects, role of, 494
team communication, 492
team makeup, 494
CLOSURE OF OPERATIONS, 268–270
composite SPECIFICATION, 273–282
declarative style of design, 273–282
domain-specific language, 272–273
INTENTION-REVEALING INTERFACES, 246–249
large-scale structure, 480–483
naming conventions, 247
SIDE-EFFECT-FREE FUNCTIONS, 250–254, 285–286
Team context, 382
choosing a strategy, 382
communication, large-scale structure, 482
customer-focused, 492
defining BOUNDED CONTEXT, 382
developer community, maturity of, 117–119
Teams, and strategic design
communication, 492
customer-focused, 492
developers, role of, 494
makeup of, 494
multiple teams, 491
Teams, multiple
strategic design, 491
Terminology. See BOUNDED CONTEXT; PUBLISHED LANGUAGE; UBIQUITOUS LANGUAGE.
Testing boundaries, 351
Transaction control, 156
TRANSACTION SCRIPT, 79
Transformations, 389
Transforming boundaries, 382–383
Transient objects, 149
Translation layers, 374
Tuning a database, example, 102
UBIQUITOUS LANGUAGE. See also PUBLISHED LANGUAGE.
designing objects for relational databases, 160–161
domain-specific language, 272–273
language of the domain experts, 206–207
specialized terminologies, 386–387
requirements analysis, 25
UML (Unified Modeling Language), 35–37
Unification, 332. See also CONTINUOUS INTEGRATION.
Unified Modeling Language (UML), 35–37
Updating the design. See refactoring.
business logic, 77
definition, 70
separating from application and domain, 76–79
Validating objects, 227, 228–229
VALUE OBJECTS. See also ENTITIES; SERVICES.
bidirectional associations, 102–103
change management, 101
clustering. See AGGREGATES.
passing as parameters, 99
tuning a database, example, 102
Vision statement. See DOMAIN VISION STATEMENT.
Vocabulary. See PUBLISHED LANGUAGE; UBIQUITOUS LANGUAGE.
Waterfall design method, 14