Eric Evans 2003 - Domain-Driven Design - Tackling Complexity in the Heart of Software 1.docx

1,139 views 202 slides Apr 21, 2022
Slide 1
Slide 1 of 556
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130
Slide 131
131
Slide 132
132
Slide 133
133
Slide 134
134
Slide 135
135
Slide 136
136
Slide 137
137
Slide 138
138
Slide 139
139
Slide 140
140
Slide 141
141
Slide 142
142
Slide 143
143
Slide 144
144
Slide 145
145
Slide 146
146
Slide 147
147
Slide 148
148
Slide 149
149
Slide 150
150
Slide 151
151
Slide 152
152
Slide 153
153
Slide 154
154
Slide 155
155
Slide 156
156
Slide 157
157
Slide 158
158
Slide 159
159
Slide 160
160
Slide 161
161
Slide 162
162
Slide 163
163
Slide 164
164
Slide 165
165
Slide 166
166
Slide 167
167
Slide 168
168
Slide 169
169
Slide 170
170
Slide 171
171
Slide 172
172
Slide 173
173
Slide 174
174
Slide 175
175
Slide 176
176
Slide 177
177
Slide 178
178
Slide 179
179
Slide 180
180
Slide 181
181
Slide 182
182
Slide 183
183
Slide 184
184
Slide 185
185
Slide 186
186
Slide 187
187
Slide 188
188
Slide 189
189
Slide 190
190
Slide 191
191
Slide 192
192
Slide 193
193
Slide 194
194
Slide 195
195
Slide 196
196
Slide 197
197
Slide 198
198
Slide 199
199
Slide 200
200
Slide 201
201
Slide 202
202
Slide 203
203
Slide 204
204
Slide 205
205
Slide 206
206
Slide 207
207
Slide 208
208
Slide 209
209
Slide 210
210
Slide 211
211
Slide 212
212
Slide 213
213
Slide 214
214
Slide 215
215
Slide 216
216
Slide 217
217
Slide 218
218
Slide 219
219
Slide 220
220
Slide 221
221
Slide 222
222
Slide 223
223
Slide 224
224
Slide 225
225
Slide 226
226
Slide 227
227
Slide 228
228
Slide 229
229
Slide 230
230
Slide 231
231
Slide 232
232
Slide 233
233
Slide 234
234
Slide 235
235
Slide 236
236
Slide 237
237
Slide 238
238
Slide 239
239
Slide 240
240
Slide 241
241
Slide 242
242
Slide 243
243
Slide 244
244
Slide 245
245
Slide 246
246
Slide 247
247
Slide 248
248
Slide 249
249
Slide 250
250
Slide 251
251
Slide 252
252
Slide 253
253
Slide 254
254
Slide 255
255
Slide 256
256
Slide 257
257
Slide 258
258
Slide 259
259
Slide 260
260
Slide 261
261
Slide 262
262
Slide 263
263
Slide 264
264
Slide 265
265
Slide 266
266
Slide 267
267
Slide 268
268
Slide 269
269
Slide 270
270
Slide 271
271
Slide 272
272
Slide 273
273
Slide 274
274
Slide 275
275
Slide 276
276
Slide 277
277
Slide 278
278
Slide 279
279
Slide 280
280
Slide 281
281
Slide 282
282
Slide 283
283
Slide 284
284
Slide 285
285
Slide 286
286
Slide 287
287
Slide 288
288
Slide 289
289
Slide 290
290
Slide 291
291
Slide 292
292
Slide 293
293
Slide 294
294
Slide 295
295
Slide 296
296
Slide 297
297
Slide 298
298
Slide 299
299
Slide 300
300
Slide 301
301
Slide 302
302
Slide 303
303
Slide 304
304
Slide 305
305
Slide 306
306
Slide 307
307
Slide 308
308
Slide 309
309
Slide 310
310
Slide 311
311
Slide 312
312
Slide 313
313
Slide 314
314
Slide 315
315
Slide 316
316
Slide 317
317
Slide 318
318
Slide 319
319
Slide 320
320
Slide 321
321
Slide 322
322
Slide 323
323
Slide 324
324
Slide 325
325
Slide 326
326
Slide 327
327
Slide 328
328
Slide 329
329
Slide 330
330
Slide 331
331
Slide 332
332
Slide 333
333
Slide 334
334
Slide 335
335
Slide 336
336
Slide 337
337
Slide 338
338
Slide 339
339
Slide 340
340
Slide 341
341
Slide 342
342
Slide 343
343
Slide 344
344
Slide 345
345
Slide 346
346
Slide 347
347
Slide 348
348
Slide 349
349
Slide 350
350
Slide 351
351
Slide 352
352
Slide 353
353
Slide 354
354
Slide 355
355
Slide 356
356
Slide 357
357
Slide 358
358
Slide 359
359
Slide 360
360
Slide 361
361
Slide 362
362
Slide 363
363
Slide 364
364
Slide 365
365
Slide 366
366
Slide 367
367
Slide 368
368
Slide 369
369
Slide 370
370
Slide 371
371
Slide 372
372
Slide 373
373
Slide 374
374
Slide 375
375
Slide 376
376
Slide 377
377
Slide 378
378
Slide 379
379
Slide 380
380
Slide 381
381
Slide 382
382
Slide 383
383
Slide 384
384
Slide 385
385
Slide 386
386
Slide 387
387
Slide 388
388
Slide 389
389
Slide 390
390
Slide 391
391
Slide 392
392
Slide 393
393
Slide 394
394
Slide 395
395
Slide 396
396
Slide 397
397
Slide 398
398
Slide 399
399
Slide 400
400
Slide 401
401
Slide 402
402
Slide 403
403
Slide 404
404
Slide 405
405
Slide 406
406
Slide 407
407
Slide 408
408
Slide 409
409
Slide 410
410
Slide 411
411
Slide 412
412
Slide 413
413
Slide 414
414
Slide 415
415
Slide 416
416
Slide 417
417
Slide 418
418
Slide 419
419
Slide 420
420
Slide 421
421
Slide 422
422
Slide 423
423
Slide 424
424
Slide 425
425
Slide 426
426
Slide 427
427
Slide 428
428
Slide 429
429
Slide 430
430
Slide 431
431
Slide 432
432
Slide 433
433
Slide 434
434
Slide 435
435
Slide 436
436
Slide 437
437
Slide 438
438
Slide 439
439
Slide 440
440
Slide 441
441
Slide 442
442
Slide 443
443
Slide 444
444
Slide 445
445
Slide 446
446
Slide 447
447
Slide 448
448
Slide 449
449
Slide 450
450
Slide 451
451
Slide 452
452
Slide 453
453
Slide 454
454
Slide 455
455
Slide 456
456
Slide 457
457
Slide 458
458
Slide 459
459
Slide 460
460
Slide 461
461
Slide 462
462
Slide 463
463
Slide 464
464
Slide 465
465
Slide 466
466
Slide 467
467
Slide 468
468
Slide 469
469
Slide 470
470
Slide 471
471
Slide 472
472
Slide 473
473
Slide 474
474
Slide 475
475
Slide 476
476
Slide 477
477
Slide 478
478
Slide 479
479
Slide 480
480
Slide 481
481
Slide 482
482
Slide 483
483
Slide 484
484
Slide 485
485
Slide 486
486
Slide 487
487
Slide 488
488
Slide 489
489
Slide 490
490
Slide 491
491
Slide 492
492
Slide 493
493
Slide 494
494
Slide 495
495
Slide 496
496
Slide 497
497
Slide 498
498
Slide 499
499
Slide 500
500
Slide 501
501
Slide 502
502
Slide 503
503
Slide 504
504
Slide 505
505
Slide 506
506
Slide 507
507
Slide 508
508
Slide 509
509
Slide 510
510
Slide 511
511
Slide 512
512
Slide 513
513
Slide 514
514
Slide 515
515
Slide 516
516
Slide 517
517
Slide 518
518
Slide 519
519
Slide 520
520
Slide 521
521
Slide 522
522
Slide 523
523
Slide 524
524
Slide 525
525
Slide 526
526
Slide 527
527
Slide 528
528
Slide 529
529
Slide 530
530
Slide 531
531
Slide 532
532
Slide 533
533
Slide 534
534
Slide 535
535
Slide 536
536
Slide 537
537
Slide 538
538
Slide 539
539
Slide 540
540
Slide 541
541
Slide 542
542
Slide 543
543
Slide 544
544
Slide 545
545
Slide 546
546
Slide 547
547
Slide 548
548
Slide 549
549
Slide 550
550
Slide 551
551
Slide 552
552
Slide 553
553
Slide 554
554
Slide 555
555
Slide 556
556

About This Presentation

software


Slide Content

[ Equipo LIB ]


• Mesa de C ontenido
Diseño basado en dominios: abordar la complejidad en el corazón del software
por Eric Evans
Editorial: Addison Wesley
Pub Fecha: 20 de agosto
de 2003
ISBN: 0-321-12521-5
Páginas: 560



La comunidad de desarrollo de software reconoce ampliamente que el modelado de dominio es
fundamental para el diseño de software. A través del modelado de dominio, los desarrolladores
de software pueden expresar una rica funcionalidad y traducir esa funcionalidad en una
implementación de software que realmente satisface las necesidades. de su usuarios A pesar de
su obvio importancia, sin embargo, allí están pocos práctico recursos así es como cómo para
incorporar eficaz dominio modelado dentro los software desarrollo proceso.

Impulsado por dominio Diseño llena que necesitar. Eso ofertas lectores a sistemático Acercarse
para diseño dirigido por dominio, presentación un extenso colocar de diseño mejor prácticas,
basado en la experiencia tecnicas, y principios fundamentales que facilitan el desarrollo de
proyectos de software frente a dominios complejos. Entrelazando la práctica del diseño y el
desarrollo, el diseño impulsado por el dominio incorpora numerosas ejemplos en Java-caso
estudios tomado desde real proyectos que ilustrar los aplicación de impulsado por el dominio
diseño para mundo real software desarrollo.

Los lectores encontrarán una descripción general del diseño basado en dominios que destaca
los principios, los términos y las implicaciones clave. El libro presenta un núcleo de mejores
prácticas y patrones estándar que brindan un idioma por los desarrollo equipo. En adición, eso
Destacar cómo refactorización en modelado de dominio, integrado con los frecuente iteraciones
de Ágil desarrollo, Guías para Más adentro visión en dominios y mejorado comunicación Entre
dominio experto y programador. Edificio en Con esta base, el libro luego aborda el diseño
dirigido por dominios para sistemas complejos y organizaciones más grandes.

Los temas específicos cubiertos incluyen:


Aislamiento del
dominio

Entidades, objetos de valor, servicios y módulos

El ciclo de vida de un objeto de dominio

Representación de procesos como objetos de dominio

Creando funciones libres de efectos secundarios

Contornos conceptuales

Clases independientes

Ampliación de especificaciones

Aplicación de patrones de análisis

Relacionar patrones de diseño con el modelo

Mantenimiento de la integridad del modelo

Formulación de la declaración de visión del dominio

Elegir objetivos de refactorización

Capas de responsabilidad

Creación de un marco de componentes c onectables

Reunir estructuras a gran escala y contextos limitados

Con esta libro en mano, orientado a objetos desarrolladores, sistema analistas, y diseñadores
voluntad tener la guía ellos necesitar para pensar profundamente sobre dominios, crear Rico y
preciso dominio modelos, y transformar estas modelos dentro alta calidad, de larga duración
software implementaciones.

[ Equipo LiB ]

[ Equipo LiB ]


• Mesa de C ontenido
Diseño basado en dominios: abordar la complejidad en el corazón de l software
por Eric Evans
Editor: Addison Wesley Pub
Fecha: agosto 20, 2003
ISBN: 0-321-12521-5
Páginas: 560



Derechos de autor
Elogios por el diseño impulsado por el dominio
Prólogo
Prefacio
C ontrastando tres proyectos El
desafío de la complejidad Diseño
versus desarrollo Proceso La
estructura de este libro Quién
debería leer este libro Un dominio
impulsado Equipo
Expresiones de gratitud
Parte I: Poner a funcionar el modelo de
dominio C apítulo uno. C runching
Knowledge Ingredientes del modelado
efectivo
Análisis de
conocimientos
Aprendizaje continuo
Diseño rico en
conocimientos modelos
profundos
C apitulo dos. C omunicación y uso del lenguaje Lenguaje
ubicuo
Modelando en voz alta
un equipo, uno Idioma
Documentos y Diagramas
Explicativos Modelos
C apítulo tres. Modelo vinculante e implementación
Diseño dirigido por modelos Paradigmas de
modelado y compatibilidad con herramientas

Dejar que se vean los huesos: por qué los modelos
son importantes para los usuarios Modeladores
prácticos
Parte II: Los componentes básicos de un diseño basado
en modelos C apítulo cuatro. Aislamiento del dominio
Arquitectura en capas La Dominio C apa Es
Donde los Modelo Lives La interfaz de
usuario inteligente "Anti-Pattern" Otros
tipos de Aislamiento
C apítulo C inco. Un modelo expresado en
Entidades de asociaciones de software
(también conocidas como objetos de
referencia) Valor Objetos
Módulos de servicios
(también conocido como
Paquetes) Modelado
Paradigmas
C apítulo Seis. El ciclo de vida de los agregados
de un objeto de dominio
Fábricas
Repositorios
Diseño de objetos para bases de datos relacionales
C apítulo siete. Uso del idioma: una versión extendida
Ejemplo
Presentamos el aislamiento del sistema de envío
de carga los Dominio: Introduciendo los
Aplicaciones Distinguir objetos E NTITIES y V ALUE
Diseñar asociaciones en el dominio de envío A
GGREGATE Límites
Selección de R EPOSITORIOS
Recorrido por escenarios
C reación de objetos
Pausa por Refactorización: Un Alternativa Diseño de los Carga
MÓDULOS AGREGADOS en el modelo de envío Introducción a Nuevo
Rasgo: Asignación C omprobación
Una última mirada
Parte III: Refactorización hacia un conocimiento
más profundo C apítulo ocho. Descubrimiento
historia de un
Oportunidades
innovadoras C entrarse
en Lo esencial
Epílogo: Una cascada de nuevos
conocimientos C apítulo nueve. Hacer
conceptos implícitos Explícito
Excavando C onceptos C ómo para Modelo
Menos Obvio Tipos de C onceptos
C apítulo diez. Diseño flexible
Interfaces que revelan la
intención Funciones sin
efectos secundarios
Afirmaciones C ontornos
conceptuales C lases
independientes C ierre de

operaciones Declarativo
Diseño

Un estilo declarativo de
diseño Ángulos de ataque
C apítulo Once. Ejemplo de aplicación de
patrones de análisis
Ganar intereses con cuentas
Ejemplo Insight en el Nightly
Lote
Los patrones de análisis son conocimientos sobre
los que basarse C apítulo doce. Relación de patrones
de diseño con el modelo
Estrategia
(AKAPolítica) Por qué
compuesto No ¿ PESO
DE MOSCA?
C apítulo Trece. Refactorización hacia la iniciación de
Deeper Insight
Equipos de exploración
Estado de la técnica Un
diseño para
Desarrolladores
cronometrando la
crisis como
Oportunidad
Parte IV: Diseño Estratégico
C apítulo catorce. Mantenimiento del contexto
acotado de la integridad del modelo
Integración continua
Mapa de contexto
Relaciones Entre LÍMITE _ C ONTEXTOS
Núcleo C ompartido Desarrollo de
C lientes/Proveedores Equipos
conformistas
Anti corrupcion
C apa Formas
separadas Servicio
de host abierto
Idioma publicado
Unificación de un
Elefante
Elegir su modelo C ontexto Estrategia
Transformaciones
C apítulo quince. Dominio
central de destilación Una
escalada de destilaciones
Subdominios genéricos
Declaración de visión de
dominio Núcleo destacado
Mecanismos cohesivos
Núcleo segregado Núcleo
abstracto Modelos profundos
Destilar Elegir
Refactorización Objetivos
C apítulo dieciséis. Orden en evolución
de estructura a gran escala
C apas de responsabilidad

de la metáfora del
sistema

Nivel de conocimiento Framework de
componentes conectables C ómo
Restrictivo Deberían a Estructura ¿Ser?
refactorización Hacia a Adecuado
Estructura
C apítulo diecisiete. Uniendo la estrategia C ombinando
Gran escala Estructuras y LÍMITE _ C ONTEXTOS
C ombinación de estructuras a gran escala y evaluación
de la destilación Primero
¿Quién establece la estrategia? Seis Esenciales
por Estratégico Diseño Decisión Haciendo
C onclusión
Epílogos Mirando
hacia el futuro
Apéndice El uso de patrones en este libro
Nombre del patrón
GLOSARIO
Referencias
C RÉDITOS
FOTOGRÁFIC OS
[ Equipo LiB ]

[ Equipo LiB ]


Derechos de autor
Muchas de las designaciones utilizadas por los fabricantes y vendedores para distinguir sus
productos se afirman como marcas registradas Donde esos designaciones aparecer en esta
libro, y Addison Wesley estaba enterado de a marca comercial afirmar, los designaciones tener
estado impreso con inicial capital letras o en todas las capitales

los autor y editor tener tomado cuidado en los preparación de esta libro, pero hacer no expresado
o implícito garantía de ninguna tipo y asumir no responsabilidad por errores o omisiones No
responsabilidad se supone por incidental o consecuente daños y perjuicios en conexión con o
surgiendo fuera de los utilizar de la información o programas contenido Aquí en.

Consulte la página 517 para ver los créditos de las fotografías.

los editor ofertas descuentos en esta libro Cuándo ordenado en cantidad por a granel
compras y especial Ventas. Para más información, por favor contacto:

nosotros Corporativo y Gobierno
Ventas (800) 382-3419
[email protected]

Para ventas fuera de los EE. UU., comuníquese con:

Ventas
Internacionales (317)
581-3793
[email protected]

Visite Addison-Wesley en la Web: www.awprofessional.com

Datos de catalogación en publicación de la Biblioteca del Congreso


Evans, Eric, 1962–
Impulsado por el dominio diseño : abordar complejidad en los corazón
de software / Erick Evans.
pags. cm.
Incluye bibliográfico referencias y índice.
ISBN 0-321-12521-5
1. Software informático—Desarrollo. 2. Programación orientada a
objetos (Computer ciencia) I. Título.

QA76.76.D47E82 2003
005.1—dc21


2003050331

Copyright © 2004 por Eric Evans

Todos derechos reservado. No parte de esta publicación mayo ser reproducido, almacenado en a
recuperación sistema, o transmitido, en ninguna formulario, o por ninguna medio, electrónico,
mecánico, fotocopiar, grabación, o de otro modo, sin los previo consentimiento de los editor.
Impreso en los Unido estados de America.
Publicado simultáneamente en Canadá.

Para información en obtención permiso por utilizar de material desde esta trabajo, por favor
enviar a solicitud por escrito para:

Pearson Educación, Inc.
Derechos y Contratos
Departamento 75 Arlington
Calle, Suite 300
Boston, MA 02116
Fax: (617) 8487047

Texto impreso en papel reciclado

1 2 3 4 5 6 7 8 9 10—CRW—0706050403

Primera impresión, agosto de 2003


Dedicación
A mamá y papá

[ Equipo LiB ]

[ Equipo LiB ]


Elogios por el diseño impulsado por el
dominio
"Este libro pertenece al estante de todo desarrollador de software inteligente".

—Kent Beck

"eric evans posee escrito a fantástico libro en cómo usted lata hacer los diseño de tu
coincidencia de software tu mental modelo de los problema dominio usted están
direccionamiento.

"Su libro es muy compatible con XP. Eso es no sobre dibujo fotos de a dominio; eso es sobre
cómo lo piensa, el lenguaje que usa para hablar sobre él y cómo organiza su software
para reflejar su comprensión mejorada de él. Eric piensa que aprender acerca de su
problema dominio es como probable para suceder en los final de tu proyecto como en los
comenzando, y así que refactorizando es a grande parte de su técnica.

"Los libro es a divertido leer. eric posee un montón de interesante cuentos, y él posee a
manera con palabras. veo esta libro como esencial leyendo por software desarrolladores—
es es a futuro clásico."

—Ralph Johnson, autor de Patrones de diseño

"Si usted no pensar usted están consiguiendo valor desde tu inversión en
programación orientada a objetos, esta libro voluntad decir usted qué tienes
olvidado para hacer."

—Ward Cunningham

"Lo que Eric ha logrado capturar es una parte del proceso de diseño que los diseñadores
de objetos experimentados siempre han usado, pero que hemos sido singularmente
infructuosos como grupo en transmitir para los descanso de los industria. hemos dado fuera
pedacitos y piezas de esta conocimiento . . . pero hemos Nunca organizado y sistematizado
los principios de edificio dominio lógica. Esta libro es importante."

—Kyle Brown, autor de Enterprise Java Programming with IBM WebSphere

"eric evans convincentemente argumenta por los importancia de dominio modelado como
los central foco de desarrollo y proporciona a sólido estructura y colocar de tecnicas por
logrando eso. Esta es eterno sabiduría, y voluntad sostener arriba largo después los
metodologías dujour tener desaparecido fuera de Moda."

—Dave Collins, autor de Diseño de interfaces de usuario orientadas a objetos

"Eric entreteje el modelado y la creación de aplicaciones comerciales de la experiencia
del mundo real en un libro práctico y útil. Escrito desde la perspectiva de un profesional
de confianza, las descripciones de Eric de ubicuo idioma, los beneficios de intercambio
modelos con usuarios, objeto ciclo vital administración, lógico y físico solicitud
estructuración, y los proceso y resultados de profundo refactorización están importante
contribuciones para nuestro campo."

—Luke Hohmann, autor de Más allá de la arquitectura de software

[ Equipo LiB ]

[ Equipo LiB ]


Prefacio
Ahí están muchos cosas que hacer software desarrollo complejo. Pero los corazón de esta la
complejidad es la complejidad esencial del propio dominio del problema. Si está tratando de
agregar automatización a complicados humano empresa, luego tu software no poder esquivar
esta complejidad, todo eso lata hacer es el control eso.

La clave para controlar la complejidad es un buen modelo de dominio, un modelo que vaya
más allá de una visión superficial de a dominio por introduciendo un subyacente estructura, cual
da los software desarrolladores el apalancamiento ellos necesitar. A bien dominio modelo lata ser
increíblemente valioso, pero es no algo eso es fácil para hacer. Pocos gente lata hacer eso bien, y
es muy duro para enseñar.

Eric Evans es uno de los pocos que pueden crear bien modelos de dominio. Descubrí esto
trabajando con él, uno de esos momentos maravillosos en los que encuentras un cliente que es
más hábil que tú. Nuestro colaboración era pequeño pero enorme divertido. Ya que luego hemos
permaneció en tocar, y He vi esto libro gestar lentamente.

Ha valido la pena la espera.

Esta libro posee evolucionado dentro una que satisface a enorme ambición: Para describir y
construir a vocabulario sobre el arte mismo del modelado de dominios. Proporcionar un marco
de referencia a través del cual podamos explicar esta actividad como bien como enseñar esta
dificil de aprender habilidad. Es a libro eso es dado me muchos nuevas ideas como eso posee
tomado forma, y Identificación ser asombrado si incluso viejo las manos en conceptual
modelado no entiendo a balsa de nuevo ideas desde leyendo esta libro.

eric además cementos muchos de los cosas que hemos aprendió sobre los años. Primero, en
dominio modelando, tu no debería separar los conceptos desde los implementación. Un eficaz
dominio modelador no poder solamente utilizar a pizarron con un contador, pero además escribe
Java con a programador. Parcialmente esto es cierto porque no se puede construir un modelo
conceptual útil sin considerar los problemas de implementación. Pero la razón principal por la
que los conceptos y la implementación van de la mano es la siguiente: el mayor valor de un
modelo de dominio es que proporciona un lenguaje ubicuo que une a los expertos del dominio y
tecnólogos juntos.

Otra lección que aprenderá de este libro es que los modelos de dominio no se modelan primero
y luego se implementan. Me gusta muchos gente, He venir para rechazar los escalonado
pensando de "diseño, luego construir." Pero los lección de de eric experiencia es que los De
Verdad poderoso dominio modelos evolucionar sobre hora, e incluso los más experimentado
modeladores encontrar que ellos ganar sus mejor ideas después los inicial lanzamientos de un
sistema.

I pensar, y esperar, que esta voluntad ser un enormemente influyente libro. Una que voluntad
agregar estructura y cohesión para a muy resbaladizo campo tiempo eso enseña a lote de gente
cómo para utilizar a valioso herramienta. modelos de dominio lata tener grande Consecuencias en
controlador software desarrollo—en lo que idioma o entorno ellos están implementado.

Un pensamiento final pero importante. Una de las cosas que más respeto de este libro es que
Eric no tiene miedo para hablar sobre los veces Cuándo él no tiene estado exitoso. Más autores
me gusta para mantener un aire de desinteresado omnipotencia. eric hace eso claro que me
gusta más de nosotros, él es probado ambas cosas éxito y decepción los importante cosa es que
él lata aprender desde ambos y más importante por nosotros es eso él lata pasar en su lecciones

Martín Fowler
Abril de 2003

[ Equipo LiB ]

[ Equipo LiB ]


Prefacio
Principal software diseñadores tener Reconocido dominio modelado y diseño como crítico temas
por por lo menos 20 años, aún asombrosamente poco posee estado escrito sobre qué
necesidades para ser hecho o cómo para hacer eso. Aunque nunca se ha formulado con claridad,
ha surgido una filosofía como corriente subterránea en el objeto comunidad, a filosofía I llamada
impulsado por el dominio diseño _

Pasé la última década desarrollando sistemas complejos en varios dominios comerciales y
técnicos. En mi trabajo, I tener intentado mejor prácticas en diseño y desarrollo proceso como
ellos han surgido de los líderes en el desarrollo orientado a objetos. Algunos de mis proyectos
tuvieron mucho éxito; a pocos ha fallado. A rasgo común para los éxitos era a Rico dominio
modelo que evolucionado a través de iteraciones de diseño y se convirtió parte de los tela de los
proyecto.

Este libro proporciona un marco para tomar decisiones de diseño y un vocabulario técnico
para discutir dominio diseño. Eso es a síntesis de ampliamente aceptado mejor prácticas a lo
largo de con mi propias percepciones y experiencias. Los equipos de desarrollo de software
que enfrentan dominios complejos pueden usar este marco para Acercarse impulsado por el
dominio diseño sistemáticamente.

[ Equipo LiB ]

[ Equipo LiB ]


Contrastando tres proyectos
Tres proyectos se destacan en mi memoria como ejemplos vívidos de cuán dramáticamente la
práctica del diseño de dominio lata afectar desarrollo resultados Aunque todos Tres proyectos
entregado útil software, sólo uno logrado su ambicioso objetivos y producido complejo software
que continuado para evolucionar reunirse los en curso necesidades de los organización.

I Visto una proyecto obtener fuera de los portón rápido, por entregando a útil, sencillo basado
en la web sistema de comercio. Desarrolladores fueron volador por los asiento de sus
pantalones, pero esta no lo hizo impedir ellos porque simple software lata ser escrito con poco
atención para diseño. Como a resultado de esta inicial éxito, las expectativas de desarrollo
futuro estaban por las nubes. Fue entonces cuando me pidieron que trabajara en la segunda
versión. Cuando miré de cerca, vi que carecían de un modelo de dominio, o incluso de un
común idioma en los proyecto, y fueron ensillado con un desestructurado diseño. los líderes de
proyecto hizo no estar de acuerdo con mi evaluación, y I rechazado los trabajo. A año luego, los
equipo se encontró a sí mismo atascado abajo y incapaz para entregar a segundo versión.
Aunque sus utilizar de tecnología no estaba ejemplar, eso era los negocio lógica que venció ellos.
Sus primero liberar tenido osificado prematuramente dentro a alto mantenimiento legado.

Levantamiento esta techo en complejidad llamadas por a más grave Acercarse para los diseño de
dominio lógica. Temprano en mi carrera profesional, I era afortunado para final arriba en a
proyecto que hizo enfatizar dominio diseño. Este proyecto, en a dominio en menos como
complejo como los primero una, además empezado con a modesto inicial éxito, entregando una
aplicación simple para comerciantes institucionales. Pero en este caso, la entrega inicial fue
seguida por sucesivas aceleraciones de desarrollo. Cada iteración abrió nuevas y emocionantes
opciones. por integrando y elaborando los funcionalidad de los anterior liberar. los equipo era
capaz de responder a las necesidades de los comerciantes con flexibilidad y capacidad de
expansión. Esta trayectoria ascendente era directamente atribuible para un incisivo dominio
modelo, repetidamente refinado y expresado en código. A medida que el equipo obtuvo nuevos
conocimientos sobre el dominio, el modelo se profundizó. La calidad de la comunicación mejoró
no solo entre los desarrolladores, sino también entre los desarrolladores y los expertos del
dominio. y los diseño—lejos desde imponente un cada vez más pesado mantenimiento carga—se
convirtió más fácil modificar y ampliar.

Desafortunadamente, proyectos no llegar en tal a virtuoso ciclo sólo por tomando modelos
seriamente. un proyecto desde mi pasado empezado con elevado aspiraciones para construir a
global empresa sistema establecido en un modelo de dominio, pero tras años de decepciones,
bajó la mira y se instaló en la convencionalidad. los equipo tenido bien herramientas y a bien
comprensión de los negocio, y eso prestó especial atención al modelado. Pero una separación
mal elegida de los roles de los desarrolladores desconectó el modelado desde implementación,
entonces que los diseño hizo no reflejar los profundo análisis que era pasando En cualquier caso,
el diseño de objetos comerciales detallados no fue lo suficientemente riguroso como para
admitir su combinación en aplicaciones elaboradas. La iteración repetida no produjo ninguna
mejora en el código, vencer para desigual habilidad niveles entre desarrolladores, quién tenido no
conciencia de los informal cuerpo de estilo y técnica para crear objetos basados en modelos que
también funcionan como software práctico y en ejecución. Como meses arrollado por, desarrollo
trabajo se convirtió atascado en complejidad y los equipo perdió su visión cohesiva del sistema.
Después de años de esfuerzo, el proyecto produjo un software modesto y útil, pero los equipo
tenido dado arriba su temprano ambiciones a lo largo de con los modelo enfocar.


[ Equipo LiB ]

[ Equipo LiB ]


El desafío de la complejidad
Muchos cosas lata poner a proyecto apagado curso: burocracia, poco claro objetivos, y carecer de
recursos, a nombre a pocos. Pero eso es los Acercarse para diseño que en gran parte determina
cómo complejo software puede llegar a ser. Cuando la complejidad se sale de control, los
desarrolladores ya no pueden entender bien el software suficiente para cambiar o ampliar eso
fácilmente y sin peligro. En los otro mano, a bien diseño lata crear oportunidades para explotar
esos complejo caracteristicas.

Algunos diseño factores están tecnológico. A estupendo trato de esfuerzo posee desaparecido
dentro los diseño de redes, bases de datos, y otro técnico dimensiones de software. Muchos
libros tener estado escrito sobre cómo resolver estos problemas. Legiones de desarrolladores
han cultivado sus habilidades y seguido cada técnico avance.

Aún los más significativo complejidad de muchos aplicaciones es no técnico. Eso es en los
dominio mismo, el actividad o negocio de los usuario. Cuándo esta dominio complejidad es no
manejado en los diseño, no importará que la tecnología de infraestructura esté bien concebida.
Un diseño exitoso debe sistemáticamente trato con esta central aspecto de los software.

La premisa de este libro es doble:

1. Para más software proyectos, los primario enfocar deberían ser en los dominio y dominio
lógica.

2. Complejo dominio diseños deberían ser establecido en a modelo.

El diseño basado en dominios es tanto una forma de pensar como un conjunto de prioridades,
destinado a acelerar el software. proyectos que tener para trato con Complicado dominios Para
lograr que meta, esta regalos de libros un extenso colocar de diseño prácticas, tecnicas, y
principios


[ Equipo LiB ]

[ Equipo LiB ]


Proceso de diseño versus desarrollo
Diseño libros. Proceso libros. Ellos raramente incluso referencia cada otro. Cada tema es complejo
en por derecho propio. Este es un libro de diseño, pero creo que el diseño y el proceso son
inseparables. Conceptos de diseño deber ser implementado exitosamente o demás ellos voluntad
seco arriba dentro académico discusión.

Cuando las personas aprenden técn icas de diseño, se sienten entusiasmadas con las
posibilidades. Entonces las realidades desordenadas de a verdadero proyecto descender en ellos.
Ellos hipocresía encajar los nuevo diseño ideas con los tecnología ellos deber utilizar. O ellos no
saber Cuándo para dejar ir de a especial diseño aspecto en los interesar de tiempo y Cuándo para
cavar en sus tacones y encontrar a limpio solución. Desarrolladores lata y hacer hablar con El uno
al otro abstractamente sobre los solicitud de diseño principios, pero eso es más natural para
hablar sobre cómo se hacen las cosas reales. Así que, aunque este es un libro de diseño, voy a
atravesar ese espacio artificial Perímetro dentro proceso Cuándo I necesitar para. Esta voluntad
ayuda poner diseño principios en contexto.

Esta libro es no atado para a especial metodología, pero eso es orientado hacia los nuevo familia
de "Procesos ágiles de desarrollo". Específicamente, se supone que existen un par de prácticas
en el proyecto. Estas dos prácticas están requisitos previos por aplicar los Acercarse en esta libro.

1. El desarrollo es iterativo . El desarrollo iterativo se ha defendido y practicado durante
décadas, y es la piedra angular de los métodos de desarrollo ágiles. Hay muchas buenas
discusiones. en los literatura de Ágil desarrollo y Extremo Programación (o EXP), entre ellos,
Proyectos Orientados a Objetos Supervivientes ( Cockburn 1998 ) y Programación
Extrema Explicada ( Beck 1999 ).

2. Desarrolladores y dominio expertos tener a cerrar relación _ Impulsado por el dominio
diseño abdominales una gran cantidad de conocimiento en un modelo que refleja una
visión profunda del dominio y un enfoque en los llave conceptos. Esta es a colaboración
Entre esos quién saber los dominio y esos quién saber cómo para construir software.
Porque desarrollo es iterativo, esta la colaboración debe Seguir a lo largo de los del
proyecto la vida.

Programación extrema, concebida por Kent Beck, Ward Cunningham y otros (ver Programación
extrema Explicado [ Beck 2000 ]), es los más prominente de los Ágil procesos y los una tengo
trabajó con más. A lo largo de esta libro, para hacer explicaciones hormigón, I voluntad utilizar
XP como la base por discusión de los Interacción de diseño y proceso. los principios ilustrado
están fácilmente adaptable para otro Ágil procesos.

En reciente años allí posee estado a rebelión en contra elaborar desarrollo metodologías esa
carga proyectos con inútil, estático documentos y obsesionante en la delantera planificación
y diseño.
En lugar de, los Ágil procesos, tal como XP, enfatizar los capacidad para afrontar con
cambiar e incertidumbre

Extreme Programming reconoce la importancia de las decisiones de diseño, pero se resiste
fuertemente al diseño inicial. En cambio, pone un esfuerzo admirable en la comunicación y
mejora la capacidad del proyecto para cambiar de rumbo rápidamente. Con esa c apacidad de
reacción, los desarrolladores pueden usar el "más simple cosa que pudo trabajo" en ninguna
escenario de a proyecto y luego continuamente refactorizar, haciendo muchas pequeñas
mejoras de diseño, llegando finalmente a un diseño que se ajuste a las verdaderas
necesidades del cliente.

Esta minimalismo posee estado a muy necesario antídoto para algunos de los excesos de diseño
entusiastas Proyectos tener estado atascado abajo por incómodo documentos que proporcionó

poco valor. Ellos Ha sufrido desde "análisis parálisis," con equipo miembros entonces temeroso
de un imperfecto diseño que ellos hicieron no Progreso en todos. Algo tenido para cambiar.

Desafortunadamente, algunas de estas ideas de procesos pueden malinterpretarse. Cada
persona tiene una definición diferente. de "más simple". Continuo refactorización es a serie de
pequeña rediseños; desarrolladores sin sólido diseño principios voluntad Produce a código base
que es duro para comprender o cambiar el opuesto a la agilidad. Y aunque el miedo a los
requisitos imprevistos a menudo conduce a un exceso de ingeniería, el intento para evitar
sobreingeniería lata desarrollar dentro otro miedo: a miedo de haciendo ninguna profundo
pensamiento de diseño en todos.

En hecho, XP obras mejor por desarrolladores con a afilado diseño sentido. los XP proceso asume
que puede mejorar a diseño por refactorización, y que usted voluntad hacer esta con frecuencia y
rápidamente. Pero pasado opciones de diseño hacer refactorización sí mismo cualquiera más
fácil o más difícil. los XP proceso intentos para aumento comunicación en equipo, pero modelo y
diseño elecciones aclarar o confundir comunicación.

Esta libro se entrelaza diseño y desarrollo práctica y ilustra cómo impulsado por el dominio
diseño y Ágil desarrollo reforzarse cada otro. A sofisticado Acercarse para dominio modelado
dentro de contexto de un Ágil desarrollo proceso voluntad acelerar desarrollo. los interrelación de
proceso con desarrollo de dominio hace que este enfoque sea más práctico que cualquier
tratamiento de "puro" diseño en a aspiradora.

[ Equipo LiB ]

[ Equipo LiB ]


La estructura de este libro
El libro se divide en cuatro secciones principales:

La Parte I : Poner a funcionar el modelo de dominio presenta los objetivos básicos del
desarrollo impulsado por el dominio; estos objetivos motivan las prácticas en secciones
posteriores. porque hay tantos enfoques para software desarrollo, Parte I define condiciones
y da un visión de conjunto de las implicaciones de utilizando los dominio modelo para
conducir comunicación y diseño.

Parte II : los Edificio bloques de a Basado en modelos Diseño condensa a centro de mejor
prácticas en orientado a objetos dominio modelado dentro a colocar de básico edificio
bloques Esta sección se enfoca en cerrar la brecha entre los modelos y el software práctico
y en ejecución. Compartir estos patrones estándar pone orden en el diseño. Los
miembros del equipo entienden más fácilmente el trabajo de los demás. Utilizando
estándar patrones además contribuye terminología para a común idioma, cual todo el
equipo miembros lata utilizar para discutir modelo y diseño decisiones

Pero los principal punto de esta sección es para enfocar en los tipos de decisiones que
mantenerse los modelo y implementación alineado con cada otro, cada reforzando los otros
eficacia. Esta alineación requiere atención para los detalle de individual elementos.
Cuidadoso elaboración en esta pequeña escala da desarrolladores a firme Fundación desde
cual para aplicar los modelado enfoques de las Partes III y IV .

Parte tercero : refactorización Hacia Más adentro Visión va más allá de los edificio bloques
para los desafío de ensamblarlos en modelos prácticos que proporcionen la recompensa.
En lugar de saltar directamente dentro esotérico diseño principios, esta sección enfatiza los
descubrimiento proceso.
Los modelos valiosos no surgen de inmediato; requieren una comprensión profunda del
dominio. Que comprensión llega desde buceo en, implementar un inicial diseño establecido
en un probablemente ingenuo modelo, y luego transformando eso otra vez y otra vez. Cada
hora los equipo adquiere perspicacia, los modelo es transformado para revelar que mas rico
conocimiento, y los código es refactorizado a reflejar los Más adentro modelo y hacer su
potencial disponible para los solicitud. Luego, una vez en un tiempo, esta cebolla peladura
Guías para un oportunidad para descanso a través de para a mucho Más adentro modelo,
asistió por a prisa de profundo diseño cambios.

Exploración es inherentemente Abierto, pero eso lo hace no tener para ser aleatorio. Parte
tercero ahonda en el modelado principios que lata guía elecciones a lo largo de los manera,
y tecnicas que ayuda directo la busqueda

Parte IV : El Diseño Estratégico se ocupa de situaciones que surgen en sistemas
complejos, organizaciones más grandes e interacciones con sistemas externos y
sistemas heredados. Esta sección explora a tríada de principios que aplicar para los
sistema como a entero: contexto, destilación, y a gran escala estructura. Estratégico
diseño decisiones están hecha por equipos, o incluso entre equipos Estratégico diseño
permite los objetivos de Parte I para ser dio cuenta en a más grande escala, por a grande
sistema o un solicitud que encaja dentro a desmadejado, en toda la empresa la red.

A lo largo de los libro, discusiones están ilustrado no con demasiado simplificado, "juguete"
problemas, pero con realista ejemplos adaptado desde real proyectos

Gran parte del libro está escrito como un conjunto de "patrones". Los lectores deben ser
capaces de comprender el material. sin preocupación sobre esta dispositivo, pero esos quién
están interesado en los estilo y formato de El patrones mayo querer para leer los apéndice.

Hecho suplementario materiales lata ser fundar en http: //diseñocontroladopordominio.org ,

incluso ejemplo adicional código y comunidad discusión.

[ Equipo LiB ]

[ Equipo LiB ]


Quién debería leer este libro
Esta libro es escrito ante todo por desarrolladores de orientado a objetos software. Más
miembros de un software proyecto equipo lata beneficio desde algunos partes de los libro. Eso
voluntad hacer los más sentido A la gente quién están actualmente involucrado con a proyecto,
difícil para hacer algunos de estas cosas como ellos atravesar, y para gente quién ya tener
profundo experiencia con tal proyectos

Algunos conocimiento de orientado a objetos modelado es necesario para beneficio desde esta
libro. los los ejemplos incluyen diagramas UML y código Java, por lo que la capacidad de leer
esos lenguajes en un nivel básico es importante, pero no es necesario dominar los detalles de
ninguno de los dos. El conocimiento de la Programación Extrema agregará perspec tiva a las
discusiones del proceso de desarrollo, pero el material debe ser comprensible para esos sin
antecedentes conocimiento.

Para desarrolladores de software intermedios: lectores que ya saben algo de diseño orientado a
objetos y mayo tener leer una o dos software diseño libros—esto libro voluntad llenar en brechas y
proporcionar una perspectiva sobre cómo el modelado de objetos encaja en la vida real en un
proyecto de software. El libro ayudará a los desarrolladores intermedios a aprender a aplicar
habilidades sofisticadas de modelado y diseño a problemas prácticos.

Avanzado o experto software desarrolladores voluntad ser interesado en los libros exhaustivo
marco para relación comercial con los dominio. Esta sistemático Acercarse para diseño voluntad
ayuda técnico lideres guiar a sus equipos por este camino. Además, la terminología coherente
utilizada a lo largo del libro ayudará a avanzar desarrolladores comunicar con sus colegas.

Esta libro es a narrativa, y eso lata ser leer desde comenzando para final, o desde los
comenzando de cualquier capítulo. Lectores de varios antecedentes mayo deseo para llevar
diferente caminos a través de los libro, pero hago recomendar que todos lectores comienzo con
los Introducción para Parte yo , como bien como Capítulo 1 . Más allá de eso, los centro es
probablemente Capítulos 2 , 3 , 9 , y 14 _ A desnatadora quién ya posee algunos sujetar de un
tema debe ser capaz de recoger los puntos principales mediante la lectura de títulos y texto en
negrita. un muy avanzado lector mayo querer para desnatar Partes I y Yo y voluntad
probablemente ser más interesado en Partes III y IV .

Además de este público principal, los analistas y los gerentes de proyectos relativamente
técnicos también se beneficiarán desde leyendo los libro. analistas lata dibujar en los conexión
Entre modelo y diseño para hacer más eficaz contribuciones en los contexto de un Ágil proyecto.
analistas mayo además utilizar algunos de los principios de estratégico diseño para mejor
enfocar y organizar sus trabajo.

Proyecto gerentes deberían ser interesado en los énfasis en haciendo a equipo más eficaz y más
centrado en el diseño de software significativo para los expertos y usuarios de negocios. Y
porque el diseño estratégico decisiones están interrelacionado con equipo organización y trabajo
estilos, estas diseño las decisiones involucran necesariamente al liderazgo del proyecto y tienen
un gran impacto en la trayectoria del proyecto.

[ Equipo LiB ]

[ Equipo LiB ]


Un equipo impulsado por el dominio
Aunque un individual desarrollador quién entiende impulsado por el dominio diseño voluntad
ganar valioso técnicas de diseño y perspectiva, las mayores ganancias se obtienen cuando un
equipo se une para aplicar un enfoque de diseño basado en el dominio y mover el modelo de
dominio al centro del discurso del proyecto. Al hacerlo, los miembros del equipo compartirán
un lenguaje que enriquece su comunicación. y mantiene eso conectado para los software. Ellos
voluntad Produce a lúcido implementación
en paso con a modelo, donación aprovechar para solicitud desarrollo. Ellos voluntad Cuota a mapa
de cómo el diseño trabajo de diferente equipos relaciona, y ellos voluntad sistemáticamente
enfocar atención en los características que están más distintivo y valioso para los organización.

Impulsado por el dominio diseño es a difícil técnico desafío que lata pagar apagado grande,
apertura oportunidades solo Cuándo más software proyectos empezar para osificarse dentro
legado.

[ Equipo LiB ]

[ Equipo LiB ]


Expresiones de gratitud
I tener estado trabajando en esta libro, en una formulario o otro, por más que cuatro años, y
muchas personas tener ayudado y soportado me a lo largo de los manera.

Agradezco a aquellas personas que han leído manuscritos y comentado. Este libro simplemente
no hubiera sido posible sin esa retroalimentación. Algunos han prestado a sus reseñas una
atención especialmente generosa. El Silicon Valley Patterns Group, dirigido por Russ Rufer y
Tracy Bialek, pasó siete semanas recuento los primero completo sequía de los libro. los
Universidad de Illinois leyendo grupo dirigido por Ralph Johnson también pasó varias semanas
revisando un borrador posterior. Escuchar las largas y animadas discusiones de estos grupos
tuvo un profundo efecto. Kyle Brown y Martin Fowler contribuyeron con detalles
realimentación, valioso perspectivas, y inestimable moral apoyo (tiempo sesión en a pez). Los
comentarios de Ward Cunningham me ayudaron a re forzar algunos puntos débiles importantes.
Alistair Cockburn animado me temprano en y ayudado me encontrar mi manera a través de los
publicación proceso, como hizo Hilario Evans. David Siegel y Eugene Wallingford me han
ayudado a evitar avergonzarme en las partes más técnicas. Vibhu Mohindra y Vladimir
Gitlevich revisaron minuciosamente todos los ejemplos de código.

Robar yo leer algunos de mi más temprano exploraciones de los material, y lluvia de ideas ideas
con yo cuando I era a tientas por algunos manera para comunicar esta estilo de diseño. Él luego
poreado sobre a mucho más tarde sequía con me.

jose Kerievsky es responsable por una de los importante torneado puntos en los libros
desarrollo: él persuadió me para tratar fuera los "Alejandrino" patrón formato, cual se convirtió
entonces central para los organización del libro. También me ayudó a reunir parte del material
ahora en la Parte II en un conjunto coherente. formulario por los primero hora, durante los
intensivo "pastoreo" proceso anterior los Conferencia PLoP en 1999. Esta se convirtió a semilla
alrededor cual mucho de los descanso de los libro formado.

también I gracias Awad Faddoul por los cientos de horas I se sentó escribiendo en su maravilloso
cafetería. ese retiro, a lo largo de con a lote de Windsurfing, ayudado me mantenerse yendo.

Y Yo soy muy agradecido para martina Jousset, Ricardo Pascual, y ross Venables por creando
algunos hermosos fotografías para ilustrar a pocos llave conceptos (ver Foto creditos en
página 517).

Antes I pudo tener concebido de esta libro, I tenido para formulario mi vista y comprensión de
desarrollo de software. Que formación adeudado a lote para los generosidad de a pocos
brillante gente quién actuó como informal mentores para me, como bien como amigos. David
Siegel, eric Oro, y Isolda Blanco, cada en una diferente manera, ayudado me desarrollar mi
manera de pensando sobre software diseño. Mientras tanto, bruce gordon, Ricardo frey-berg, y
Judit Segal, además en muy diferente formas, ayudado me encontrar mi entrada los mundo de
exitoso proyecto trabajo.

Mi propio nociones naturalmente creció fuera de a cuerpo de ideas en los aire en que
hora. Algunos de esas contribuciones serán claras en el texto principal y referenciadas
cuando sea posible. Otros son tan fundamentales que I no incluso darse cuenta de sus
influencia en me.

Mi maestría tesis tutor, Dr. Bala subramanio, convertido me en para matemático modelado, que
nosotros aplicado para químico reacción cinética. Modelado es modelado, y que trabajo era parte
de El sendero que LED para esta libro.

Incluso antes de que, mi manera de pensando era conformado por mi padres, Villancico y Gary
Evans. Y a pocos maestros especiales despertaron mi interés o me ayudaron a sentar las bases,
especialmente Dale Currier (un alto colegio Matemáticas profesor), María marrón (a elevado

colegio inglés composición profesor), y josefina

McGlamery (profesor de ciencias de sexto grado).

Finalmente, I gracias mi amigos y familia, y Fernando Delaware León, por sus ánimo todos a lo
largo de manera.


[ Equipo LiB ]

[ Equipo LiB ]


Parte I: Poner el Modelo de Dominio a
Trabajar

Esta siglo dieciocho chino mapa representa los entero mundo. En los centrar y tomando más
de los espacio es China, rodeado por superficial representaciones de otro los paises. Este
era un modelo del mundo apropiado para esa sociedad, que se había vuelto
intencionalmente hacia adentro. los cosmovisión que los mapa representa deber no tener
estado servicial en relación comercial con extranjeros. Ciertamente, no serviría en
absoluto a la China moderna. Los mapas son modelos, y cada modelo representa algún
aspecto de la realidad o una idea de interés. Un modelo es una simplificación. Eso es un
interpretación de realidad que resúmenes los aspectos pertinente para resolviendo el
problema en mano y ignora extraño detalle.

Cada software programa relaciona para algunos actividad o interesar de su usuario. Que
tema área a la que los usuario se aplica los programa es los dominio de los software.
Algunos dominios involucrar el fisico mundo: los dominio de un reserva de linea aerea
programa implica verdadero gente consiguiendo en aviones reales. Algunos dominios están
intangible: los dominio de un contabilidad programa es dinero y finanzas Los dominios de
software generalmente tienen poco que ver con las computadoras, aunque hay
excepciones: los dominio de a código fuente control sistema es software desarrollo sí mismo.

Para crear software que se involucre de manera valiosa en las actividades de los
usuarios, un equipo de desarrollo debe aportar un conjunto de conocimientos
relacionados con esas actividades. La amplitud de conocimientos requerida lata ser
desalentador los volumen y complejidad de información lata ser agobiante. Los modelos
son herramientas para lidiar con esta sobrecarga. Un modelo es una simplificación
selectiva y conscientemente estructurado formulario de conocimiento. Un apropiado modelo
hace sentido de información y se enfoca eso en a problema.

A dominio modelo es no a especial diagrama; eso es los idea que los diagrama es
destinado a para transmitir. Eso es no sólo los conocimiento en a dominio del experto
cabeza; eso es a rigurosamente organizado y selectivo abstracción de que conocimiento
_ A diagrama lata representar y comunicar un modelo, como lata con cuidado escrito
código, como lata un inglés oración.

El modelado de dominio no es una cuestión de hacer un modelo lo más "realista"
posible. Incluso en un dominio de cosas tangibles del mundo real, nuestro modelo es
una creación artificial. Tampoco es sólo la construcción de un mecanismo de software
que dé los resultados necesarios. Es más como hacer una película, flojamente
representando realidad para a especial propósito. Incluso a documental la película hace no
show no modificado verdadero la vida. Sólo como a cineasta selecciona aspectos de
experiencia y los presenta de una manera idiosincrásica para contar una historia o hacer
un punto, un modelador de dominio elige a especial modelo por su utilidad.


La utilidad de un modelo en el diseño controlado
por dominio
En el diseño dirigido por dominios, tres usos básicos determinan la elección de un
modelo.

1. los modelo y los corazón de los diseño forma cada otro _ Eso es los íntimo Enlace Entre
los modelo y los implementación que hace los modelo pertinente y asegura que el
analisis que fuimos dentro eso se aplica para los final producto, a corriendo programa.
Esta Unión de modelo y implementación además ayuda durante mantenimiento y
continuo desarrollo, porque los código lata ser interpretado establecido en
comprensión los modelo. (Ver Capítulo 3. )

2. El modelo es la columna vertebral de un lenguaje utilizado por todos los miembros
del equipo . Debido a la vinculación del modelo y la implementación, los
desarrolladores pueden hablar sobre el programa en este lenguaje. Ellos lata
comunicar con dominio expertos sin traducción. Y Debido a que el idioma se basa en el
modelo, nuestras habilidades lingüísticas naturales pueden refinarse. los modelo sí
mismo. (Ver Capítulo 2 .)

3. El modelo es conocimiento destilado . El modelo es la forma acordada por el equipo
de estructurar el conocimiento del dominio y distinguir los elementos de mayor
interés. Un modelo captura cómo elegimos pensar sobre el dominio cuando
seleccionamos términos, desglosamos conceptos, y relacionar ellos. los compartido
idioma permite desarrolladores y expertos en dominios para colaborar efectivamente
como ellos luchar información dentro esta formulario. los la vinculación del modelo y
la implementación hace que la experiencia con las primeras versiones del software
sea aplicable como realimentación dentro los modelado proceso. (Ver Capítulo 1 .)

Los siguientes tres capítulos se proponen examinar el significado y el valor de cada una
de estas contribuciones. en girar, y los formas ellos están entrelazados. Utilizando a
modelo en estas formas puede apoyar los desarrollo de software con Rico funcionalidad
que haría de lo contrario llevar Un masivo inversión de anuncio hoc desarrollo.


El corazón de Software

El corazón del software es su capacidad para resolver problemas relacionados con el
dominio para su usuario. Todas las demás características, vital aunque ellos mayo ser,
apoyo esta básico propósito. Cuándo los dominio es complejo, esto es a difícil tarea,
vocación por los concentrado esfuerzo de talentoso y experto gente.
Desarrolladores tener para empinado ellos mismos en los dominio para construir arriba

conocimiento de los negocio. Ellos deber piedra de afilar sus modelado habilidades y
Maestro dominio diseño.

Sin embargo, estas no son las prioridades en la mayoría de los proyectos de software. La
mayoría de los desarrolladores talentosos no

tener mucho interesar en aprendiendo sobre los específico dominio en cual ellos están
trabajando, mucho menos haciendo a importante compromiso para expandir sus
modelado de dominio habilidades. Técnico la gente disfruta cuantificable problemas que
ejercicio sus técnico habilidades. Dominio trabajo es sucio y exige una gran cantidad de
nuevos conocimientos complicados que no parecen agregar a un científico de la
computación capacidades.

En lugar de, los técnico talento va para trabajo en elaborar marcos, difícil para resolver
problemas de dominio con tecnología. Aprendiendo sobre y modelado los dominio es
izquierda para otros.
Complejidad en los corazón de software posee para ser abordado De frente. Para hacer
de lo contrario es para irrelevancia del riesgo .

En a televisor hablar show entrevista, cómico Juan Cleese dicho a historia de un evento
durante los rodaje de Monty Python y el Santo Grial . Habían estado filmando una escena
en particular una y otra vez, pero de alguna manera no era divertida. Finalmente, se tomó
un descanso y consultó con el también comediante Michael Palin (el otro actor en la
escena), y se les ocurrió una ligera variación. Ellos Disparo una más llevar, y eso convertido
fuera gracioso, entonces ellos llamado eso a día.

los próximo Mañana, Cleese era mirando en los áspero Corte los película editor tenido poner
juntos de el trabajo del día anterior. Al llegar a la escena con la que habían luchado,
Cleese descubrió que no era gracioso; una de los más temprano toma tenido estado usado.

Le preguntó al editor de la película por qué no había usado la última toma, como se le
indicó. "No pude usarlo. Alguien entró en la toma", respondió el editor. Cleese observó la
escena una y otra vez. Todavía él pudo ver nada incorrecto. Finalmente, los editor detenido
los película y puntiagudo fuera un abrigo manga que era visible por a momento en los borde
de los imagen.

los película editor era enfocado en los preciso ejecución de su propio especialidad. Él era
preocupado de que otros editores de cine que vieron la película juzgaran su trabajo en
función de su perfección técnica. En los proceso, los corazón de los escena tenido estado
perdió ("Los Tarde Tarde Show con craig Kilborn", CBS, septiembre 2001).

Afortunadamente, los gracioso escena era restaurado por a director quién entendido
comedia. En sólo lo mismo manera, lideres dentro de a equipo quién comprender los
centralidad de los dominio lata poner su proyecto de software vuelve a la normalidad
cuando se desarrolla un modelo que refleja una comprensión profunda obtiene perdió en
los barajar.

Este libro mostrará que el desarrollo de dominios brinda oportunidades para cultivar
diseño habilidades. los desorden de más software dominios es Realmente un interesante
desafío técnico. De hecho, en muchas disciplinas científicas, la "complejidad" es uno de los
temas actuales más emocionantes, ya que los investigadores intentan abordar el desorden
del mundo real. Un software desarrollador posee que mismo perspectiva Cuándo frente a a
Complicado dominio que posee nunca ha sido formalizado Creando a lúcido modelo que
cortes a través de que complejidad es excitante.

Ahí están sistemático formas de pensando que desarrolladores lata emplear para búsqueda
por visión y producir modelos efectivos. Existen técnicas de diseño que pueden poner
orden en un software en expansión. solicitud. Cultivo de estas habilidades hace a
desarrollador mucho más valioso, incluso en un inicialmente desconocido dominio.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo uno. conocimiento crujiente
Hace unos años, me propuse diseñar una herramienta de software especializada para el diseño
de placas de circuito impreso (PCB). Una atrapar: I no lo hizo saber cualquier cosa sobre
electrónico hardware. I tenido acceso para algunos diseñadores de PCB, de curso, pero ellos
típicamente tiene mi cabeza hilado en Tres minutos. Cómo era I yendo para entender lo
suficiente como para escribir este software? Ciertamente no iba a convertirme en ingeniero
eléctrico. antes de los entrega ¡fecha límite!

Nosotros intentado teniendo los tarjeta de circuito impreso diseñadores decir me exactamente
qué los software deberían hacer. Malo idea. Ellos eran estupendo circuito diseñadores, pero sus
software ideas generalmente involucrado leyendo en un ASCII archivo, clasificación eso,
escribiendo eso espalda fuera con algunos anotación, y productor a informe. Esta era
claramente no voy para dirigir para los salto hacia adelante en productividad que ellos fueron
mirando por.

los primero pocos reuniones fueron desalentador, pero allí era a luz tenue de esperar en los
informes ellos preguntaron por. Ellos siempre involucrado "redes" y varios detalles sobre ellos.
A neto, en esta dominio, Es esencial a cable conductor que lata conectar ninguna número de
componentes en a tarjeta de circuito impreso y llevar un electrico señal para todo eso es
conectado para. Nosotros tenido los primero elemento de los dominio modelo.



Figura 1.1.




I empezado dibujo diagramas por ellos como nosotros discutido los cosas ellos querido los
software para hacer. solía un informal variante de objeto Interacción diagramas para andar a
través de escenarios.



Figura 1.2.

Experto en PCB 1: Los componentes no tendrían que ser chips.

Desarrollador (yo): Entonces, ¿debería llamarlos "componentes"?

Experto 1: Los llamamos "instancias de componentes". Podría haber muchos del mismo
componente.

Experto 2: El cuadro "red" se parece a una instancia de componente.

Experto 1: No está usando nuestra notación. Todo es una caja para ellos, supongo.

Desarrollador: Lamento decir que sí. Supongo que será mejor que explique esta notación un
poco más.

Me corregían constantemente, y mientras lo hacían comencé a aprender. Resolvimos colisiones
y ambigüedades en su terminología y diferencias entre sus opiniones técnicas, y aprendieron.
Ellos comenzó para explicar cosas más precisamente y consecuentemente, y nosotros empezado
para desarrollar un modelo juntos.

Experto 1: No es suficiente decir que llega una señal a un ref-des, tenemos que saber el pin.

Desarrollador: Ref-des?

Experto 2: Mismo cosa como a componente ejemplo. Ref-des es qué es llamado en a especial
herramienta usamos.

Experto 1: De todos modos, una red conecta un pin particular de una instancia a un pin
particular de otra.

Desarrollador: Están usted diciendo que a alfiler pertenece para solamente una componente
ejemplo y conecta a uno solo ¿neto?

Experto 1: Sí, así es.

Experto 2: También, cada neto posee a topología, un arreglo que determina los manera los
elementos de los neto conectar.

Desarrollador: OK, ¿qué tal esto?



Figura 1.3.




Para centrar nuestra exploración, nos limitamos, por un tiempo, a estudiar una característica en
particular. A

"Investigacion simulación" haría rastro los propagación de a señal para detectar probable sitios
de cierto tipos de problemas en los diseño.

Desarrollador: I comprender cómo los señal obtiene transportado por los Neto para todos los
Patas adjunto, pero cómo eso ir ninguna más que ¿que? Lo hace los Topología tener algo para
hacer con ¿eso?

Experto 2: No. El componente empuja la señal.

Desarrollador: Nosotros ciertamente hipocresía modelo los interno conducta de a chip. Eso es
manera también Complicado.

Experto 2: Nosotros no tener para. Nosotros lata utilizar a simplificación. Sólo a lista de
empuja a través de el componente desde cierto Patas para cierto otros.

Desarrollador: ¿Algo como esto?

[Con considerable prueba y error, juntos esbozamos un escenario.]



Figura 1.4.




Desarrollador: Pero, ¿qué necesita saber exactamente de este cálculo?

Experto 2: Casarse ser mirando por largo señal retrasos—digamos, ninguna señal sendero que
era más que dos o tres lúpulo Es a regla de pulgar. Si los sendero es también largo, los señal
mayo no llegar durante los ciclo de reloj

Desarrollador: Más que Tres lúpulo.... Entonces nosotros necesitar para calcular los sendero
longitudes Y qué cuenta como un ¿brincar?

Experto 2: Cada vez que la señal pasa por una red , es un salto.

Desarrollador: Podríamos pasar el número de saltos y una red podría incrementarlo, así.



Figura 1.5.

Desarrollador: los solamente parte que no es claro para me es donde los "empuja" venir
desde. Hacer nosotros almacenar eso datos por cada Componente instancia ?

Experto 2: Los impulsos serían los mismos para todas las instancias de un componente.

Desarrollador: Entonces los escribe de componente determina los empuja ellos ser los
mismo por cada instancia?



Figura 1.6.




Experto 2: Yo soy no Por supuesto exactamente qué algunos de esta medio, pero I haría
imagina almacenar empujones por cada componente haría Mira algo me gusta que.

Desarrollador: Lo siento, I tiene a poco también detallado allí. I era sólo pensando eso a
través de. . . . Entonces, ahora, donde lo hace los Topología venir dentro ¿eso?

Experto 1: Eso no se usa para la simulación de la sonda.

Desarrollador: Luego Yo soy yendo para soltar eso fuera por ahora, ¿OK? Nosotros lata traer
eso espalda Cuándo nosotros obtener para esas caracteristicas

Y así siguió (con muchos más tropiezos de los que aquí se muestran). Lluvia de ideas y
perfeccionamiento; interrogatorio y explicando los modelo desarrollado a lo largo de con mi
comprensión de los dominio y

sus comprensión de cómo los modelo haría jugar dentro los solución. A clase diagrama
representando eso temprano modelo mira algo me gusta esta.



Figura 1.7.




Después a Pareja más medio tiempo días de esta, I sintió I entendido suficiente para intento
algunos código. Escribí un prototipo muy simple, impulsado por un marco de prueba
automatizado. Evité toda la infraestructura. No había persistencia ni interfaz de usuario (UI).
Esto me permitió concentrarme. en los conducta. I era poder para demostrar a sencillo
Investigacion simulación en sólo a un poco mas días. Aunque eso usado ficticio datos y escribió
crudo texto para los consola, eso era sin embargo haciendo los real cálculo de sendero
longitudes utilizando Java objetos. Esos Java objetos reflejado un modelo compartido por los
dominio expertos y yo mismo.

los concreción de esta prototipo hecha más claro para los dominio expertos qué los modelo quiso
decir y cómo eso relacionados para los marcha software. Desde que punto, nuestro modelo
discusiones se convirtió más interactivo, como ellos pudo ver cómo I incorporado mi recién
adquirido conocimiento dentro los modelo y luego dentro los software. Y ellos tenido hormigón
realimentación desde los prototipo para evaluar sus pensamientos propios.

Incrustado en ese modelo, que naturalmente se volvió mucho más complicado que el que se
muestra aquí, estaba el conocimiento sobre el dominio de PCB relevante para los problemas
que estábamos resolviendo. se consolidó muchos sinónimos y leve variaciones en descripciones
Eso excluido cientos de hechos que los ingenieros entendían pero que no eran directamente
relevantes, como las características digitales reales de los componentes. Un especialista en
software como yo podría mirar los diagramas y en minutos comienzo para obtener a sujeción
en qué los software era sobre. Él o ella haría tener a estructura organizar nuevo información y
aprender más rápido, para hacer mejor suposiciones sobre qué era importante y qué era no, y
para comunicar mejor con los tarjeta de circuito impreso ingenieros

Como los ingenieros descrito nuevo caracteristicas ellos necesario, I hecha ellos andar me a
través de escenarios de cómo interactuaban los objetos. Cuando los objetos del modelo no
pudieron llevarnos a través de un escenario importante, nosotros lluvia de ideas nuevo unos o
cambió viejo unos, crujido sus conocimiento. Nosotros refinado el modelo; el código
coevolucionó. Unos meses más tarde, los ingenieros de PCB tenían una rica herramienta que
excedía sus Expectativas.


[ Equipo LiB ]

[ Equipo LiB ]


Ingredientes de un modelado efectivo
Ciertas cosas que hicimos condujeron al éxito que acabo de describir.

1. Unión los modelo y los implementación _ Que crudo prototipo falsificado los esencial
enlace temprano, y eso era mantenido a través de todos subsecuente iteraciones

2. cultivando a idioma establecido en los modelo _ En primero, los ingenieros tenido para
explicar problemas elementales de PCB para mí, y tuve que explicar lo que significaba un
diagrama de clases. Pero a medida que avanzaba el proyecto, cualquiera de nosotros
podía tomar términos directamente del modelo, organizarlos en oraciones consistentes
con la estructura del modelo y ser entendido sin ambigüedades sin traducción.

3. Desarrollando a rico en conocimientos modelo _ los objetos tenido conducta y forzado
normas. los el modelo no era solo un esquema de datos; era integral para resolver un
problema complejo. capturó el conocimiento de varios clases

4. Destilando el modelo . Se agregaron conceptos importantes al modelo a medida que
se hizo más completo, pero Igualmente importante, conceptos fueron caído Cuándo
ellos no lo hizo probar útil o céntrico. Cuándo un innecesario concepto era atado para
una que era necesario, a nuevo modelo fue encontrado que distinguido los esencial
concepto entonces que los otro pudo ser caído.

5. Lluvia de ideas y experimentación . El lenguaje, combinado con bocetos y una actitud de
lluvia de ideas, convirtió nuestras discusiones en laboratorios del modelo, en los que
cientos de experimental variaciones pudo ser ejercitado, intentado, y juzgado. Como los
equipo pasó por escenarios, las expresiones habladas en sí proporcionaron una prueba
rápida de viabilidad de un modelo propuesto, ya que el oído podía detectar rápidamente
la claridad y la facilidad o la torpeza de expresión.

Eso es los creatividad de lluvia de ideas y masivo experimentación, apalancado a través de a
lenguaje basado en modelos y disciplinado por el circuito de retroalimentación a través de la
implementación, que hace posible para encontrar a rico en conocimientos modelo y destilar
eso. Esta tipo de conocimiento crujido vueltas el conocimiento de los equipo dentro valioso
modelos


[ Equipo LiB ]

[ Equipo LiB ]


Crujido de conocimientos
Los analistas financieros procesan números. Tamizan montones de figuras detalladas,
combinándolas y recombinándolas buscando el significado subyacente, buscando una
presentación simple que aporte fuera qué es De Verdad importante—un comprensión que lata ser
los base de a financiero decisión.

Eficaz dominio modeladores están conocimiento trituradoras Ellos llevar a torrente de información
y sonda para los pertinente chorrito. Ellos tratar una organizando idea después otro, buscando
por los sencillo ver eso hace sentido de los masa. Muchos modelos están intentado y rechazado o
transformado. Éxito viene en un conjunto emergente de conceptos abstractos que da sentido a
todos los detalles. Esta destilación es un riguroso expresión de los especial conocimiento que
posee estado fundar más pertinente.

La elaboración de conocimientos no es una actividad solitaria. Colabora un equipo de
desarrolladores y expertos en dominios, típicamente LED por desarrolladores Juntos ellos
dibujar en información y crujido eso dentro un útil formulario. los crudo material llega desde los
mentes de dominio expertos, desde usuarios de sistemas existentes, desde los previo
experiencia de los técnico equipo con a relacionados legado sistema o otro proyecto en los
mismo dominio. Eso llega en los formulario de documentos escrito por los proyecto o usado en
el negocio, y un montón y un montón de hablar. Temprano versiones o prototipos alimento
experiencia espalda dentro el equipo y cambiar interpretaciones.

En el antiguo método de cascada, los expertos en negocios hablan con los analistas, y los
analistas digieren y resumen y pasar los resultado a lo largo de para los programadores, quién
código los software. Esta Acercarse falla porque eso completamente carece realimentación. los
analistas tener completo responsabilidad por creando los basado únicamente en los aportes de
los expertos en negocios. No tienen la oportunidad de aprender de los programadores o
adquirir experiencia con las primeras versiones del software. El conocimiento gotea en una
dirección, pero lo hace no acumular.

Otros proyectos utilizan un proceso iterativo, pero no logran generar conocimiento porque no
se abstraen. Desarrolladores obtener los expertos para describir a deseado rasgo y luego ellos ir
construir eso. Muestran a los expertos el resultado y preguntan qué hacer a continuación. Si los
programadores practican la refactorización, pueden mantener el software lo suficientemente
limpio como para continuar ampliándolo, pero si los programadores no están interesados en los
dominio, ellos aprender solamente qué los solicitud deberían hacer, no los principios Detrás de
eso. Útil software lata ser construido que manera, pero los proyecto voluntad Nunca llegar en a
punto donde poderoso nuevo caracteristicas desplegar como corolarios para más viejo
caracteristicas.

Bien programadores voluntad naturalmente comienzo para resumen y desarrollar a modelo que
lata hacer más trabajo. Pero Cuándo esta sucede solamente en a técnico ajuste, sin
colaboración con dominio expertos, los conceptos están ingenuo. Que superficialidad de
conocimiento produce software que lo hace a básico trabajo pero le falta a profundo conexión
para los dominio del experto manera de pensando.

los Interacción Entre equipo miembros cambios como todos miembros crujido los modelo juntos.
El constante refinamiento de los dominio modelo efectivo los desarrolladores para aprender los
importante principios del negocio al que asisten, en lugar de producir funciones
mecánicamente. Los expertos del dominio a me nudo refinan su propia comprensión al verse
obligados a destilar lo que saben a lo esencial, y ellos venir para comprender los conceptual rigor
que software proyectos exigir.

Todos esta hace los equipo miembros más competente conocimiento trituradoras Ellos aventar
fuera lo extraño. Ellos reformularon el modelo en una forma cada vez más útil. Porque los
analistas y programadores están alimentación dentro eso, eso es limpiamente organizado y

abstraído, entonces eso lata proveer apalancamiento para los implementación. Porque los
dominio expertos están alimentación dentro eso, los modelo refleja profundo conocimiento de
los negocio. los abstracciones están cierto negocio principios

Como los modelo mejora, eso se convierte a herramienta por organizando los información que
continúa para fluye a través del proyecto. El modelo se centra en el análisis de requisitos.
Interactúa íntimamente con la programación y el diseño. Y en un ciclo virtuoso, profundiza el
conocimiento de los miembros del equipo sobre el dominio, lo que les permite ver más
claramente y conduce a un mayor refinamiento del modelo. estos modelos están Nunca
Perfecto; ellos evolucionar. Ellos deber ser práctico y útil en haciendo sentido de el dominio.
Deben ser lo suficientemente rigurosos para que la aplicación sea sencilla de implementar y
comprender.


[ Equipo LiB ]

[ Equipo LiB ]


Aprendizaje continuo
Cuando nos propusimos escribir software, nunca sabemos lo suficient e. El conocimiento sobre
el proyecto está fragmentado, dispersado entre muchos gente y documentos, y es mezclado con
otro información para que ni siquiera sepamos qué fragmentos de conocimiento necesitamos
realmente. Dominios que parecen menos técnicamente desalentador lata ser engañoso:
nosotros no darse cuenta de cómo mucho nosotros no saber. Esta la ignorancia lleva nosotros
para hacer falso suposiciones

Mientras tanto, todos los proyectos filtran conocimiento. Las personas que han aprendido algo
siguen adelante. Reorganización se dispersa los equipo, y los conocimiento es fragmentado otra
vez. Crucial subsistemas se subcontratan de tal manera que se entrega el código pero no el
conocimiento. Y con enfoques de diseño típicos, los código y documentos no Rápido esta ganado
con esfuerzo conocimiento en a usable forma, así Cuándo los oral tradicion es interrumpido por
ninguna razón, los conocimiento es perdió.

Los equipos altamente productivos hacen crecer su conocimiento conscientemente,
practicando el aprendizaje continuo ( Kerievsky 2003 ). Para desarrolladores, esta medio
mejorando técnico conocimiento, a lo largo de con modelado de dominio general habilidades (tal
como esos en esta libro). Pero eso además incluye grave aprendiendo sobre lo especifico dominio
ellos están trabajando en.

Estas autodidacta equipo miembros formulario a estable centro de gente para enfocar en los
tareas de desarrollo que involucrar los más crítico áreas (Para más en esta, ver Capítulo 15 .)
los conocimiento acumulado en los mentes de esta centro equipo hace ellos más eficaz
conocimiento trituradoras

En este punto, deténgase y hágase una pregunta. ¿Aprendiste algo sobre e l proceso de diseño
de PCB? Aunque esta ejemplo posee estado a superficial tratamiento de que dominio, allí deberían
ser algunos aprendiendo Cuándo a dominio modelo es discutido I aprendió un enorme Monto. I
hizo no aprender cómo para ser a tarjeta de circuito impreso ingeniero. Que era no los meta. I
aprendió para hablar para tarjeta de circuito impreso expertos, comprender el mayor conceptos
pertinente para los solicitud, y prueba de cordura qué nosotros fueron edificio.

De hecho, nuestro equipo finalmente descubrió que la simulación de la sonda era una prioridad
baja para el desarrollo, y la función finalmente se eliminó por completo. Con él se fueron las
partes del modelo. que capturado comprensión de emprendedor señales a través de componentes
y contando lúpulo El núcleo de los solicitud convertido fuera para mentir en otra parte, y los
modelo cambió para traer esos aspectos en el centro del escenario. Los expertos del dominio
habían aprendido más y habían aclarado el objetivo de la aplicación. ( Capítulo 15 discute estas
cuestiones en profundidad.)

Incluso entonces, los temprano trabajo era esencial. Llave modelo elementos fueron retenido,
pero más importante, ese trabajo puso en marcha el proceso de procesamiento de
conocimientos que hizo efectivo todo el trabajo subsiguiente: los conocimiento ganado por
equipo miembros, desarrolladores, y dominio expertos similar; los inicios de a compartido
idioma; y los clausura de a realimentación lazo a través de implementación. Un viaje de
descubrimiento posee para comienzo algun lado.


[ Equipo LiB ]

[ Equipo LiB ]


Diseño rico en conocimientos
El tipo de conocimiento capturado en un modelo como el ejemplo de PCB va más allá de
"encontrar los sustantivos". Negocio ocupaciones y normas están como central para a dominio
como están los entidades involucrado; cualquier dominio voluntad tener varios categorías de
conceptos. Conocimiento crujido rendimientos modelos que refleja esto tipo de visión. En
paralela con modelo cambios, desarrolladores refactorizar los implementación para expresar
los modelo, donación los solicitud utilizar de que conocimiento.

Eso es con esta moverse más allá de entidades y valores que conocimiento crujido lata obtener
intenso, porque allí mayo ser real inconsecuencia entre negocio normas. Dominio expertos están
generalmente no consciente de cuán complejos son sus procesos mentales a medida que, en el
curso de su trabajo, navegan por todas estas reglas, reconcilian contradicciones y llenan vacíos
con sentido común. El software no puede hacer esto. Es a través del procesamiento de
conocimientos en estrecha colaboración con expertos en software que se aclaran las reglas,
descarnado fuera, reconciliado, o metido fuera de alcance.


Ejemplo
Extrayendo un oculto Concepto

Vamos comienzo con a muy sencillo dominio modelo que pudo ser los base de un solicitud por
reserva de cargas sobre a viaje de a Embarcacion.



Figura 1.8.




Podemos afirmar que la responsabilidad de la aplicación de reservas es asociar cada Carga
con un Viaje , grabación y seguimiento que relación. Entonces lejos entonces bueno. Algun
lado en los código de aplicación allí pudo ser a método me gusta esta:

public int makeBooking(Cargo cargo, Voyage voyage) {
int confirmación = orderConfirmationSequence.next();
viaje.addCargo(carga, confirmación);
regreso confirmación;
}

Porque allí están siempre último minuto cancelaciones, estándar práctica en los Envío industria es
aceptar más carga de la que un buque en particular puede llevar en un viaje. Esto se llama
"sobreventa". A veces a sencillo porcentaje de capacidad es usado, tal como reserva 110 por
ciento de capacidad. En otra casos complejo normas están aplicado, favoreciendo importante
clientes o cierto tipos de carga.

Esta es a básico estrategia en los Envío dominio que haría ser conocido para ninguna persona de
negocios en el envío industria, pero eso puede que no ser entendido por todos técnico gente en
a software equipo.

los requisitos documento contiene esta línea:
Permitir 10% sobreventa
El diagrama de clase y el código ahora se ven así:



Figura 1.9.




public int makeBooking(Cargo cargo, Voyage voyage) {
double maxBooking = viaje.capacidad() * 1.1;
si ((viaje.bookedCargoSize() + carga.tamaño()) > reserva
máxima) regreso –1;
En t confirmación =
orderConfirmationSequence.next();
viaje.addCargo(carga, confirmación);
regreso confirmación;
}

Ahora un importante negocio regla es oculto como a Guardia cláusula en un solicitud método.
Luego, en el capítulo 4 , bien Mira en los principio de ARQUITEC TURA EN C APAS , cual haría guía
nosotros para moverse el exceso de reservas regla dentro a dominio objeto, pero por ahora
vamos concentrado en cómo nosotros pudo hacer este conocimiento más explícito y accesible
para todo el mundo en los proyecto. Esta voluntad traer nosotros para a solución parecida.

1. Como escrito, eso es improbable que ninguna negocio experto pudo leer esta código para
verificar los regla, incluso con los Guia de a desarrollador.

2. Eso haría ser difícil por a técnico, no empresario para conectar los requisito texto con el
código.

Si la regla fuera más compleja, mucho más estaría en juego.

Podemos cambiar el diseño para capturar mejor este conocimiento. La regla de overbooking es
una política. Política es otro nombre para el patrón de diseño conocido como ESTRATEGIA (
Gamma et al. 1995 ). Es usual motivado por los necesitar para sustituir diferente normas, cual
es no necesario aquí, como lejos como sabemos. Pero el concepto que estamos tratando de
capturar se ajusta al significado de una política, que es igualmente importante motivación en
impulsado por el dominio diseño. (Ver Capítulo 12 , "Relativo Diseño patrones a la Modelo.")



Figura 1.10.

El código es ahora:

public int makeBooking(Cargo cargo, Voyage voyage) {
si (!overbookingPolicy.isAllowed(carga, viaje)) regreso –1;
int confirmación = orderConfirmationSequence.next();
viaje.addCargo(carga, confirmación);
regreso confirmación;
}

La nueva clase de política de overbooking contiene este método:

público booleano está Permitido (Carga carga, Viaje
viaje) { regreso (carga.tamaño() +
voyage.bookedCargoSize()) <=
(viaje.capacidad() * 1.1);
}

Eso voluntad ser claro para todos que sobreventa es a distinto política, y los implementación
de que regla es explícito y separar.

Ahora bien, no estoy recomendando que se aplique un diseño tan elaborado a cada detalle del
dominio. Capítulo 15 , "Destilación," va dentro profundidad en cómo para enfocar en los
importante y minimizar o separar todo lo demás. Este ejemplo pretende mostrar que un
modelo de dominio y su correspondiente diseño lata ser usado para seguro y Cuota
conocimiento. los más explícito diseño tiene estos ventajas:

1. En pedido para traer los diseño para esta escenario, los programadores y todo el mundo
demás involucrado tendrá venir para comprender los naturaleza de sobreventa como a
distinto y importante de reglas de negocio, no sólo un oscuro cálculo.

2. programadores lata show negocio expertos técnico artefactos, incluso código, que
deberían ser inteligible para dominio expertos (con Guia), de este modo clausura los
realimentación lazo.


[ Equipo LiB ]

[ Equipo LiB ]


modelos profundos
Útil modelos raramente mentir en los superficie. Como nosotros venir para comprender los
dominio y los necesidades de la aplicación, solemos descartar elementos superficiales del
modelo que parecían importantes al principio, o nosotros cambio sus perspectiva. Sutil
abstracciones surgir que haría no tener ocurrir a nosotros en los comienzo pero que atravesar
para los corazón de los importar.

los anterior ejemplo es flojamente establecido en una de los proyectos que voy a ser dibujo en por
varios ejemplos a lo largo del libro: un sistema de envío de contenedores. Los ejemplos de este
libro se mantendrán accesible para no envío expertos Pero en a verdadero proyecto, donde
continuo aprendiendo prepara el equipo miembros, modelos de utilidad y claridad con frecuencia
llamada por sofisticación ambas cosas en los dominio y en modelado técnica.

En que proyecto, porque a envío comienza con los Actuar de reserva carga, nosotros
desarrollado a modelo que permitido nosotros para describir los carga, su itinerario, y entonces
en. Esta era todos necesario y útil, todavía los dominio expertos sintió insatisfecho. Ahí era a
manera ellos miró en sus negocio que éramos desaparecido.

Finalmente, después de meses de conocimiento, nos dimos cuenta de que el m anejo de la
carga, la carga y descarga física, los movimientos de un lugar a otro, lo realizaban en gran
medida los subcontratistas. o por Operacional gente en los empresa. En los vista de nuestro Envío
expertos, hubo una serie de transferencias de responsabilidad entre las partes. Un proceso
regía esa transferencia de responsabilidad legal y práctica, del cargador a algún transportista
local, de un transportista a otro, y finalmente para los consignatario. Con frecuencia, los carga
haría sentarse en a depósito tiempo se estaban dando pasos importantes. En otras ocasiones, la
carga se movería a través de complejos pasos físicos que fueron no pertinente para los Envío de
la empresa negocio decisiones Bastante que los logística de El itinerario, qué llegó para los
delantero fueron legal documentos tal como los cuenta de flete, y procesos que conducen para los
liberar de pagos

Esta Más adentro vista de los Envío negocio hizo no dirigir para los eliminación de los Itinerario
objeto, pero el modelo cambió profundamente. Nuestro vista de Envío cambió desde Moviente
contenedores desde lugar para lugar, para transfiriendo responsabilidad por carga desde
entidad para entidad. Características por manejo estas transferencias de responsabilidad ya no
estaban unidas de manera incómoda a las operaciones de carga, sino que se apoyaban por a
modelo que llegó fuera de un comprensión de los significativo relación entre esos operaciones y
esos responsabilidades.

Conocimiento crujido es un exploración, y usted hipocresía saber donde usted
voluntad final arriba. [ Equipo LiB ]

[ Equipo LiB ]


Capitulo dos. Comunicación y uso del
lenguaje
A dominio modelo lata ser los centro de a común idioma por a software proyecto. los modelo es a
conjunto de conceptos construido arriba en los cabezas de gente en los proyecto, con condiciones
y relaciones que reflejan la percepción del dominio. Estos términos e interrelaciones
proporcionan la semántica de un lenguaje que se adapta para los dominio tiempo siendo preciso
suficiente por técnico desarrollo. Esta es a crucial cordón que teje los modelo dentro desarrollo
actividad y une eso con los código.

Esta basado en modelos comunicación es no limitado para diagramas en unificado Modelado
Idioma (UML). Para hacer más eficaz utilizar de a modelo, eso necesidades para impregnar cada
medio de comunicación. Aumenta la utilidad de los documentos de texto escritos, así como los
diagramas informales y la conversación casual. vuelto a enfatizar en Ágil procesos. Eso mejora
comunicación a través de los código sí mismo y a través de los pruebas por que código.

los utilizar de idioma en a proyecto es sutil pero muy
importante. . . . [ Equipo LiB ]

[ Equipo LiB ]


Idioma ubicuo
Para primero usted escribe a
sentencia, y luego usted
picar eso pequeña;
Luego mezcla los pedacitos, y
clasificar ellos solo como ellos
oportunidad para otoño:
los pedido de los frases no hace
diferencia en todos.

— Lewis Carroll, "Poeta Fit, Non Nascitur"

Para crear a flexible, rico en conocimientos diseño llamadas por a versátil, compartido equipo
idioma, y a experimentación animada con idioma que raramente sucede en software proyectos


Dominio expertos tener limitado comprensión de los técnico jerga de software desarrollo, pero
ellos utilizar los jerga de sus campo—probablemente en varios sabores Desarrolladores, en los
otro mano, puede entender y discutir los sistema en descriptivo, funcional condiciones, vacío de
los sentido transportado por los expertos idioma. O desarrolladores mayo crear abstracciones que
apoyo sus diseño pero no son entendido por los dominio expertos Desarrolladores trabajando en
diferente partes de los problema elaborar sus propio diseño conceptos y formas de describiendo
los dominio.

A través de esta división lingüística, los expertos del dominio describen vagamente lo que
quieren. Desarrolladores, luchando para comprender a dominio nuevo para ellos, vagamente
comprender. A pocos miembros de los equipo logra ser bilingüe, pero se convierten en cuellos de
botella del flujo de información y sus traducciones están inexacto.

En un proyecto sin un idioma común, los desarrolladores tienen que traducir para los expertos
del dominio. Los expertos en dominios traducen entre desarrolladores y ot ros expertos en
dominios. Los desarrolladores incluso traducen entre sí. La traducción confunde los conceptos
del modelo, lo que conduce a una refactorización destructiva del código. El carácter indirecto
de la comunicación oculta la formación de cismas, diferentes equipo miembros utilizar
condiciones diferentemente pero no darse cuenta de eso. Esta Guías para software poco confiable
que no encajar juntos (ver Capítulo 14 ). los esfuerzo de traducción previene los interacción de
conocimiento y ideas que dirigir para profundo modelo perspectivas.

A proyecto caras grave problemas Cuándo su idioma es fracturado. Dominio
expertos usar su jerga mientras que los miembros del equipo técnico tienen su
propio lenguaje sintonizado para discutir los dominio en condiciones de diseño.

La terminología de las discusiones diarias está desconectada de la terminología
incrustada en el código (en última instancia, el producto más importante de un
proyecto de software). Y incluso los mismo persona usos diferente idioma en habla y
en escribiendo, entonces que lo más incisivo expresiones de los dominio con frecuencia
surgir en a transitorio formulario que es nunca capturado en los código o incluso en
escribiendo.

La traducción embota la comunicación y hace que el conocimiento sea anémico.

Sin embargo, ninguno de estos dialectos puede ser un idioma común porque ninguno
satisface todas las necesidades.

El costo general de toda la traducción, más el riesgo de malentendidos, es demasiado alto. Un

proyecto necesidades a común idioma que es más robusto que los más bajo común denominador.
Con un consciente esfuerzo por los equipo, los dominio modelo lata proveer los columna vertebral
por que común

idioma, tiempo conectando equipo comunicación para los software implementación. Que el
lenguaje puede ser ubicuo en los del equipo trabajo.

El vocabulario de ese LENGUAJE UBIC UO incluye los nombres de clases y operaciones
destacadas. El LENGUAJE incluye términos para discutir reglas que se han hecho explícitas en el
modelo. Eso es complementado con condiciones desde nivel alto organizando principios impuesto
en los modelo (tal como C ONTEXTO MAPAS y Gran escala estructuras, cual voluntad ser discutido en
Capítulos 14 y 16 ). Finalmente, esta idioma es enriquecido con los nombres de patrones los
equipo comúnmente se aplica para el dominio modelo.

los modelo relaciones volverse los combinacional normas todos idiomas tener. los significados de
palabras y frases eco los semántica de los modelo.

los basado en modelos idioma deberían ser usado entre desarrolladores para describir no
solamente artefactos en el sistema, sino las tareas y la funcionalidad. Este mismo modelo
debería proporcionar el lenguaje para los desarrolladores. y dominio expertos para comunicar
con cada otro, y por los dominio expertos comunicar entre ellos mismos sobre requisitos,
desarrollo planificación, y caracteristicas. Cuanto más penetrantemente los idioma es usado, los
más suavemente comprensión voluntad flujo.

En menos, esta es donde nosotros necesitar para ir. Pero inicialmente los modelo mayo
simplemente no ser bien suficiente para llenar estos roles. Puede carecer de la riqueza
semántica de las jergas especializadas del campo. Pero esas jergas hipocresía ser usado puro
porque ellos Contiene ambigüedades y contradicciones Eso puede faltar los más sutil y activo
caracteristicas los desarrolladores tener creado en los código, cualquiera porque ellos hacer no
pensar de esos como parte de a modelo, o porque los codificación estilo es procesal y solo
implícitamente lleva esos conceptos de los dominio.

Pero aunque los secuencia parece circular, los conocimiento crujido proceso que lata Produce
un mas útil tipo de modelo depende en los del equipo compromiso para basado en modelos
idioma.
Persistente utilizar de los UBIC UO IDIOMA voluntad fuerza los del modelo debilidades dentro los
abierto. El equipo voluntad experimentar y encontrar alternativas para incómodo condiciones o
combinaciones Como brechas están encontradas en el idioma, nuevas palabras entrarán en la
discusión. Estos cambios en el lenguaje serán reconocidos como cambios en los dominio
modelo y voluntad dirigir los equipo para actualizar clase diagramas y renombrar clases y
métodos en los código, o incluso cambiar conducta, Cuándo los sentido de a cambios de
término.

Comprometido para utilizando esta idioma en los contexto de implementación, los
desarrolladores voluntad punto fuera imprecisión o contradicciones, atractivo los dominio
expertos en descubriendo factible alternativas.

De curso, dominio expertos voluntad hablar fuera de los alcance de los UBIC UO IDIOMA , para
explicar y dar un contexto más amplio. Pero dentro del alcance que aborda el modelo, deben
usar el LENGUAJE y plantear inquietudes cuando lo encuentren incómodo o incompleto, o
incorrecto. Usando el lenguaje basado en modelos penetrantemente y no siendo satisfecho
Hasta que eso fluye, nosotros Acercarse a modelo que es completo y comprensible, hecha arriba
de sencillo elementos que combinar para Rápido complejo ideas

Por lo tanto:

Utilizar el modelo como la columna vertebral de un idioma. Comprom eter al
equipo a ejercitar ese lenguaje implacablemente en todos comunicación dentro de
los equipo y en los código. Utilizar lo mismo idioma en diagramas, escribiendo, y
especialmente habla.

Resuelva las dificultades experimentando con expresiones alternativas, que reflejen
modelos Luego refactorizar los código, renombrar clases, métodos, y módulos para
adaptarse al nuevo modelo. Resuelva la confusión sobre los términos en una
conversación, de la misma manera nosotros venir para estar de acuerdo en los sentido
de ordinario palabras.

Reconocer que un cambio en el LENGUAJE UBICUO es un cambio en el modelo.

Dominio expertos deberían objeto para condiciones o estructuras que están incómodo o
inadecuado para

transmitir dominio comprensión; desarrolladores deberían reloj por ambigüedad o
inconsistencia que voluntad viaje arriba diseño.

Con un LENGUAJE UBIC UO , el modelo no es solo un artefacto de diseño. Se convierte en parte
integral de todo. los desarrolladores y dominio expertos hacer juntos. los IDIOMA lleva
conocimiento en una forma dinámica. La discusión en el IDIOMA da vida al significado detrás de
los diagramas y el código.


Esta discusión de UBIC UO IDIOMA asume que allí es sólo una modelo en jugar. Capítulo 14 ,
"Mantenimiento Modelo Integridad," ofertas con los coexistencia de diferente modelos (y IDIOMAS
) y cómo para mantenerse a modelo desde astillarse

El LENGUAJE UBIC UO es el portador principal de los aspectos del diseño que no aparecen en el
código: a gran escala. estructuras que organizar los entero sistema (ver Capítulo 16 ), ENC ERRADO
C ONTEXTOS que definir los relaciones de diferente sistemas y modelos (ver Capítulo 14 ), y otro
patrones aplicados para los modelo y diseño.


Ejemplo
Elaboración de un enrutador de carga

los siguiente dos diálogos tener sutil, pero importante, diferencias En cada guión, reloj por cuánto
hablan los oradores sobre lo que significa el software para el negocio en comparación con cómo
funciona técnicamente. Están los usuario y desarrollador discurso los mismo ¿idioma? Es que
idioma Rico suficiente para llevar los discusión de qué los solicitud deber ¿hacer?


Escenario 1: Abstracción mínima del dominio



Figura 2.1.




Usuario: Entonces, cuando cambiamos el punto de despacho de aduana, necesitamos rehacer
todo el plan de enrutamiento.

Desarrollador: Correcto. Eliminaremos todas las filas en la tabla de envíos con esa
identificación de carga, luego pasaremos los origen, destino, y los nuevo costumbres
autorización punto dentro los Enrutamiento Servicio, y eso voluntad repoblar los mesa. Bien
tener para tener a booleano en los Carga entonces bien saber allí es datos en los envío mesa.

Usuario: Borrar los filas? OK, lo que. De todos modos, si nosotros no lo hizo tener a
costumbres autorización punto en todo antes, bien tener para hacer los mismo cosa.

Desarrollador: Por supuesto, cualquier momento usted cambiar los origen, destino, o
costumbres autorización punto (o entrar una por los primero hora), bien controlar para ver si
nosotros tener envío datos y luego bien Eliminar eso y luego dejar los Enrutamiento Servicio
regenerado eso.

Usuario: De curso, si los viejo costumbres autorización sólo sucedió para ser los Correcto una,
nosotros no lo haría quiero hacer que.

Desarrollador: Oh, no problema. Es más fácil para sólo hacer los Enrutamiento Servicio
rehacer los cargas y descarga cada hora.

Usuario: Sí, pero es extra trabajo por nosotros para hacer todos los secundario planes por a
nuevo itinerario, entonces nosotros no querer para desviar a a no ser que los cambiar
necesita eso.

Desarrollador: Puaj. Bien, luego, si usted están entrando a costumbres autorización punto por
los primero hora, tendremos para consulta los mesa para encontrar los viejo derivado costumbres
autorización punto, y luego comparar eso para el nuevo una. Luego bien saber si nosotros
necesitar para rehacer eso.

Usuario: Tú no lo haré tener para preocuparse sobre esta en origen o destino, ya que los
itinerario haría siempre cambia luego.

Desarrollador: Bien. no lo haremos


Escenario 2: Modelo de dominio enriquecido para admitir la discusión



Figura 2.2.




Usuario: Entonces, cuando cambiamos el punto de despacho de aduana, necesitamos rehacer
todo el plan de enrutamiento.

Desarrollador: Correcto. Cuando cambie cualquiera de los atributos en la Especificación
de ruta , eliminaremos los viejo Itinerario y pedir los Enrutamiento Servicio para generar
a nuevo una establecido en los nueva ruta especificación _

Usuario: Si nosotros no había especificado a costumbres autorización punto en todos antes
de, bien tener para hacer que en lo mismo hora.

Desarrollador: Claro, cada vez que cambies algo en las especificaciones de la ruta ,
volveremos a generar el
Itinerario . Eso incluye ingresar algo por primera vez.

Usuario: De curso, si los viejo costumbres autorización sólo sucedió para ser los Correcto una,
nosotros no lo haría quiero hacer que.

Desarrollador: Oh, no hay problema. Es más fácil hacer que el servicio de rutas rehaga el
itinerario
cada vez.

Usuario: Sí, pero es extra trabajo por nosotros para hacer todos los secundario planes por a
nuevo itinerario , entonces nosotros no querer para desviar a a no ser que los cambiar
necesita eso.

Desarrollador: Oh. Luego bien tener para agregar algunos funcionalidad para los Ruta
especificación _ Luego, cada vez que cambie algo en la especificación , veremos si el
itinerario aún cumple con la especificación . Si eso no, bien tener los Enrutamiento
Servicio regenerado los Itinerario .

Usuario: Tú no lo haré tener para preocuparse sobre esta en origen o destino, ya que los
Itinerario siempre podria cambiar luego.

Desarrollador: Multa, pero eso voluntad ser más simple por nosotros para sólo hacer los
comparación cada hora. los Itinerario
solo se generará cuando la Especificación de ruta ya no se cumpla.

los segundo diálogo transmite más de los intención de los dominio experto. los usuario empleado
los palabra "itinerario" en ambos diálogos, pero en el segundo era un objeto que los dos
podían discutir precisamente, concretamente. Ellos discutido los "ruta especificación"
explícitamente, en lugar de de describiendo eso cada hora En términos de atributos y
procedimientos.

Estos dos diálogos fueron construidos deliberadamente para ser paralelos entre sí. Siendo
realistas, el primero habría sido más detallado, inflado con explicaciones de las características
de la aplicación y errores de comunicación. los basado en modelo de dominio terminología de los
segundo diseño hace los segundo diálogo más conciso.

[ Equipo LiB ]

[ Equipo LiB ]


Modelado en voz alta
los desapego de habla desde otro formularios de comunicación es a particularmente estupendo
pérdida porque nosotros humanos tener a genio por hablado idioma. Desafortunadamente,
Cuándo gente hablar, ellos por lo general no utilizar los idioma de los dominio modelo.

Que declaración mayo no anillo cierto por usted inicialmente, y Por supuesto allí están
excepciones Pero los La próxima vez que asista a una discusión sobre requisitos o diseño,
escuche de verdad. Escuchará las descripciones de las funciones en la jerga comercial o en
versiones de la jerga para profanos. Escucharás hablar sobre artefactos técnicos. y hormigón
funcionalidad. Por supuesto, lo harás escuchar condiciones desde los dominio modelo; obvio
sustantivos en los común idioma desde los negocio jerga voluntad típicamente ser codificado
como objetos, y entonces esos términos voluntad tender para ser mencionado. Pero hacer usted
escuchar frases que pudo incluso remotamente ser descrito En términos de relaciones y
interacciones en tu Actual dominio ¿modelo?

Una de los mejor formas para refinar a modelo es para explorar con habla, difícil fuera
ruidoso varias construcciones desde posible modelo variaciones. Áspero bordes están
fácil para escuchar.

"Si nosotros dar los Enrutamiento Servicio un origen, destino, y llegada hora, eso lata
Mira arriba las paradas los carga voluntad tener para hacer y, bien . . . palo ellos en los
base de datos." ( vago y técnico )

"Los origen, destino, y entonces en . . . eso todos alimenta dentro los Enrutamiento
servicio , y nosotros volver un Itinerario que posee todo nosotros necesitar en eso." (
más completo, pero detallado )

"Un servicio de enrutamiento encuentra un itinerario que cumple con una
especificación de ruta ". ( conciso )

Es vital que juguemos con palabras y frases, aprovechando nuestras habilidades lingüísticas
para el esfuerzo de modelado, así como es vital involucrar nuestro razonamiento
visual/espacial al dibujar diagramas. Sólo como nosotros emplear nuestro analítico habilidades
con metódico análisis y diseño, y que misteriosa "sensación" de los código. Estas formas de
pensando complemento cada otro, y eso toma todos de ellos para encontrar útil modelos y
diseños De todos de estas, experimentando con idioma es más con frecuencia pasado por alto. (
La Parte III de este libro profundizará en este proceso de descubrimiento y mostrará esta
interacción en varios diálogos).

De hecho, nuestros cerebros parecen estar algo especializados para lidiar con la complejidad
del lenguaje hablado. (una bien tratamiento por laicos, me gusta yo mismo, es los Idioma
instinto , por steven más rosado [ más rosado 1994 ]). Para ejemplo, Cuándo gente de diferente
idioma antecedentes venir juntos para el comercio, si ellos no tener a común idioma ellos
inventar una, llamado a pidgin _ los lengua macarrónica no es como exhaustivo como los
Altavoces' original idiomas, pero eso es adecuado para los tarea en mano.
Cuándo gente están hablando, ellos naturalmente descubrir diferencias en interpretación y los
sentido de ellos palabras, y ellos naturalmente resolver esos diferencias Ellos encontrar áspero
lugares en los lenguaje y suave ellos fuera.

Una vez I tomó un intensivo español clase en Universidad. los regla en los salón de clases era
que no a palabra del inglés podría ser hablado. Al principio, fue frustrante. Se sentía muy poco
natural y requería mucha autodisciplina. Pero finalmente, mis compañeros de clase y yo
llegamos a un nivel de fluidez que podíamos Nunca tener alcanzado a través de ejercicios en
papel.

Como nosotros utilizar los UBIC UO IDIOMA de los dominio modelo en discusiones, especialmente

discusiones en el que los desarrolladores y los expertos en el dominio analizan los escenarios y
los requisitos: nos volvemos más fluidos en los idioma y enseñar cada otro su matices Nosotros
naturalmente venir para Cuota los lenguaje que nosotros hablar en a manera que Nunca sucede
con diagramas y documentos.

trayendo sobre a LENGUAJE UBIC UO en a software proyecto es más fácil dijo que hecho, y nosotros
tengo que completamente emplear nuestro natural talentos para jalar eso apagado. Sólo como
humanos visual y espacial capacidades nos deja transmitir y proceso información rápidamente en
gráfico resúmenes, nosotros lata explotar nuestro innato talento para gramático, significativo
idioma para conducir modelo desarrollo.

Por tanto, como complemento al patrón LENGUAJE UBIC UO :

Jugar con los modelo como usted hablar sobre los sistema. Describir escenarios fuera
ruidoso utilizando los elementos e interacciones del modelo, combinando conceptos
en formas permitidas por el modelo. Encuentre formas más fáciles de decir lo que
necesita decir y luego recupere esas nuevas ideas. abajo para los diagramas y código.


[ Equipo LiB ]

[ Equipo LiB ]


Un equipo, un idioma
Técnico gente con frecuencia sentir los necesitar para "blindaje" los negocio expertos desde los
dominio modelo. Ellos dicen:

"Demasiado abstracto para ellos".

"No entienden los objetos".

"Tenemos que recopilar requisitos en su terminología".

Estas están sólo a pocos de los razones He oyó por teniendo dos idiomas en los equipo.
Olvídalos.

De curso allí están técnico componentes de los diseño que mayo no preocupación los dominio
expertos, pero es mejor que les interese el núcleo del modelo. ¿Demasiado abstracto?
Entonces, ¿cómo sabes las abstracciones están ¿sonar? Hacer usted comprender los dominio
como profundamente como ellos ¿hacer? A veces requisitos específicos están recogido desde
nivel inferior usuarios, y a subconjunto de los más hormigón Es posible que se necesite
terminología para ellos, pero se supone que un experto en el dominio es capaz de pensar algo
profundamente. sobre su o su campo. Si sofisticado dominio expertos no comprender los modelo,
allí es algo incorrecto con los modelo.

Ahora en los comenzando, Cuándo los usuarios están que se discute futuro capacidades de los
sistema que no he estado modelado aún, allí es no modelo por ellos para utilizar. Pero como
pronto como ellos empezar para trabajo a través de estos nuevo ideas con los desarrolladores,
los proceso de a tientas hacia a compartido modelo comienza Eso puede comenzar fuera
incómodo y incompleto, pero eso voluntad gradualmente obtener refinado. Como los nuevo
idioma evoluciona, el dominio expertos deber hacer los extra esfuerzo para adoptar eso, y para
reacondicionar ninguna viejo documentos que son todavía importante.

Cuándo dominio expertos utilizar esta IDIOMA en discusiones con desarrolladores o entre ellos
mismos, ellos rápidamente descubrir áreas donde los modelo es inadecuado por sus necesidades
o parece incorrecto para ellos. Los expertos en el dominio (con la ayuda de los desarrolladores)
también encontrarán áreas donde la precisión del modelo basado idioma expone contradicciones
o vaguedad en sus pensando.

los desarrolladores y dominio expertos lata informalmente prueba los modelo por caminando a
través de escenarios, utilizando los modelo objetos paso a paso. Casi cada discusión es un
oportunidad por los desarrolladores y usuarios expertos para jugar juntos con el modelo,
profundizando la comprensión y el refinamiento de los demás conceptos como ellos ir.

los dominio expertos lata utilizar los idioma de los modelo en escribiendo utilizar casos, y lata
trabajo aún más directamente con los modelo por especificando aceptación pruebas

A veces se plantean objeciones a la idea de utilizar el lenguaje del modelo para recopilar
requisitos. Después de todo, ¿no deberían los requisitos ser independientes del diseño que los
cumple? Esto pasa por alto la realidad de que todo lenguaje se basa en algún modelo. Los
significados de las palabras son cosas resbaladizas. El modelo de dominio generalmente se
derivará de la propia jerga de los expertos del dominio, pero tener estado "limpiado arriba," para
tener estafador, más estrecho definiciones De curso, los dominio los expertos deben objetar si
estas definiciones difieren de los significados aceptados en el campo. En un proceso ágil, los
requisitos evolucionan a medida que avanza un proyecto porque casi nunca existe el
conocimiento. arriba parte delantera para especificar un solicitud adecuadamente. Parte de esta
evolución deberían ser los reformulando de El requisitos en los refinado UBIC UO IDIOMA .

Multiplicidad de idiomas es con frecuencia necesario, pero los lingüístico división deberían Nunca

ser Entre los

dominio expertos y los desarrolladores ( Capítulo 12 , "Manteniendo Modelo Integridad,"
ofertas con la convivencia de modelos en los mismo proyecto.)

Por supuesto, los desarrolladores usan terminología técnica que un experto en el dominio no
entendería. Desarrolladores tener un extenso jerga que ellos necesitar para discutir los técnico
aspectos de a sistema. Es casi seguro que los usuarios también tendrán una jerga
especializada que va mucho más allá del alcance limitado de los solicitud y los comprensión de
los desarrolladores Pero estas están extensiones para el idioma. Estos dialectos no deben
contener vocabularios alternativos para el mismo dominio que reflejen distinto modelos


Figura 2.3. U LENGUAJE BICUO se cultiva en la intersección de jergas.

Con un LENGUAJE UBIC UO , conversaciones entre desarrolladores, discusiones entre expertos de
dominio, y expresiones en los código sí mismo están todos establecido en los mismo idioma,
derivado desde un compartido dominio modelo.


[ Equipo LiB ]

[ Equipo LiB ]


Documentos y Diagramas
Cuando sea Yo soy en a reunión que se discute a software diseño, I lata difícilmente función sin
dibujo en un pizarron o bloc de dibujo. A bien parte de qué I dibujar es UML diagramas,
principalmente clase diagramas o interacciones de objetos.

Algunos gente están naturalmente visual, y diagramas ayuda gente sujetar cierto tipos de
información. UML diagramas están bonito bien en comunicado relaciones Entre objetos, y ellos
están justo en demostración interacciones. Pero ellos hacer no transmitir los conceptual
definiciones de esos objetos. En una reunión, I haría carne fuera esos significados en habla
como I esbozado los diagrama, o ellos surgiría en a diálogo con otro Participantes.

Sencillo, informal UML diagramas lata ancla a discusión. Bosquejo a diagrama de Tres para cinco
objetos centrales para el tema en cuestión, y todos pueden mantenerse enfocados. Todos
compartirán una visión de las relaciones. Entre los objetos y, significativamente, los objetos'
nombres los hablado discusión puede ser más eficaz con esta ayuda. Un diagrama se puede
cambiar a medida que las personas prueban diferentes experimentos mentales, y los bosquejo
voluntad llevar en algunos de los fluidez de hablado palabras, a cierto parte de La discusión.
Después todos, UML soportes por unificado Modelado idioma _

los problema llega Cuándo gente sentir obligado para transmitir los entero modelo o diseño a
través de UML. A lote de objeto modelo diagramas están también completo y, simultaneamente,
salir también mucho fuera. Ellos son también completo porque gente sentir ellos tener para
poner todos los objetos que ellos están yendo para código en a modelado herramienta. Con
todos que detalle, no una lata ver los bosque por los árboles.

Aún en despecho de todos que detalle, los atributos y relaciones están solamente medio los
historia de un modelo de objeto El comportamiento de esos objetos y las restricciones sobre
ellos no se ilustran tan fácilmente. Objeto Interacción diagramas lata ilustrar algunos difícil
Puntos calientes en los diseño, pero los a granel de las interacciones hipocresía ser mostrado que
manera. Eso es sólo también mucho trabajo, ambas cosas para crear los diagramas y para
leerlos. Y un diagrama de interacción solo puede implicar el propósito detrás del modelo. Para
incluir restricciones y afirmaciones, UML caídas espalda en texto, metido en poco soportes,
insertado en el diagrama.

los conductual responsabilidades de un objeto lata ser insinuado en a través de operación
nombres, y ellos pueden ser implícitamente demostrado con objeto Interacción (o secuencia)
diagramas, pero ellos no poder ser declarado _ Entonces, esta tarea recae en el texto
complementario o la conversación. En otras palabras, un diagrama UML no puede transmitir
dos de los aspectos más importantes de un modelo: el significado de los conceptos que
representa y lo que los objetos deben hacer. Sin embargo, esto no tiene por qué
preocuparnos, porque cuidado utilizar de inglés (o Español, o lo que) lata llenar esta papel bonito
bien.

UML tampoco es un lenguaje de programación muy satisfactorio. Cada intento que he visto de
usar la generación de código capacidades de los modelado herramientas posee estado
contraproducente. Si usted están constreñido por el capacidades de UML, usted voluntad con
frecuencia tener para salir fuera los más crucial parte de los modelo porque es una regla que no
encaja en un diagrama de caja y línea. Y, por supuesto, un generador de código no puede
hacer uso de esas anotaciones textuales. Si utiliza alguna tecnología que permita archivos
ejecutables programas para ser escrito en a similar a UML diagramación idioma, luego los UML
diagrama se reduce simplemente a otra forma de ver el programa en sí mismo, y se pierde el
significado mismo de "modelo". Si usa UML como su lenguaje de implementación, aún
necesitará otros medios de comunicación los despejado modelo.

diagramas están a medio de comunicación y explicación, y ellos facilitar lluvia de ideas. Sirven
estas termina mejor si ellos están mínimo. Exhaustivo diagramas de los completo objeto modelo

fallar a comunicar o explicar; ellos abrumar los lector con detalle y ellos carecer sentido. Esta

nos aleja del diagrama de modelo de objetos que lo abarca todo, o incluso de la base de datos
que lo abarca todo repositorio de UML. Eso Guías nosotros hacia simplificado diagramas de
conceptualmente importante partes de los objeto modelo que están esencial para comprensión
los diseño. los diagramas en esta libro son típicos de esos I utilizar en proyectos Ellos simplificar,
ellos explicar, y ellos incluso incorporar a poco de no estándar notación Cuándo eso aclara sus
punto. Ellos show diseño restricciones, pero ellos están no diseño especificaciones en cada
detalle. Ellos representar los esqueletos de ideas

los vital detalle sobre los diseño es capturado en los código _ A bien escrito implementación
deberían ser transparente, revelador los modelo subyacente eso. (Haciendo Por supuesto que
esta sucede es los tema de el siguiente capítulo y mucho de los descanso de esta libro.) Hecho
suplementario diagramas y documentos lata guiar la atención de las personas hacia los puntos
centrales. La discusión en lenguaje natural puede completar los matices del significado. Esta es
por qué I preferir para girar cosas en el interior fuera desde los manera a típico UML diagrama los
maneja Bastante que a diagrama anotado con texto, I escribe a texto documento ilustrado con
selectivo y simplificado diagramas

Recuerde siempre que el modelo no es el diagrama . El propósito del diagrama es ayudar a
comunicar y explicar el modelo. El código puede servir como depósito de los detalles del
diseño. Bien escrito Java es como expresivo como UML en su manera. Con cuidado seleccionado
y diagramas construidos lata atender para enfocar atención y ayuda navegación si ellos están no
oscurecido por a compulsión a representar los modelo o diseño completamente.


diseño escrito Documentos

Hablado comunicación suplementos los código rigor y detalle con sentido. Pero aunque hablar es
crítico para conectando todo el mundo para los modelo, a grupo de ninguna Talla voluntad
probablemente necesitar los estabilidad y compartibilidad de algunos escrito documentos. Pero
haciendo escrito documentos que Realmente ayuda el equipo Produce bien software es a desafío.

Una vez a documento toma en a persistente formulario, eso con frecuencia pierde su conexión
con los flujo de el proyecto. Eso es izquierda detrás por los evolución de los código, o por los
evolución de los idioma de el proyecto.

Muchos enfoques lata trabajo. A pocos específico documentos voluntad ser sugirió mucho luego,
en Parte IV de esta libro, cual habla a especial necesidades, pero I hacer no intento para
prescribir a colocar de documentos un proyecto deberían utilizar. En lugar de, I voluntad oferta
dos general pautas por evaluando a documento.


Los documentos deben complementar el código y el habla

Cada proceso Agile tiene su propia filosofía sobre los documentos. Los defensores de la
programación extrema utilizan no extra diseño documentos en todos y dejar los código hablar
por sí mismo. Corriendo código no miente, como ninguna otro documento puede que. los
conducta de corriendo código es inequívoco

La programación extrema se concentra exclusivamente en los elementos activos de un
programa y las pruebas ejecutables. Incluso los comentarios agregados al código no afectan el
comportamiento del programa, por lo que siempre pierden la sincronización con el código
activo y su modelo de conducción. Documentos y diagramas externos hacer no afectar los
conducta de los programa, entonces ellos otoño fuera de sincronizar En los otro mano, hablado
comunicación y efímero diagramas en pizarras hacer no persistir para crear Confusión. Esta
dependencia en los código como comunicación medio motiva desarrolladores para mantenerse
los código limpio y transparente.

Pero el código como documento de diseño tiene sus límites. Pued e abrumar al lector con
detalles. Aunque su conducta es inequívoco, que no significar eso es obvio. Y los sentido detrás
un comportamiento lata ser duro para transmitir. En otro palabras, documentando

exclusivamente a través de código posee algunos de los mismo básico problemas como
utilizando exhaustivo UML diagramas De curso, masivo hablado

comunicación dentro de los equipo da contexto y Guia alrededor los código, pero eso es efímero
y localizado Y desarrolladores están no los solamente gente quién necesitar para comprender
los modelo.

A documento no debería tratar para hacer qué los código ya lo hace bueno _ los código ya
suministros el detalle. Eso es un exacto especificación de programa conducta.

Otro documentos necesitar para iluminar sentido, para dar visión dentro Gran escala
estructuras, y centrarse atención en centro elementos. Documentos lata aclarar diseño
intención Cuándo los lenguaje de programación lo hace no apoyo a simple implementación de
a concepto. Escrito los documentos deben complemento los código y los hablando.


Los documentos deben funcionar para ganarse la vida y mantenerse actualizados

Cuándo I documento a modelo en escribiendo, I diagrama pequeña, con cuidado seleccionado
subconjuntos de los modelo y rodear ellos con texto. I definir los clases y sus responsabilidades
en palabras y marco ellos en un contexto de sentido como solamente a natural idioma lata. Pero
los diagrama espectáculos algunos de los elecciones que se han hecho al formalizar y reducir
los conceptos en un modelo de objeto. Estos diagramas pueden ser algo informales, incluso
dibujados a mano. Además de ahorrar mano de obra, los diagramas dibujados a mano tienen
la ventaja de parecer casuales y temporales. Estas son cosas buenas para comunicar. porque
ellos están generalmente cierto de nuestro modelo ideas

El mayor valor de un documento de diseño es explicar los conceptos del modelo, ayuda en la
navegación los detalle de los código, y quizás dar algunos visión dentro los del modelo destinado a
estilo de uso. Dependiente en los filosofía de los equipo, los entero diseño documento pudo ser
como sencillo como un conjunto de bocetos al corriente en los paredes, o eso pudo ser sustancial.

A documento deber ser involucrado en proyecto actividades _ los más fácil manera para juez
esta es para observar los documentos Interacción con los UBIC UO IDIOMA . Es los documento
escrito en los gente del lenguaje hablar en los proyecto (ahora)? Es eso escrito en los idioma
incorporado en los ¿código?

Escuche el LENGUAJE UBIC UO y cómo está cambiando. Si los términos explicados en un
documento de diseño no comienzan a aparecer en las conversaciones y el código, el
documento no está cumpliendo su propósit o. Quizás los documento es también grande o
Complicado. Quizás eso es no enfocado en a tema suficientemente importante. La gente no lo
lee o no lo encuentra convincente. Si no tiene impacto en los UBIC UO IDIOMA , algo es
incorrecto.

Por el contrario, usted mayo escuchar los UBIC UO IDIOMA cambiando naturalmente tiempo a
documento es quedarse detrás. Evidentemente los documento lo hace no parecer pertinente
para gente o lo hace no parecer lo suficientemente importante para actualizar. Eso pudo sin
peligro ser archivado como historia, pero izquierda activo eso pudo crear confusión y daño al
proyecto. Y si un documento no juega un papel importante, mantenerlo actualizado a través
de escarpado voluntad y disciplina desechos esfuerzo.

los UBIC UO IDIOMA permite otro documentos, tal como requisitos especificaciones, para ser mas
conciso y menos ambiguo. Como los dominio modelo llega para reflejar los más pertinente
conocimiento del negocio, los requisitos de la aplicación se convierten en escenarios dentro de
ese modelo, y el LENGUAJE UBIC UO se puede utilizar para describir dicho escenario en términos
que se conectan directamente con el DISEÑO IMPULSADO POR MODELOS (consulte el Capítulo 3 ).
Como resultado, las especificaciones se pueden escribir de manera más simple, porque hacer no
tener para transmitir los negocio conocimiento que mentiras detrás los modelo.

Por acuerdo documentos mínimo y enfoque ellos en complementando código y conversación,
documentos lata Quédate conectado para los proyecto. Dejar los UBIC UO IDIOMA y su evolución
se tu guía para eligiendo documentos que En Vivo y obtener tejido dentro los del proyecto
actividad.

Base ejecutable

Ahora vamos examinar los elección de los XP comunidad y algunos otros, para confiar casi
exclusivamente sobre el código ejecutable y sus pruebas. Gran parte de este libro analiza
formas de hacer que el código transmita significado a través de un DISEÑO IMPULSADO POR
MODELOS (consulte el Capítulo 3 ). El código bien escrito puede ser muy comunicativo, pero no
se garantiza que el mensaje que transmite sea exacto. Oh, la realidad del comportamiento
causado por una sección de código es ineludible. Pero el nombre de un método puede ser
ambiguo, engañoso, o fuera de fecha comparado para los internos de los método. los
afirmaciones en un prueba están riguroso, pero los historia dicho por variable nombres y los
organización de los código es no. Bien programación estilo mantiene esta conexión como directo
como posible, pero eso es todavía un ejercicio en autodisciplina. Se necesita meticulosidad para
escribir código que no solo haga lo correcto sino que también diga los Correcto cosa.

Eliminación de esos discrepancias es a importante venta punto de enfoques tal como declarativo
diseño (discutido en Capítulo 10 ), en cual a declaración de los propósito de a programa elemento
determina su real conducta en los programa. los conducir para generar programas desde UML es
parcialmente motivado por esta, aunque eso generalmente no tiene trabajó fuera bien entonces
lejos.

Todavía, tiempo incluso código lata engañar, eso es más cerca para los terrestre que otro
documentos. alineando el comportamiento, intención, y mensaje de código utilizando Actual
estándar tecnología requiere disciplina y cierto manera de pensando sobre diseño (discutido en
longitud en Parte III ). Para comunicar efectivamente, el código debe estar basado en el mismo
lenguaje usado para escribir los requisitos—el mismo lenguaje que los desarrolladores hablar
con cada otro y con dominio expertos

[ Equipo LiB ]

[ Equipo LiB ]


Modelos Explicativos
los empuje de esta libro es que una modelo deberían estar debajo de implementación,
diseño, y comunicación del equipo. Teniendo separar modelos por estas separar propósitos
posa a peligro.

Modelos lata además ser valioso como educación SIDA para enseñar sobre los dominio. los
modelo que conduce el diseño es una vista de los dominio, pero eso mayo ayuda aprendiendo
para tener otro puntos de vista, usado solamente como educativo herramientas, para comunicar
general conocimiento de los dominio. Para esta propósito, gente puedo usar fotos o palabras que
transmitir otro tipos de modelos no relacionado para software diseño.

Una especial razón que otro modelos están necesario es alcance. los técnico modelo que
unidades El software desarrollo proceso deber ser estrictamente recortado abajo para los
necesario mínimo para realizar sus funciones Un modelo explicativo puede incluir aspectos del
dominio que proporcionan un contexto que aclara los más estrechamente alcance modelo.

Los modelos explicativos ofrecen la libertad de crear estilos mucho más comunicativos
adaptados a un tema en particular. Las metáforas visuales utilizadas por los expertos en un
campo a menudo presentan explicaciones más claras, educando desarrolladores y armonizando
expertos Explicativo modelos además regalo el dominio en a manera que es simplemente
diferente, y múltiple, diverso explicaciones ayuda gente aprender.

Ahí es no necesitar por explicativo modelos para ser objeto modelos, y eso es generalmente
mejor si ellos no son. De hecho, es útil evitar UML en estos modelos, para evitar cualquier
falsa impresión de correspondencia. con los software diseño. Incluso aunque los explicativo
modelo y los modelo que los diseños de los variadores a menudo se corresponden, las
similitudes rara vez serán exactas. Para evitar confusiones, todos deber ser consciente de los
distinción.


Ejemplo
Operaciones y rutas de envío

Considerar un solicitud que pistas cargas por a Envío empresa. los modelo incluye a vista
detallada de cómo Puerto operaciones y embarcación viajes están ensamblado dentro un
Operacional plan por a carga (un "ruta"). Pero para los no iniciado, a clase diagrama mayo no ser
muy esclarecedor.


Figura 2.4. Un diagrama de clases para una ruta de envío

En tal a caso, un explicativo modelo lata ayuda equipo miembros comprender qué los clase
diagrama en realidad medio. Aquí es otro manera de mirando en los mismo conceptos:

Cada línea en Figura 2.5 representa cualquiera a Puerto operación (cargando o descarga los
carga), o carga que se encuentra almacenada en tierra, o carga que se encuentra en un
barco en ruta. esto no corresponde en detalle con los clase diagrama, pero eso refuerza
llave puntos desde los dominio.


Figura 2.5. Un modelo explicativo para una ruta de envío

Esta clasificar de diagrama, a lo largo de con natural idioma explicaciones de los modelo eso
representa, lata ayudar a los desarrolladores y dominio expertos similar comprender los más
riguroso software modelo diagramas
Juntos, son más fáciles de entender que cualquiera de los dos puntos de vista por separado.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo tres. Modelo vinculante e
implementación
los primero cosa I vio como I caminó a través de los puerta era a completo clase diagrama
impreso en hojas grandes de papel que cubierto a grande muro. Eso era mi primero día en a
proyecto en cual inteligente la gente tenía gastado meses con cuidado investigando y
desarrollando a detallado modelo de los dominio. los objeto típico en el modelo tenía intrincadas
asociaciones con otros tres o cuatro objetos, y esta red de asociaciones tenido pocos natural
fronteras En esta respeto, los analistas tenido estado cierto para los naturaleza de El dominio.

Como agobiante como los tamaño de la pared diagrama era, los modelo hizo capturar algunos
conocimiento. Después un moderado Monto de estudio, I aprendió bastante a poco (aunque
que aprendiendo era duro para directo, muy parecido a al azar hojeada los Web). I era más
preocupado para encontrar que mi estudio dio no visión en el aplicación código y diseño.

Cuándo los desarrolladores tenido comenzado implementar los solicitud, ellos tenido
rápidamente descubierto que el enredo de asociaciones, aunque navegable por a humano
analista, no lo hizo traducir dentro almacenable, recuperable unidades que pudo ser manipulado
con transaccional integridad. Mente usted, esta proyecto estaba usando un objeto base de datos,
entonces los desarrolladores no lo hizo incluso tener para rostro los retos de mapeo de objetos
en tablas relacionales. En un nivel fundamental, el modelo no proporcionó una guía para la
implementación.

Porque los modelo era "correcto," los resultado de extenso colaboración Entre técnico analistas y
negocio expertos, los desarrolladores alcanzado los conclusión que conceptualmente establecido
objetos no pude ser los Fundación de sus diseño. Entonces ellos procedió para desarrollar un
anuncio hoc diseño. Sus diseño hizo utilizar a pocos de los mismo clase nombres y atributos por
datos almacenamiento, pero eso era no establecido en la existencia, o ninguna, modelo.

los proyecto tenido a dominio modelo, pero qué bien es a modelo en papel a no ser que eso
directamente SIDA el desarrollo de corriendo ¿software?

Unos años más tarde, vi que el mismo resultado final provenía de un proceso completamente
diferente. Este proyecto era para reemplazar un existente C++ solicitud con a nuevo diseño
implementado en Java. los aplicación antigua tenido estado hackeado juntos sin ninguna respecto
por objeto modelado. los diseño de el viejo solicitud, si allí era una, tenido acrecentado como una
capacidad después otro tenido estado establecido en arriba de los existente código, sin ninguna
perceptible generalización o abstracción.

¡Lo inquietante fue que los productos finales de los dos procesos eran muy similares! Ambos
tenían funcionalidad, pero fueron hinchado, muy duro para comprender, y finalmente
inmantenible Aunque el implementaciones tenido, en lugares, a tipo de franqueza, usted no pude
ganar mucho visión sobre el propósito del sistema leyendo el código. Ninguno de los procesos
aprovechó el paradigma del objeto. disponible en sus desarrollo ambiente, excepto como
elegante datos estructuras

Modelos venir en muchos variedades y atender muchos roles, incluso esos restringido para los
contexto de un software desarrollo proyecto. Impulsado por el dominio diseño llamadas por a
modelo que no sólo ayuda análisis temprano pero es los muy Fundación de los diseño. Esta
Acercarse posee algunos importante implicaciones para los código. Qué es menos obvio es que
impulsado por el dominio diseño requiere a diferente Acercarse al modelado. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Diseño basado en modelos

los astrolabio, usado para calcular estrella posiciones, es a mecánico
implementación de un modelo de la cielo _



Estrechamente relativo los código para un subyacente modelo da los código sentido y hace los
modelo relevante.




Proyectos que tener no dominio modelo en todos, pero sólo escribe código para realizar una
función después otro, ganar pocos de los ventajas de conocimiento crujido y comunicación
discutido en los dos anteriores capítulos A complejo dominio voluntad pantano ellos.

En los otro mano, muchos complejo proyectos hacer intento algunos clasificar de dominio
modelo, pero ellos no mantener a ajustado conexión Entre los modelo y los código. los modelo
ellos desarrollar, posiblemente útil como un exploratorio herramienta en los comienzo, se
convierte cada vez más irrelevante y incluso engañoso.

A Medieval Sky Computer

Ancient Greek astronomers devised the astrolabe, which was perfected by medieval
Islamic scientists. A rotating web (called a rete) represented the positions of the fixed
stars on the celestial sphere. Interchangeable plates engraved with a local spherical
coordinate system represented the views from different latitudes. Rotating the rete
against the plate enabled a calculation of celestial positions for any time and day of the
year. Conversely, given a stellar or solar position, the time could be calculated. The
astrolabe was a mechanical implementation of an object-oriented model of the sky.

Todos los cuidado prodigado en los modelo proporciona poco seguridades que los diseño es
correcto, porque el dos están diferente.

Esta conexión puede romperse de muchas maneras, pero el desapego es a menudo una
elección consciente. Muchos diseño metodologías defensor un análisis modelo , bastante distinto
desde los diseño y generalmente desarrollado por diferente gente. Eso es llamado un análisis
modelo porque eso es los producto de analizando el negocio dominio para organizar su conceptos
sin ninguna consideración de los parte eso voluntad jugar en un sistema de software. Un modelo
de análisis se entiende como una herramienta para la comprensión solamente; mezcla en la
implementación preocupaciones es pensamiento para lodoso los aguas Luego, a diseño es creado
que mayo tener solo a suelto correspondencia para los análisis modelo. los análisis modelo es no
creado con problemas de diseño en mente, y por lo tanto eso es probable para ser bastante poco
práctico por esos necesidades.

Algunos conocimiento crujido sucede durante tal un análisis, pero más de eso es perdió Cuándo
comienza la codificación, Cuándo los desarrolladores están forzado para venir arriba con nuevo
abstracciones por los diseño. Entonces allí es no garantía que los perspectivas ganado por los
analistas y incorporado en los modelo voluntad conservarse o redescubrirse. En este punto,
manteniendo cualquier mapeo entre el diseño y el vagamente conectado modelo es no
económico.

los puro análisis modelo incluso caídas pequeño de su primario meta de comprensión los dominio,
porque los descubrimientos cruciales siempre surgen durante el esfuerzo de
diseño/implementación. Muy específico, inesperado problemas siempre aumentar. Un en la
delantera modelo voluntad ir dentro profundidad sobre algunos temas irrelevantes, tiempo eso
pasa por alto algunos importante asignaturas. Otro asignaturas voluntad ser representado en
formas en que están no útil para los solicitud. los resultado es que puro análisis modelos obtener
abandonado poco después codificación empieza, y más de los terrestre posee para ser cubierto
otra vez. Pero los segundo hora alrededor, si los desarrolladores percibir análisis para ser a
separar proceso, modelado sucede en a menos forma disciplinada. Si los gerentes percibir análisis
para ser a separar proceso, los desarrollo equipo mayo No ser dado adecuado acceso para
dominio expertos

Lo que los porque, software que carece a concepto en los Fundación de su diseño es, en mejor,
un mecanismo que lo hace útil cosas sin explicando su comportamiento.

Si los diseño, o algunos central parte de eso, lo hace no mapa para los dominio
modelo, que modelo es de poco valor, y la corrección del software es sospechosa. Al
mismo tiempo, las asignaciones complejas entre modelos y funciones de diseño son
difíciles de entender y, en la práctica, imposibles de mantener a medida que cambia
el diseño. Se abre una división mortal entre análisis y diseño entonces que visión
ganado en cada de esos ocupaciones lo hace no alimentar al otro.

Un análisis deber capturar fundamental conceptos desde los dominio en a comprensible, forma
expresiva. los diseño posee para especificar a colocar de componentes que lata ser construido con
los herramientas de programación en utilizar en los proyecto que voluntad llevar a cabo
eficientemente en los objetivo despliegue ambiente y la voluntad correctamente resolver los
problemas planteado por los solicitud.

IMPULSADO POR MODELOS DISEÑO descartes los dicotomía de análisis modelo y diseño para
búsqueda fuera a modelo único que sirve ambas cosas propósitos Ajuste aparte puramente
técnico cuestiones, cada objeto en los el diseño juega un papel conceptual descrito en el
modelo. Esto nos obliga a ser más exigentes con los elegidos. modelo, ya que eso deber
realizar dos bastante diferente objetivos

Ahí están siempre muchos formas de abstrayendo a dominio, y allí están siempre muchos diseños
que puede resolver un problema de aplicación. Esto es lo que hace que sea práctico unir el
modelo y el diseño. Esta vinculación no debe tener el costo de un análisis debilitado, fatalmente
comprometido por consideraciones técnicas. Ni lata nosotros aceptar torpe diseños, reflejando
dominio ideas pero evitando diseño de software principios Esta Acercarse demandas a modelo que
obras bien como ambas cosas análisis y diseño.
Cuándo a modelo no parecer para ser práctico por implementación, nosotros deber búsqueda

por a nuevo una. Cuándo a modelo no fielmente Rápido los llave conceptos de los dominio,
nosotros deber búsqueda por un nuevo una. los modelado y diseño proceso luego se convierte
a único iterativo lazo.

El imperativo de relacionar estrechamente el modelo de dominio con el diseño añade un
criterio más para elegir los más útil modelos fuera de los universo de posible modelos Eso
llamadas por duro pensando y generalmente toma múltiple iteraciones y a lote de
refactorización, pero eso hace los modelo relevante _

Por lo tanto:

Diseñe una parte del sistema de software para reflejar el modelo de dominio de una
manera muy literal, de modo que el mapeo sea obvio. Revisar el modelo y
modificarlo para implementarlo más naturalmente en software, incluso como usted
buscar para hacer eso reflejar Más adentro visión dentro el dominio. Exigir un único
modelo que sirva bien para ambos propósitos, además de soportar a robusto UBICUO
IDIOMA .

Extraiga del modelo la terminología utilizada en el diseño y la asignación básica de
responsabilidades. los código se convierte un expresión de los modelo, entonces a
cambiar para los El código puede ser un cambio en el modelo. Su efecto debe
extenderse a través del resto de las actividades del proyecto. respectivamente.

Para Corbata los implementación servilmente para a modelo generalmente requiere
software herramientas y lenguajes de desarrollo que soportan un paradigma de
modelado, como la programación orientada a objetos.

A veces allí voluntad ser diferente modelos por diferente subsistemas (ver Capítulo 14 ), pero
solamente un modelo deberían aplicar para a especial parte de los sistema, a lo largo de todos
aspectos de los esfuerzo de desarrollo, desde los código para requisitos análisis.

los único modelo reduce los posibilidades de error, porque los diseño es ahora a directo
excrecencia de El con cuidado considerado modelo. los diseño, y incluso los código sí mismo,
posee los comunicatividad de un modelo.


Desarrollando a único modelo que capturas los problema y proporciona a práctico diseño es más
fácil dijo que hecho. Tú hipocresía sólo llevar ninguna modelo y girar eso dentro a factible
diseño. los modelo posee para se cuidadoso hecho a mano para hacer por a práctico
implementación. Diseño y implementación se deben emplear técnicas que permitan que el
código exprese un modelo de manera e fectiva (consulte la Parte II ). Trituradores de
conocimiento explorar modelo opciones y refinar ellos dentro práctico software elementos. El
desarrollo se convierte en un iterativo proceso de refinación los modelo, los diseño, y los código
como a único actividad (ver Parte III ).

[ Equipo LiB ]

[ Equipo LiB ]


Paradigmas de modelado y soporte de herramientas
Para hacer a IMPULSADO POR MODELO DISEÑO pagar apagado, los correspondencia deber ser literal,
exacto dentro de límites de humano error. Para hacer tal a cerrar correspondencia de modelo y
diseño posible, eso es casi esencial para trabajo dentro de a modelado paradigma soportado por
software herramientas que permitir usted para crear directo análogos para los conceptos en los
modelo.



Figura 3.1.




La programación orientada a objetos es poderosa porque se basa en un paradigma de
modelado y proporciona implementaciones de los modelo construcciones Como lejos como los
programador es preocupado, objetos realmente existe en memoria, ellos tener asociaciones con
otro objetos, ellos están organizado dentro clases, y proporcionan comportamiento disponible
por mensajería. Aunque muchos desarrolladores se benefician con sólo aplicar los técnico
capacidades de objetos para organizar programa código, los verdadero descubrimiento de objeto
diseño llega Cuándo los código expresa los conceptos de a modelo. Java y muchos otro las
herramientas permiten los creación de objetos y relaciones directamente análogo para conceptual
objeto modelos

Aunque eso posee Nunca alcanzado los masa uso que orientado a objetos idiomas tener, los
Lenguaje prólogo es a natural encajar por IMPULSADO POR MODELO DISEÑO . En esta caso, los
paradigma es lógica, y el modelo es a colocar de lógico normas y hechos ellos funcionar en.

IMPULSADO POR MODELOS DISEÑO posee limitado aplicabilidad utilizando idiomas tal como C,
porque allí es sin modelado paradigma que corresponde para a puramente procesal idioma.
Esos idiomas son procesales en los sentido que los programador dice los computadora a
serie de pasos para seguir.
Aunque los programador mayo ser pensando sobre los conceptos de los dominio, los programa sí
mismo es una serie de manipulaciones técnicas de datos. El resultado puede ser útil, pero el
programa no captura mucho de los sentido. Procesal idiomas con frecuencia apoyo complejo
datos tipos que comienzan a corresponder a concepciones más naturales del dominio, pero
estos tipos complejos son solo datos organizados y no capturan los aspectos a ctivos del
dominio. El resultado es que el software escrito en procesal idiomas posee Complicado funciones
vinculado juntos establecido en

caminos anticipados de ejecución, más que por conexiones conceptuales en el modelo de
dominio.

Antes de haber oído hablar de la programación orientada a objetos, escribía programas fortran
para resolver modelos matemáticos, que es precisamente el tipo de dominio en el que
sobresale fortran. Las funciones matemáticas son el principal componente conce ptual de dicho
modelo y pueden expresarse claramente en fortran. Incluso entonces, allí es no manera para
capturar más alto nivel sentido más allá de los funciones Más los dominios no matemáticos no
se prestan al DISEÑO IMPULSADO POR MODELOS en lenguajes procedimentales porque los dominios
están no conceptualizado como Matemáticas funciones o como pasos en a procedimiento.

Orientado a objetos diseño, los paradigma que actualmente domina los mayoria de ambicioso
proyectos, es los Acercarse usado ante todo en esta libro.


Ejemplo
De procedimental a IMPULSADO POR MODELOS

Como discutido en Capítulo 1 , a impreso circuito tablero (TARJETA DE CIRCUITO IMPRESO) lata
ser visto como a colección de Conductores eléctricos (llamados redes ) que conectan los pines
de varios componentes. A menudo hay decenas de miles de redes Especial software, llamado a
tarjeta de circuito impreso diseño herramienta, encuentra a físico arreglo por todos redes
entonces que ellos no cruzar o interferir con cada otro. Eso lo hace esta por optimizando sus
caminos mientras satisfactorio un enorme número de restricciones metido por los humano
diseñadores que restringir la forma en que se pueden distribuir. Aunque las herramientas de
diseño de PCB son muy sofisticadas, todavía tienen algunos deficiencias

Una problema es que cada de estas miles de redes posee su propio colocar de diseño normas.
tarjeta de circuito impreso los ingenieros ven muchos redes como pertenencia para natural
agrupaciones que deberían Cuota los mismo normas. Para ejemplo, algunos redes formulario
autobuses _


Figura 3.2. Un diagrama explicativo de buses y redes.

Por grumos redes dentro a autobús, quizás 8 o dieciséis o 256 en a hora, los ingeniero cortes los
trabajo abajo para un mas manejable Talla, mejorando productividad y reduciendo errores los
problema es, los diseño la herramienta tiene no tal concepto como a autobús. Normas tener para
ser asignado para decenas de miles de redes, una neto en un tiempo

Un diseño mecanicista

Desesperado ingenieros trabajó alrededor esta limitación en los diseño herramienta por
escribiendo guiones que analizar el diseño herramientas datos archivos y insertar normas
directamente dentro los expediente, aplicar ellos para un completo autobús en un tiempo

La herramienta de diseño almacena cada conexión de circuito en un archivo de lista de red ,
que se parece a esto:

Neto Nombre Componente.Pin
-------- -------------
Xyz0 A.0, B.0
Xyz1 A.1, B.1
Xyz2 A.2, B.2
. . .

Almacena las reglas de diseño en un formato de archivo similar a este:

Nombre
neto
Tipo de regla Parámetros
-------- --------- ----------
Xyz1 min_linewith 5
Xyz1 max_delay 15
Xyz2 min_linewith 5
Xyz2 max_delay 15
. . .


los ingenieros con cuidado utilizar a nombrando convención por los redes entonces que un
alfabético clasificar de los datos expediente voluntad lugar los redes de a autobús juntos en a
ordenado expediente. Luego sus texto lata analizar gramaticalmente los archivo y modificar
cada neto establecido en su autobús. Real código para analizar gramaticalmente, manipular, y
escribe los archivos es solo demasiado verboso y opaco para atender esta ejemplo, entonces
voy a sólo lista los pasos en los procedimiento.

1. Ordenar archivo de lista de red por red nombre.
2. Leer cada línea en expediente, buscando primero una que empieza con autobús
nombre patrón.
3. Para cada línea con pareo nombre, analizar gramaticalment e línea para obtener
neto nombre.
4. Adjuntar neto nombre con regla texto para normas expediente.
5. Repetir desde 3 Hasta que izquierda de línea no más extenso partidos autobús
nombre.

Entonces, la entrada de una regla de bus como esta:

Nombre
del
autobús
Tipo de
regla
Parámetros
-------- --------- ----------
Xyz max_vias 3

daría como resultado agregar reglas de red al archivo como estas:

Nombre
neto
Tipo de
regla
Parámetros
-------- --------- ----------
. . .

Xyz0 max_vias 3
Xyz1 max_vias 3

Xyz2 max_vias 3
. . .

I imagina que los persona quién primero escribió tal a texto tenido solamente esta sencillo
necesitar, y si esta fueron la solamente requisito, a texto me gusta esta haría hacer a lote de
sentido. Pero en práctica, allí están ahora docenas de guiones. Por supuesto, podrían
refactorizarse para compartir funciones de clasificación y coincidencia de cadenas, y si los
idioma soportado función llamadas para encapsular los detalles, los guiones podría comenzar
para leer casi me gusta los resumen pasos encima. Pero todavía, ellos están sólo expediente
manipulaciones. Una diferente expediente formato (y allí están varios) haría exigir a partir de
desde rasguño, incluso aunque el concepto de agrupar autobuses y aplicarles reglas es el
mismo. Si desea una funcionalidad más rica o interactividad, usted haría tener para pagar por
cada pulgada.

Qué los texto escritores fueron difícil para hacer era para suplemento los herramientas dominio
modelo con el concepto de "autobús". Su implementación infiere la existencia del bus a través
de clasificaciones y coincidencias de cadenas, pero eso lo hace no explícitamente trato con los
concepto.


Un diseño basado en modelos

La discusión anterior ya ha descrito los conceptos que los expertos del dominio usan para
pensar sus problemas. Ahora nosotros necesitar para organizar esos conceptos explícitamente
dentro a modelo nosotros lata programa base en.


Figura 3.3. Un diagrama de clases orientado hacia la asignación
eficiente de reglas de diseño.

Con estas objetos implementado en un orientado a objetos idioma, los centro funcionalidad se
vuelve casi trivial.

los asignar regla () método lata ser implementado en Resumen Neto. los reglas
asignadas() método en Neto toma su propio normas y su autobús _ normas.

clase abstracta AbstractNet
{ reglas de conjunto
privadas;
void AssignRule (regla de
LayoutRule) {
reglas.add(regla);
}
Establecer reglas asignadas () {

reglas de devoluci ón;
}
}
clase Net extiende AbstractNet
{ autobús privado en
autobús;
Establecer reglas asignadas () {
Establecer resultado = nuevo HashSet();
resultado.addAll(super.assignedRules());
result.addAll(bus.assignedRules());
resultado devuelto;
}
}

De curso, allí haría ser a estupendo trato de secundario código, pero esta cubre los básico
funcionalidad de El texto.

La aplicación requiere lógica de importación/exportación, que encapsularemos en algunos
servicios simples.


Responsabilidad del servicio
Neto Lista importar lecturas Neto Lista expediente, crea ejemplo de Neto por cada entrada
Neto Regla exportar Dado a colección de redes, escribe todos adjunto normas
dentro los Normas Expediente Bien además necesitar a pocos utilidades:

Responsabilidad de clase
Neto El repositorio proporciona acceso para Redes por nombre
inferido
Autobús
Fábrica
Dado a colección de redes, usos nombrando convenciones para inferir
autobuses, crea instancias
Autobús El repositorio proporciona acceso para Autobuses por nombre

Ahora bien, iniciar la aplicación es cuestión de inicializar los repositorios con los datos
importados:

Redes de recogida = NetListImportService.read(unArchivo);
NetRepository.addAll(redes);
Autobuses de recogida = InferredBusFactory.groupIntoBuses(redes);
BusRepository.addAll(autobuses);

Cada de los servicios y repositorios lata ser unidad probada. Incluso más importante, los centro
La lógica del dominio se puede probar. Aquí hay una prueba unitaria del comportamiento más
central (usando el marco de prueba JUnit):

testBusRuleAssignment p úblico vacío
() { Neto a0 = nuevo Neto("a0");
Neto a1 = nuevo Neto("a1");
Autobús a = nuevo autobús("a"); //Autobús es no
conceptualmente dependiente a.addNet(a0); //en el
reconocimiento basado en el nombre, y entonces

a.addNet(a1); // sus pruebas no deben ser cualquiera.

regla de red minAncho4 =
NetRule.create(MIN_WIDTH, 4);
a.assignRule(minWidth4);
assertTrue(a0.assignedRules().contains(minWidth4));
afirmarEquals(minWidth4, a0.getRule(MIN_WIDTH));
afirmarEquals(minWidth4, a1.getRule(MIN_WIDTH));
}

Un interactivo usuario interfaz pudo regalo a lista de autobuses, permitiendo los usuario para
asignar normas para cada uno, o eso pudo leer desde a expediente de normas por hacia atrás
compatibilidad. A fachada hace acceso sencillo ya sea para interfaz. Su implementación ecos los
prueba:

público vacío asignarReglaBus(Cadena busName, Cuerda tipo
de regla, doble parámetro){
Bus bus = BusRepository.getByName(busName);
bus.assignRule(NetRule.create(ruleType, par ámetro));
}

Refinamiento:

NetRuleExport.write(un nombre de archivo, NetRepository.allNets());

(El servicio solicita a cada red las reglas asignadas() y luego las escribe completamente
expandidas).

De curso, si allí fueron solamente una operación (como en los ejemplo), los basado en guiones
Acercarse puede ser sólo como práctico. Pero en realidad, allí fueron 20 o más. los DISEÑO
IMPULSADO POR MODELOS escamas fácilmente y lata incluir restricciones en combinatorio normas
y otro mejoras

los segundo diseño además acomoda pruebas. Su componentes tener bien definido interfaces
que puede ser probado por unidad. La única forma de probar el script es hacer una
comparación de archivo de entrada/salida de extremo a extremo.

Mantenerse en mente que tal a diseño lo hace no surgir en a único paso. Eso haría llevar varios
iteraciones de refactorización y procesamiento de conocimientos para destilar los conceptos
importantes del dominio en un simple, incisivo modelo.

[ Equipo LiB ]

[ Equipo LiB ]


Dejando que se vean los huesos: por qué los modelos
son importantes para los usuarios
En teoría, quizás, usted pudo regalo a usuario con ninguna vista de a sistema,
independientemente de qué se encuentra abajo. Pero en práctica, a discordancia causas
Confusión en mejor-bichos en peor. Considerar a muy simple ejemplo de cómo usuarios están
engañado por superpuesto modelos de marcadores por Web sitios en corriente lanzamientos de
microsoft Internet Explorador. [1]

[1] Brian Marick me mencionó este ejemplo.

A usuario de Internet Explorador piensa de "Favoritos" como a lista de nombres de Web sitios que
persistir de la sesión para sesión. Pero los implementación golosinas a Favorito como a
expediente que contiene a dirección URL, y cuyo nombre de archivo es poner en los Favoritos
lista. Eso es a problema si los Web página título contiene caracteres que son ilegal en ventanas
nombres de archivo Suponer a usuario intentos para Tienda a Favorito y tipos los siguiente
nombre por eso: "Pereza: los Secreto para Felicidad". Un error mensaje voluntad decir: "A
nombre del archivo no puede contener ninguna de los siguiente caracteres: \/ : * ? " < > |". Qué
¿nombre del archivo? En los otro mano, si La web página título ya contiene un ilegal personaje,
Internet Explorador voluntad sólo en silencio banda eso fuera. los pérdida de datos mayo ser
benigno en esta caso, pero no qué los usuario haría tener previsto. Cambiando en silencio datos
es completamente inaceptable en más aplicaciones

IMPULSADO POR MODELOS DISEÑO llamadas por trabajando con solamente una modelo (dentro de
ninguna único contexto, como voluntad ser discutido en Capítulo 14 ). Más de los Consejo y
ejemplos ir para los problemas de teniendo análisis separado modelos y diseño modelos, pero
aquí nosotros tener a problema surgiendo desde a diferente par de modelos: los usuario modelo
y los diseño/implementación modelo.

De curso, un sin adornos vista de los dominio modelo haría definitivamente no ser conveniente por
los usuario en la mayoría de los casos. Pero tratar de crear en la interfaz de usuario una ilusión
de un modelo que no sea el modelo de dominio porque Confusión a no ser que los espejismo es
Perfecto. Si Web Favoritos están Realmente sólo a colección de atajo archivos, luego exponer esta
hecho para los usuario y eliminar los confuso alternativa modelo. No solo voluntad los rasgo ser
menos confuso, pero los usuario lata luego aprovechar qué él sabe sobre los sistema de archivos
para hacer frente a los favoritos de la Web. Puede reorganizarlos con el Explorador de archivos,
por ejemplo, en lugar de que utilizar incómodo herramientas construido dentro los Web
navegador. Informado usuarios haría ser más poder para aprovechar la flexibilidad de almacenar
accesos directos web en cualquier parte del sistema de archivos. Con solo eliminar el modelo
adicional engañoso, el poder de la aplicación aumentaría y se volvería más claro. porque hacer
los usuario aprender a nuevo modelo Cuándo los programadores sintió los viejo modelo era bien
¿suficiente?

Alternativamente, Tienda los Favoritos en a diferente manera, decir en a datos expediente,
entonces que ellos lata ser sujeto a sus propio normas. Esos normas haría presumiblemente ser
los nombrando normas que aplicar para Web paginas Que haría otra vez proveer a único
modelo. Esta una dice los usuario que todo él sabe acerca de nombrar Web sitios se aplica para
Favoritos.

Cuando un diseño se basa en un modelo que refleja las preocupaciones básicas de los
usuarios y expertos del dominio, los huesos de los diseño lata ser revelado para los usuario
para a mayor que grado que con otros enfoques de diseño. Revelar el modelo le da al usuario
más acceso al potencial del software y rendimientos consistente, previsible conducta.


[ Equipo LiB ]

[ Equipo LiB ]


Modeladores prácticos
La fabricación es una metáfora popular para el desarrollo de software. Una inferencia de
esta metáfora: muy experto ingenieros diseño; menos experto obreros armar los productos
Esta metáfora posee desordenado arriba a lote de proyectos por una sencillo razón:
software desarrollo es todo diseño. Todos equipos tener especializado papeles por
miembros, pero sobreseparación de responsabilidad para analizar, modelado, diseño, y
programación interfiere con IMPULSADO POR MODELO DISEÑO .

En una proyecto, mi trabajo era para coordinar diferente solicitud equipos y ayuda desarrollar los
modelo de dominio que impulsaría el diseño. Pero la gerencia pensó que los modeladores
deberían estar modelando, y que codificación era a desperdicio de esos habilidades, entonces I
era en efecto prohibido para programa O trabajar en detalles con programadores

Cosas pareció para ser OK por a tiempo. Trabajando con dominio expertos y los desarrollo
Guías de El diferente equipos, nosotros triturado conocimiento y refinado a agradable centro
modelo. Pero que modelo nunca fue poner para trabajo, por dos razones.

Primero, algunos de los del modelo intención era perdió en los manos libres. los en general efecto
de a modelo lata ser muy sensible para detalles (como voluntad ser discutido en Partes Yo y
tercero ), y esos detalles no siempre cruzar en a UML diagrama o a general discusión. Si I pudo
tener arrollado arriba mi mangas y trabajado con los otro desarrolladores directamente,
Proporcionar algunos código para seguir como ejemplos, y Proporcionar algunos cercanos apoyo,
los equipo pudo tener tomado arriba los abstracciones de los modelo y correr con ellos.

El otro problema fue la falta de direccionalidad de la retroalimentación de la interacción del
modelo con la implementación y la tecnología. Por ejemplo, ciertos aspectos del modelo
resultaron ser tremendamente ineficiente en nuestro tecnología plataforma, pero los completo
trascendencia no lo hizo chorrito espalda para me por meses. Relativamente menor cambios pudo
tener reparado los problema, pero por luego eso no lo hizo importar. los desarrolladores fueron
bien en sus manera para escribiendo software que hizo trabajo—sin los modelo, cual se había
reducido a una mera estructura de datos, dondequiera que todavía se usara. Los
desarrolladores habían lanzado los bebé fuera con los agua de baño, pero qué elección hizo ellos
¿tener? Ellos pudo no más extenso arriesgarse a ser ensillado con los dicta de los arquitecto en los
Marfil torre.

Las circunstancias iniciales de este proyecto eran tan favorables como siempre para un
modelador que no interviene. Ya tenía una amplia experiencia práctica con la mayor parte de la
tecnología utilizada en el proyecto. I tenido incluso LED a pequeña desarrollo equipo en los
mismo proyecto antes de mi papel cambió, asique era familiar con los del proyecto desarrollo
proceso y programación ambiente. Incluso esos factores no fueron suficientes para hacerme
efectivo, dada la separación del modelador de la implementación.

Si las personas que escriben el código no se sienten responsables del modelo, o no
entienden cómo para hacer los modelo trabajo por un solicitud, luego los modelo posee
nada que ver con el software. Si los desarrolladores no se dan cuenta de que cambiar
el código cambia el modelo, luego sus refactorización voluntad debilitar los modelo
bastante que fortalecer eso.
Mientras tanto, Cuándo a modelador es apartado desde los implementación proceso,
él o Ella nunca adquiere, o rápidamente pierde, a sentir por los restricciones de
implementación. los Restricción básica del DISEÑO IMPULSADO POR MODELOS: que el
modelo admita una implementación eficaz . y resúmenes llave dominio
conocimiento—es medio ido, y los modelos resultantes voluntad ser poco práctico.
Finalmente, los conocimiento y habilidades de experimentado los diseñadores no
serán transferidos a otros desarrolladores si la división del trabajo impide el tipo de
colaboración que transmite los sutilezas de codificación a IMPULSADO POR MODELO
DISEÑO .

La necesidad de MODELADORES PRÁC TICOS no significa que los miembros del equipo no puedan
tener

papeles Cada Ágil proceso, incluso Extremo Programación, define papeles por equipo miembros,
y otra informal especializaciones tender para surgir naturalmente. los problema surge desde
separando dos tareas que están acoplado en a IMPULSADO POR MODELO DISEÑO , modelado y
implementación.

La efectividad de un diseño general es muy sensible a la calidad y consistencia de los granos
finos. diseño y implementación decisiones Con a IMPULSADO POR MODELO DISEÑO , a parte de los
código es un expresión de los modelo; cambiando que código cambios los modelo.
programadores están modelistas, les guste a alguien o no. Entonces es mejor configurar el
proyecto para que los programadores hagan el bien modelado trabajo.

Por lo tanto:

Cualquier persona técnica que contribuya al modelo debe dedicar algún ti empo a
tocar el código, independientemente del papel principal que desempeñe en el
proyecto. Cualquier persona responsable de cambiar código deber aprender para
Rápido a modelo a través de los código. Cada desarrollador debe ser involucrado en
algunos nivel de discusión sobre los modelo y tener contacto con expertos en
dominios. Aquellos que contribuyen de diferentes maneras deben involucrar
conscientemente a aquellos que tocan el código en un intercambio dinámico de
ideas modelo a través del LENGUAJE U BICUO .


La separación tajante de modelado y programación no funciona, pero los proyectos grandes
aún necesitan líderes técnicos que coordinen el diseño y el modelado de alto nivel y ayuden a
resolver los problemas más difíciles. o más crítico decisiones Parte IV , "Estratégico Diseño,"
ofertas con tal decisiones y debe estimular ideas para formas más productivas de definir las
funciones y responsabilidades de los técnicos de alto nivel gente.

El diseño basado en dominio pone un modelo a trabajar para resolver problemas para una
aplicación. A través del procesamiento de conocimientos, un equipo destila un torrente de
información caótica en un modelo práctico. UN DISEÑO IMPULSADO POR MODELO conecta
íntimamente el modelo y la implementación. El LENGUAJE UBIC UO es los canal por todos que
información para flujo Entre desarrolladores, dominio expertos, y el software.

los resultado es software que proporciona Rico funcionalidad establecido en a fundamental
comprensión de el núcleo dominio.

Como mencionado, éxito con IMPULSADO POR MODELO DISEÑO es sensible para detallado diseño
decisiones, cual es el tema de los próximo varios capítulos

[ Equipo LiB ]

[ Equipo LiB ]


Parte II: Los componentes básicos de
un diseño basado en modelos
Para mantenerse a software implementación crujiente y en paso a paso con a modelo,
en despecho de realidades desordenadas, usted deber aplicar los mejor prácticas de
modelado y diseño. Esta libro es no una introducción para orientado a objetos diseño,
ni lo hace eso proponer radical diseño fundamentos Impulsado por el dominio diseño
turnos los énfasis de cierto convencional ideas

Cierto tipos de decisiones mantenerse los modelo y implementación alineado con cada otro,
cada uno reforzando la eficacia del otro. Esta alineación requiere atención a los detalles
de los individuos elementos. Cuidadoso elaboración en esta pequeña escala da
desarrolladores a firme plataforma de cual para aplicar los modelado enfoques de Partes
tercero y IV .

los diseño estilo en esta libro en gran parte sigue los principio de "impulsado por la
responsabilidad diseño," presentado en Wirfs-Brock et al. 1990 y actualizado en Wirfs-
Brock 2003 . También se basa en gran medida (especialmente en la Parte III ) en las
ideas de "diseño por contrato" descritas en Meyer 1988 . es consistente con los general
antecedentes de otro ampliamente sostuvo mejor prácticas de diseño orientado a objetos,
cual están descrito en tal libros como larman 1998 _

Cuando un proyecto enfrenta obstáculos, grandes o pequeños, los desarrolladores pueden
encontrarse en situaciones que esos principios parecer inaplicable. Para hacer los impulsado
por el dominio diseño proceso resistente, los desarrolladores deben comprender cómo los
fundamentos bien conocidos respaldan el DISEÑO IMPULSADO POR MODELOS , entonces ellos
lata compromiso sin descarrilando

El material de los siguientes tres capítulos está organizado como un "lenguaje de
patrones" (ver Apéndice una ), cual voluntad show cómo sutil modelo distinciones y
diseño decisiones afectar el dominio impulsado diseño proceso.

los diagrama en los cima de los próximo página es a navegación mapa _ Eso espectáculos
los patrones que sera presentado en esta sección y a pocos de los formas ellos relacionar
para cada otro.

Intercambio estas estándar patrones trae pedido para los diseño y hace eso más fácil
por miembros del equipo para comprender el trabajo de los demás. El uso de
patrones estándar también se suma al LENGUAJE UBIC UO , que todos los miembros del
equipo pueden usar para analizar las decisiones de modelo y diseño.

Desarrollando a bien dominio modelo es un Arte. Pero los práctico diseño y implementación
de una modelo individual elementos lata ser relativamente sistemático. aislar los dominio
diseño desde el masa de otro preocupaciones en los software sistema voluntad muy aclarar
los diseño conexión con el modelo. Definir los elementos del modelo de acuerdo con
ciertas distinciones agudiza sus significados. Siguiente probado patrones por individual
elementos ayuda Produce a modelo que es práctico para implementar.


Un mapa de navegación del lenguaje de MODEL-DRIVEN DESIGN

Elaborar modelos lata Corte a través de complejidad solamente si cuidado es tomado
con los fundamentales, resultando en detallado elementos que los equipo lata con
confianza combinar.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo cuatro. Aislamiento del dominio
los parte de los software que específicamente resuelve problemas desde los dominio
generalmente que constituye sólo una pequeña porción de todo el sistema de software, aunque
su importancia es desproporcionada con respecto a su tamaño. Para aplicar nuestro mejor
pensando, nosotros necesitar para ser poder para Mira en los elementos de nuestro modelo y
verlos como a sistema. Nosotros deber no ser forzado para elegir ellos fuera de a mucho más
grande mezcla de objetos, como tratar de identificar constelaciones en el cielo nocturno.
Necesitamos desacoplar los objetos de dominio de otros funciones de los sistema, entonces
nosotros lata evitar confuso los dominio conceptos con otro conceptos relacionados únicamente
con la tecnología del software o perder de vista el dominio por completo en la masa del
sistema.

Sofisticado tecnicas por esta aislamiento tener surgió. Esta es bien pisado terrestre, pero eso es
tan crítico para los exitoso solicitud de modelado de dominio principios que eso deber ser
revisados brevemente, de a impulsado por el dominio punto de vista. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Arquitectura en capas

Para a Envío solicitud para apoyo los sencillo usuario Actuar de seleccionando a de carga destino
desde una lista de ciudades, allí deber ser programa código que (1) sorteos a artilugio en los
pantalla, (2) consultas la base de datos por todos los posible ciudades, (3) interpreta los del
usuario aporte y valida eso, (4) asocia el seleccionado ciudad con los carga, y (5) comete los
cambiar para los base de datos. Todos de esta código es parte de los mismo programa, pero
solamente a poco de eso es relacionados para los negocio de Envío.

Los programas de software involucran diseño y código para llevar a cabo muchos tipos
diferentes de tareas. Aceptan usuario aporte, llevar fuera negocio lógica, acceso bases de datos,
comunicar sobre redes, Mostrar información para usuarios, y entonces en. Entonces los código
involucrado en cada programa función lata ser sustancial.

En un orientado a objetos programa, interfaz de usuario, base de datos, y otro apoyo
código con frecuencia obtiene escrito directamente en los objetos de negocio. La
lógica empresarial adicional está integrada en el comportamiento de los widgets de
la interfaz de usuario y los scripts de la base de datos. Esto sucede porque es la
forma más fácil. para hacer cosas trabajo, en los pequeño correr.

Cuándo los relacionado con el dominio código es difundido a través de tal a grande
Monto de otro código, se vuelve extremadamente difícil de ver y de razonar. Los
cambios superficiales en la interfaz de usuario pueden cambiar la lógica empresarial.
Cambiar una regla comercial puede requerir un seguimiento meticuloso de interfaz de
usuario código, base de datos código, o otro programa elementos. Implementar
coherente, basado en modelos objetos se convierte poco práctico. automatizado
pruebas es incómodo. Con todos las tecnologías y lógica involucrado en cada actividad,
a programa deber ser conservó muy sencillo o eso se convierte imposible para
comprender.

Creando programas que lata encargarse de muy complejo Tareas llamadas por separación de

preocupaciones, permitiendo la concentración en diferente partes de los diseño en aislamiento.
En los mismo hora, los intrincado

las interacciones dentro del sistema deben mantenerse a pesar de la separación.

Hay todo tipo de formas en que se puede dividir un sistema de software, pero a través de la
experiencia y la convención, la industria ha convergido en ARQUITEC TURAS EN C APAS , y
específicamente en unas pocas capas bastante estándar. La metáfora de las capas se us a
tanto que resulta intuitiva para la mayoría de los desarrolladores. Muchas buenas discusiones
sobre capas están disponibles en la literatura, a veces en el formato de a patrón (como en
Buschmann et Alabama. 1996 , páginas. 31–51). los esencial principio es que cualquier
elemento de a capa depende solamente en otro elementos en los mismo capa o en elementos de
los capas "debajo" de ella. La comunicación hacia arriba debe pasar a través de algún
mecanismo indirecto, que discutiré a poco luego.

El valor de las capas es que cada una se especializa en un aspecto particular de un programa
de computadora. Esta especialización permite diseños más cohesivos de cada aspecto y hace
que estos diseños sean mucho más fáciles para interpretar. De curso, eso es vital para escoger
capas que aislar los más importante diseño cohesivo aspectos. Otra vez, experiencia y
convención tener LED para algunos convergencia. Aunque hay muchas variaciones, la mayoría
de las arquitecturas exitosas usan alguna versión de estas cuatro capas conceptuales:


Usuario Interfaz
(o Capa de
presentación)

Responsable por demostración información para los usuario y
interpretando los comandos del usuario. El actor externo a veces puede
ser otro sistema informático bastante que a humano usuario.
Solicitud Define la capa los trabajos los software es supuesto para hacer y dirige los
expresivo dominio objetos para trabajo fuera problemas. los Tareas esta
capa es responsable son significativos para el negocio o necesarios para
la interacción con la aplicación capas de otro sistemas






Dominio Capa (o
Modelo Capa)



Capa de
infraestructura
Esta capa es conservó Delgado. Eso lo hace no Contiene negocio normas o
conocimiento, pero solo coordina tareas y delega el trabajo a
colaboraciones de objetos de dominio en la siguiente capa hacia abajo.
No tiene estado que refleje el negocio. situación, pero eso lata tener
estado que refleja los Progreso de a tarea para los usuario o los programa.
Responsable por representando conceptos de los negocio, información
acerca de negocio situación, y negocio normas. Estado que refleja los
situación empresarial es revisado y usado aquí, incluso aunque los
técnico detalles de almacenarlo se delegan a la infraestructura. Esta
capa es el corazón del negocio. software.
Proporciona capacidades técnicas genéricas que soportan las capas
superiores: mensaje enviando por los solicitud, persistencia por los
dominio, widgets de dibujo por los interfaz de usuario, y entonces en.
los infraestructura capa mayo además apoyar el patrón de
interacciones entre las cuatro capas a través de una arquitectura
estructura.

Algunos proyectos no hacer a afilado distinción Entre los usuario interfaz y solicitud capas. Otros
tener múltiple infraestructura capas. Pero eso es los crucial separación de los dominio capa que
permite IMPULSAR POR MODELO DISEÑO .

Por lo tanto:

Particionar un programa complejo en capas. Desarrolle un diseño dentro de cada
capa que sea cohesivo y que dependa únicamente de las capas inferiores. Seguir
patrones arquitectónicos estándar para proveer suelto acoplamiento para los capas
encima. Concentrado todos los código relacionado con los dominio modelo en una capa
y aislar eso desde los usuario interfaz, solicitud, y código de infraestructura. Los
objetos de dominio, libres de la responsabilidad de exhibirse, almacenar ellos
mismos, gerente solicitud Tareas, y entonces adelante, lata ser

centrado en expresar el modelo de dominio. Esto permite que un modelo
evolucione para ser lo suficientemente rico y claro suficiente para capturar esencial
negocio conocimiento y poner eso para trabajo.

La separación de la capa de dominio de las capas de infraestructura y de interfaz de usuario
permite un diseño mucho más limpio de cada capa. Las capas aisladas son mucho menos
costosas de mantener, porque tienden a evolucionar a ritmos diferentes y responden a
necesidades diferentes. La separación también ayuda con el despliegue. en a repartido sistema,
por permitiendo diferente capas para ser metido flexiblemente en diferentes servidores o
clientela, en pedido para minimizar comunicación gastos generales y mejorar rendimiento (Fowler
1996).


Ejemplo
Partición de la funcionalidad de banca en línea en Capas

Un solicitud proporciona varios capacidades por manteniendo Banco cuentas Una rasgo es
transferencia de fondos, en cual los usuario entra o elige dos cuenta números y un Monto de
dinero y luego inicia a transferir.

Para hacer esta ejemplo manejable, He omitido importante técnico caracteristicas, más
notablemente seguridad. El diseño del dominio también está demasiado simplificado. (La
complejidad realista solo aumentaría la necesidad de capas arquitectura.) Es más, los especial
infraestructura implícito aquí es quiso decir para ser simple y obvio para que el ejemplo quede
claro: no es un diseño sugerido. Las responsabilidades de los restantes funcionalidad haría ser
en capas como mostrado en Figura 4.1 .


Figura 4.1. Los objetos llevan a cabo responsabilidades consistentes
con su capa y están más acoplados a otros objetos en su
capa.

Nota que los dominio capa, no los solicitud capa , es responsable por fundamental reglas de
negocio—en esta caso, los regla es "Cada crédito posee a pareo débito."

los solicitud además hace no suposiciones sobre los fuente de los transferir solicitud. los programa

presumiblemente incluye a interfaz de usuario con entrada campos por cuenta números y montos
y con botones para comandos. Pero que usuario interfaz pudo ser sustituido por a cable solicitud
en XML sin afectando el solicitud capa o ninguna de los más bajo capas. Esta desacoplamiento es
importante no porque proyectos con frecuencia necesitar para reemplazar usuario interfaces con
cable peticiones pero porque a limpio separación de preocupaciones mantiene los diseño de cada
capa fácil para comprender y mantener.

De hecho, la propia figura 4.1 ilustra levemente el problema de no aislar el dominio. porque
todo desde los solicitud para transacción control tenido para ser incluido, los dominio capa tenido
para ser tonto abajo para mantenerse los en general Interacción sencillo suficiente para seguir.
Si nosotros fueron enfocado en el diseño de la capa de dominio aislado, tendríamos espacio en
la página y en nuestras cabezas para un modelo que representara mejor las reglas del
dominio, tal vez incluyendo libros mayores, objetos de crédito y débito, o monetario
transacción objetos.


relacionando el Capas

Hasta ahora la discusión se ha centrado en la separación de capas y la forma en que esa
partición mejora los diseño de cada aspecto de los programa, particularmente los dominio capa.
pero de curso, los capas tener para ser conectado. Para hacer esta sin perdiendo los beneficio de
los la separación es los motivación detrás a número de patrones.

Capas están quiso decir para ser flojamente acoplado, con diseño dependencias en solamente
una dirección. Las capas superiores pueden usar o manipular elementos de las inferiores
directamente llamando a sus interfaces públicas, tenencia referencias para ellos (en menos
temporalmente), y generalmente utilizando medios convencionales de Interacción. Pero Cuándo
un objeto de a más bajo nivel necesidades para comunicar hacia arriba (más allá de responder
a una consulta directa), necesitamos otro mecanismo, apoyándonos en patrones
arquitectónicos para relacionarnos capas tal como devoluciones de llamada o OBSERVADOR ES (
Gama et Alabama. 1995 ).

los abuelo de patrones por conectando los interfaz de usuario para los solicitud y dominio capas
es MODELO-VISTA-C ONTROLADOR (MVC). Fue pionero en el mundo de Smalltalk en la década de
1970 y ha inspirado muchas de las arquitecturas de interfaz de usuario que siguieron. Fowler
(2002) analiza este patrón y varios útil variaciones en los tema. larman (1998) explora estas
preocupaciones en los PATRÓN DE SEPARAC IÓN VISTA -MODELO , y su C OORDINADOR DE APLIC ACIÓN es
un enfoque para conectar la aplicación capa.

Ahí están otro estilos de conectando los interfaz de usuario y los solicitud. Para nuestro
propósitos, todos los enfoques son multa como largo como ellos mantener los aislamiento de
los dominio capa, permitiendo dominio objetos para ser diseñado sin simultaneamente
pensando sobre los usuario interfaz que puede que interactuar con ellos.

La capa de infraestructura por lo general no inicia la acción en la capa de dominio. Al estar "por
debajo" de la capa de dominio, no debe tener un conocimiento específico del dominio al que
sirve. De hecho, tales técnicas capacidades están más con frecuencia Ofrecido como SERVIC IOS .
Para ejemplo, si un solicitud necesidades mandar un Email, algunos envío de mensajes interfaz
lata ser situado en los infraestructura capa y los elementos de la capa de aplicación pueden
solicitar la transmisión del mensaje. Este desacoplamiento da algunos extra versatilidad. los
envío de mensajes interfaz puede que ser conectado para un Email remitente, un fax remitente, o
lo que demás es disponible. Pero los principal beneficio es simplificando los solicitud capa,
manteniendo eso estrechamente enfocado en su trabajo: conocimiento Cuándo para enviar a
mensaje, pero no agobiado con como _

los solicitud y dominio capas llamada en los SERVIC IOS proporcionó por los infraestructura capa.
Cuando el alcance de a SERVIC IO posee estado bien elegido y su interfaz bien diseñado, los
llamador lata permanecer suelto acoplado y sin complicaciones por los elaborar conducta los
SERVIC IO interfaz encapsula

Pero no toda la infraestructura viene en forma de SERVIC IOS a los que se puede llamar desde las

capas superiores. algunos tecnicos componentes están diseñado para directamente apoyo los
básico funciones de otro capas (tal como proporcionando un resumen base clase por todos
dominio objetos) y proveer los mecanismos por ellos para

relacionar (tal como implementaciones de MVC y los me gusta). Tal un "arquitectónico
estructura" tiene mucho más impacto en los diseño de los otro partes de los programa.


Arquitectónico Marcos

Cuando la infraestructura se proporciona en forma de SERVIC IOS solicitados a través de
interfaces, es bastante intuitivo cómo los capas obras y cómo para mantenerse los capas
flojamente acoplado. Pero algunos los problemas técnicos exigen formas de infraestructura
más intrusivas. Frameworks que integran muchas infraestructuras necesidades con frecuencia
exigir los otro capas para ser implementado en muy especial formas, por ejemplo como a
subclase de a estructura clase o con estructurado método firmas (Eso mayo parecer
contradictorio por a subclase para ser en a capa más alto que que de los padre clase, pero
mantenerse en mente cual clase refleja más conocimiento de los otro.) los mejor arquitectónico
marcos resolver complejo técnico problemas tiempo permitiendo los dominio desarrollador para
concentrado en expresando un modelo. Pero marcos lata fácilmente obtener en los manera,
cualquiera por haciendo también muchos suposiciones que restringen las opciones de diseño
del dominio o haciendo que la implementación sea tan pesada que el desarrollo ralentiza
abajo.

Por lo general, se necesita alguna forma de marco arquitectónico (aunque a veces los equipos
eligen marcos que no atender ellos bien). Cuándo aplicar a estructura, los equipo necesidades
para enfocar en sus meta: edificio un implementación que expresa a dominio modelo y usos eso
para resolver problemas importantes los equipo deber buscar formas de empleando los estructura
para esos termina, incluso si eso significa no utilizando todos de los del marco caracteristicas.
Para ejemplo, temprano J2EE aplicaciones con frecuencia implementado todo dominio objetos
como "entidad frijoles." Esta Acercarse atascado abajo ambas cosas rendimiento y los ritmo de
desarrollo. En cambio, la mejor práctica actual es usar el marco J2EE para objetos de grano
más grande, implementando la mayoría de la lógica comercial con objetos genéricos de Java.
Muchas de las desventajas de los marcos lata ser evitado por aplicar ellos selectivamente para
resolver difícil problemas sin buscando a talla única solución. juiciosamente aplicar solamente los
más valioso de estructura características reduce el acoplamiento de la implementación y el
marco, lo que permite una mayor flexibilidad en el diseño posterior decisiones Más importante,
dado cómo muy Complicado muchos de los Actual marcos son a utilizar, esta minimalismo ayuda
mantenerse los negocio objetos legible y expresivo.

Arquitectónico marcos y otro herramientas voluntad Seguir para evolucionar. Más nuevo marcos
voluntad automatizar o prefabricar cada vez más los aspectos técnicos de una aplicación. Si
esto se hace correctamente, los desarrolladores de aplicaciones concentrarán cada vez más su
tiempo en modelar los problemas centrales del negocio, muy mejorando productividad y
calidad. Pero como nosotros moverse en esta dirección, nosotros debe proteger en contra
nuestro entusiasmo por técnico soluciones; elaborar marcos lata además aplicación de camisa de
fuerza desarrolladores

[ Equipo LiB ]

[ Equipo LiB ]


La capa de dominio es donde vive el modelo
EN CAPAS ARQUITEC TURA es usado en más sistemas hoy dia, bajo varios capas esquemas Muchos
estilos de desarrollo lata además beneficio desde estratificación Sin embargo, impulsado por el
dominio diseño requiere solamente uno en particular capa para existe.

los dominio modelo es a colocar de conceptos. los "dominio capa" es los manifestación de que
modelo y todo directamente relacionados diseño elementos. los diseño y implementación de
negocio lógica constituir la capa de dominio. En un DISEÑO IMPULSADO POR MODELO , las
construcciones de software de la capa de dominio reflejan el modelo conceptos.

No es práctico lograr esa correspondencia cuando la lógica del dominio se mezcla con otras
preocupaciones. de los programa. aislar los dominio implementación es a requisito previo por
diseño dirigido por el dominio.


[ Equipo LiB ]

[ Equipo LiB ]


La interfaz de usuario inteligente "Anti-patrón"
. . . Que sumas arriba los ampliamente aceptado EN C APAS ARQUITEC TURA patrón por objeto
aplicaciones Pero esto separación de interfaz de usuario, solicitud, y dominio es entonces con
frecuencia intentó y entonces raramente logrado eso su negación merece a discusión en su
propio Correcto.

Muchos proyectos de software toman y deberían continuar tomando un enfoque de diseño
mucho menos sofisticado. que I llamada los INTELIGENTE interfaz de usuario Pero INTELIGENTE
interfaz de usuario es un alterno, mutuamente exclusivo tenedor en los camino, incompatible con
los Acercarse de impulsado por el dominio diseño. Si que camino es tomado, más de qué es en
este libro no es aplicable. Mi interés está en las situaciones en las que no se aplica la interfaz
de usuario SMART , que es por qué I llamada eso, con lengua en mejilla, un "antipatrón". Que se
discute eso aquí proporciona a contraste útil y voluntad ayuda aclarar los circunstancias que
justificar los más difícil sendero tomado en los El resto de libro.


A proyecto necesidades para entregar sencillo funcionalidad, dominado por datos entrada y
mostrar, con pocos negocios normas. Personal es no compuesto de avanzado objeto
modeladores.

Si un no sofisticado equipo con a sencillo proyecto decide para tratar a DISEÑO
IMPULSADO POR MODELOS con ARQUITECTURA EN CAPAS , se enfrentará a una curva de
aprendizaje difícil. Los miembros del equipo tendrán para Maestro complejo nuevo
tecnologías y tropezón a través de los proceso de objeto de aprendizaje modelado
(cual es desafiante, incluso con los ayuda de esta ¡libro!). los La sobrecarga de la
gestión de la infraestructura y las capas hace que las tareas muy sencillas tomen
más tiempo. Los proyectos simples vienen con líneas de tiempo cortas y expectativas
modestas. Mucho antes de que el equipo complete la tarea asignada, mucho menos
demuestra las emocionantes posibilidades de su enfoque, los proyecto voluntad tener
estado cancelado.

Incluso si los equipo es dado más hora, los equipo miembros están probable para
fallar para Maestro las tecnicas sin experto ayuda. Y en los final, si ellos hacer
superar a estas retos, ellos voluntad tener producido a sencillo sistema. Rico
capacidades fueron Nunca solicitado.

A más experimentado equipo haría no rostro los mismo compensaciones Sazonado
desarrolladores pudo aplanar el aprendiendo curva y comprimir los hora necesario para
administrar los capas. Impulsado por el dominio el diseño es mejor para proyectos ambiciosos
y requiere habilidades sólidas. No todos los proyectos son ambiciosos. No todos proyecto
equipos lata reunión esos habilidades.

Por lo tanto, cuando las circunstancias lo justifiquen:

Ponga toda la lógica empresarial en la interfaz de usuario. Cortar la aplicación en
pequeñas funciones y implementar ellos como separar usuario interfaces,
incrustación los reglas del negocio dentro ellos. Utilizar a relacional base de datos
como a compartido repositorio de los datos. Utilizar lo más automatizado interfaz de
usuario edificio y visual programación herramientas disponible.

¡Herejía! los evangelio (como defendido En todas partes, incluso en otra parte en esta libro) es
que dominio y interfaz de usuario deberían ser separar. En hecho, eso es difícil para aplicar
ninguna de los métodos discutido luego en este libro sin esa separación, por lo que esta SMART
UI puede considerarse un "antipatrón" en el contexto del diseño basado en dominio s. Sin
embargo, es un patrón legítimo en algunos otros contextos. En verdad, la interfaz de usuario

SMART tiene ventajas y hay situaciones en las que funciona mejor, lo que en parte cuentas por por
qué eso es entonces común. Considerando eso aquí ayuda nosotros comprender por qué
nosotros Necesitar separar solicitud desde dominio y, en tono rimbombante, Cuándo nosotros
puede que no querer para.

Ventajas

La productividad es alta e inmediata para aplicaciones simples.

Los desarrolladores menos capaces pueden trabajar de esta manera con poca
capacitación.

Incluso deficiencias en requisitos análisis lata ser superar por liberando a prototipo para
usuarios y luego rápidamente cambiando los producto para encajar sus peticiones.

Aplicaciones están desacoplado desde cada otro, entonces que entrega horarios de pequeña
módulos puede ser planificado relativamente precisamente. En expansión los sistema con
adicional, sencillo conducta puede ser fácil.

Las bases de datos relacionales funcionan bien y brindan integración a nivel de datos.

Las herramientas 4GL funcionan bien.

Cuando se entreguen las aplicaciones, los programadores de mantenimiento podrán
rehacer rápidamente las porciones ellos hipocresía figura fuera, porque los efectos de los
cambios deberían ser localizado para cada particular interfaz de usuario


Desventajas

La integración de aplicaciones es difícil excepto a través de la base de datos.

Ahí es no reutilizar de conducta y no abstracción de los negocio problema. Negocio las
reglas tienen para ser duplicado en cada operación para cual ellos aplicar.

Rápido creación de prototipos y iteración alcanzar a natural límite porque los carecer de
abstracción limita la refactorización opciones

Complejidad entierra usted rápidamente, entonces los crecimiento sendero es
estrictamente hacia adicional aplicaciones simples. Ahí es no agraciado sendero
para mas rico conducta.

Si esta patrón es aplicado conscientemente, a equipo lata evitar tomando en a estupendo trato de
gastos generales Requerido por otro enfoques. Eso es a común error para emprender a
sofisticado diseño Acercarse que el equipo no es comprometido para que lleva todos los manera a
través de. Otro común, costoso error es para construir una infraestructura compleja y usar
herramientas de potencia industrial para un proyecto que no las necesita.

Más flexible idiomas (tal como Java) están exagerar por estas aplicaciones y voluntad costo
caro. Un estilo 4GL herramienta es los manera para ir.

Recuerde, una de las consecuencias de este patrón es que no puede migrar a otro enfoque de
diseño. excepto por reemplazando completo aplicaciones Sólo utilizando a propósito general
idioma tal ya que Java realmente no lo pondrá en una posición para abandonar SMART UI más
tarde, por lo que si ha elegido ese camino, usted deberían escoger desarrollo herramientas
engranado para eso. no molestar cobertura tu apuesta. Sólo usando un flexible idioma no crear a
flexible sistema, pero eso mayo bien Produce un caro una.

De la misma manera, un equipo comprometido con un DISEÑO IMPULSADO POR MODELOS necesita
diseñar de esa manera desde el principio. comienzo. De curso, incluso experimentado proyecto
equipos con grande ambiciones tener para comienzo con funcionalidad sencilla y trabajo sus
manera arriba a través de sucesivo iteraciones Pero esos primero tentativo los pasos serán ser
IMPULSADO POR MODELO con un aislado dominio capa, o los proyecto voluntad más probable ser
pegado con a

INTELIGENTE interfaz de usuario los INTELIGENTE interfaz de usuario es discutido solamente para
aclarar por qué y Cuándo a patrón tal como ARQUITEC TURA EN C APAS es necesario en pedido para
aislar a dominio capa.


Hay otras soluciones entre la IU INTELIGENTE y la ARQUITEC TURA EN C APAS . Por ejemplo, Fowler
(2002) describe el TRANSAC TION SC RIPT , que separa la interfaz de usuario de la aplicación, pero
no proporciona por un objeto modelo. los fondo línea es esta: Si los arquitectura aísla los código
relacionado con el dominio en a manera que permite a cohesivo dominio diseño flojamente
acoplado para los descanso de los sistema, entonces eso arquitectura lata probablemente apoyo
impulsado por el dominio diseño.

Otro desarrollo estilos tener sus lugar, pero usted deber aceptar variar limites en complejidad y
flexibilidad Defecto para desacoplar los dominio diseño lata De Verdad ser desastroso en cierto
ajustes. Si tu tienes a complejo solicitud y están cometiendo para IMPULSADO POR MODELO DISEÑO
, morder los bala, obtener lo necesario expertos, y evitar los INTELIGENTE interfaz de usuario

[ Equipo LiB ]

[ Equipo LiB ]


Otros tipos de aislamiento
Desafortunadamente, allí están influencias otro que infraestructura y usuario interfaces que lata
corrompa su delicado modelo de dominio. Debe tratar con otros componentes de dominio que
no están completamente integrados dentro tu modelo. Tú tener para afrontar con otro
desarrollo equipos quién utilizar diferentes modelos de los mismo dominio. Estas y otro factores
lata difuminar tu modelo y robar eso de su utilidad. El Capítulo 14 , "Mantenimiento de la
integridad del modelo", trata este tema y presenta patrones tales como C ONTEXTO LIMITADO y
C APA ANTIC ORRUPCIÓN . Un modelo de dominio realmente complicado puede volverse difícil de
manejar por sí mismo. El Capítulo 15 , "Destilación", analiza cómo hacer distinciones dentro
del dominio capa que lata desembarazarse los esencial conceptos de los dominio desde
periférico detalle.

Pero todos que llega luego. Próximo, bien Mira en los nueces y pernos de co-evolucionando un
eficaz modelo de dominio y un expresivo implementación. Después todos, los mejor parte de
aislando los dominio es consiguiendo todo que otro cosas fuera de los manera entonces que
nosotros lata De Verdad enfocar en los dominio diseño.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo Cinco. Un modelo
expresado en software
Para compromiso en implementación sin perdiendo los puñetazo de a IMPULSADO POR MODELO
DISEÑO requiere un reencuadre de los lo esencial. Conectando modelo y implementación posee
para ser hecho en los detalle nivel. Esta capítulo se enfoca en esos individual modelo elementos,
consiguiendo ellos en forma para apoyo las actividades en luego capítulos

Esta discusión voluntad comienzo con los cuestiones de diseño y racionalizando asociaciones. Las
asociaciones entre objetos son simples de concebir y dibujar, pero implementarlas es un
atolladero potencial. Asociaciones ilustrar cómo crucial detallado implementación decisiones
están para los viabilidad de un DISEÑO IMPULSADO POR MODELOS .

Torneado para los objetos ellos mismos, pero continuo para escudriñar los relación Entre
modelo detallado elecciones y implementación preocupaciones, bien enfocar en haciendo
distinciones entre los tres patrones de modelo elementos que Rápido los modelo: ENTIDADES ,
VALOR OBJETOS , y SERVIC IOS .

Definición objetos que capturar conceptos de los dominio parece muy intuitivo en los
superficie, pero serio retos están alfombrilla de ratón en los sombras de sentido. Cierto
distinciones tener surgido que aclaran el significado de los elementos del modelo y se
vinculan con un cuerpo de prácticas de diseño para tallar tipos de objetos.

¿Un objeto representa algo con continuidad e identidad, algo que se rastrea a través de
diferentes estados o incluso a través de diferentes implementaciones? ¿O es un atributo que
describe los estado de algo ¿demás? Esta es los básico distinción Entre un ENTIDAD y a OBJETO DE
VALOR . Definir objetos que siguen claramente un patrón u otro hace que los objetos sean
menos ambiguos y establece fuera los sendero hacia específico elecciones por robusto diseño.

Luego están aquellos aspectos del dominio que se expresan más claramente como acciones u
operaciones, bastante que como objetos. Aunque eso es a leve salida desde orientado a objetos
Siguiendo la tradición de modelado, a menudo es mejor expresarlos como SERVIC IOS , en lugar
de forzar la responsabilidad de una operación a alguna ENTIDAD u OBJETO DE VALOR . UN
SERVIC IO es algo que se hace para un cliente a pedido. En las capas técnicas del software, hay
muchos SERVIC IOS . Surgen en el dominio además, Cuándo algunos actividad es modelado que
corresponde para algo los software deber hacer, pero lo hace no corresponder con estado.

Ahí están inevitable situaciones en cual los pureza de los objeto modelo deber ser comprometido,
como para el almacenamiento en una base de datos relacional. Este capítulo establecerá
algunas pautas para mantener el rumbo. Cuándo usted están forzado para trato con estas sucio
realidades

Finalmente, a discusión de MÓDULOS voluntad conducir casa los punto que cada diseño
decisión deberían estar motivado por algunos visión dentro los dominio. los ideas de elevado
cohesión y bajo acoplamiento, a menudo pensado de como técnico métrica, lata ser aplicado
para los conceptos ellos mismos. En a DISEÑO IMPULSADO POR MODELOS , MÓDULOS están parte
de los modelo, y ellos deberían reflejar conceptos en los dominio.

Este capítulo reúne todos estos componentes básicos, que encarnan el modelo en el software.
Estas ideas son convencionales, y los sesgos de modelado y diseño que se derivan de ellas han
sido escrito sobre antes de. Pero enmarcado ellos en esta contexto voluntad ayuda
desarrolladores crear componentes detallados que voluntad atender los prioridades de impulsado
por el dominio diseño Cuándo abordar los más grande modelo y diseño cuestiones. También, a
sentido de los básico principios voluntad ayuda desarrolladores Quédate en curso a través de
inevitable compromisos

[ Equipo LiB ]

[ Equipo LiB ]


Asociaciones
los Interacción Entre modelado y implementación es particularmente difícil con los asociaciones
entre objetos.

Para cada transitable asociación en los modelo, allí es a mecanismo en los software con lo
mismo propiedades

A modelo que espectáculos un asociación Entre a cliente y a Ventas representante corresponde
para dos cosas. En una mano, eso resúmenes a relación desarrolladores considerado pertinente
Entre dos gente real. En los otro mano, eso corresponde para un objeto puntero Entre dos Java
objetos, o una encapsulación de a base de datos buscar, o algunos comparable implementación.

Por ejemplo, una asociación de uno a muchos podría implementarse como una colección en
una variable de instancia. Pero el diseño no es necesariamente tan directo. Puede que no
haya colección; un método de acceso mayo consulta a base de datos para encontrar los
apropiado registros y instanciar objetos establecido en ellos. Ambas cosas de estas diseños
haría reflejar los mismo modelo. los diseño posee para especificar a recorrido particular
mecanismo cuyo conducta es consistente con los asociación en los modelo.

En la vida real, hay muchas asociaciones de muchos a muchos, y un gran número son
naturalmente bidireccionales. los mismo tiende para ser cierto de temprano formularios de a
modelo como nosotros idea genial y explorar el dominio. Pero estas general asociaciones
complicar implementación y mantenimiento.
Es más, ellos comunicar muy poco sobre los naturaleza de los relación. Ahí
están en menos Tres formas de haciendo asociaciones más manejable.

1. Imponente a el recorrido dirección

2. agregando a Calificatorio, efectivamente reduciendo multiplicidad

3. Eliminando lo no esencial asociaciones

Eso es importante para constreñir relaciones como mucho como posible. A bidireccional
asociación significa que ambas cosas objetos lata ser entendido solamente juntos. Cuándo
solicitud requisitos hacer no llamada para atravesar en ambas cosas direcciones, agregando a el
recorrido dirección reduce interdependencia y simplifica el diseño. Comprensión los dominio
mayo revelar a natural direccional parcialidad.

los Unido estados posee tenido muchos presidentes, como tener muchos otro los paises. Esta es a
bidireccional, uno a muchos relación. Aún nosotros raramente haría comienzo fuera con los
nombre "Jorge Washington" y preguntar: "¿De qué país fue presidente?" Pragmáticamente,
podemos reducir la relación a una unidireccional. asociación, transitable desde país para
presidente. Esta refinamiento Realmente refleja la perspicacia dentro los dominio, como bien
como haciendo a más práctico diseño. Eso capturas los entendiendo que una dirección de la
asociación es mucho más significativa e importante que la otra. Mantiene los "Persona" clase
independiente de los lejos menos fundamental concepto de "Presidente."


Figura 5.1. Algunas direcciones transversales reflejan un sesgo
natural en el dominio.

Muy a menudo, una comprensión más profunda conduce a una relación "cualificada". Mirando
más profundamente a los presidentes, nosotros darse cuenta de que (excepto en a civil guerra,
quizás) a país posee solamente una presidente en un momento. Esta Calificatorio reduce los
multiplicidad para doce y cincuenta y nueve de la noche, y explícitamente incrusta un
importante gobernar en los modelo. Quién era presidente de los Unido estados en 1790? Jorge
Washington.


Figura 5.2. Las asociaciones restringidas comunican más
conocimiento y son diseños más prácticos.

Restricción los el recorrido dirección de a muchos a muchos asociación efectivamente
reduce su implementación para uno a muchos—a mucho más fácil diseño.

Consecuentemente restringiendo asociaciones en formas que reflejar los parcialidad de los
dominio no solamente hace esos asociaciones más comunicativo y más simple para implementar,
eso además da significado para las restantes asociaciones bidireccionales. Cuando la
bidireccionalidad de una relación es una característica semántica de los dominio, Cuándo es
necesario por solicitud funcionalidad, los retencion de ambos transversales direcciones transmite
que.

De curso, los último simplificación es para eliminar un asociación en total, si eso es no esencial
para los trabajo en mano o los fundamental sentido de los modelo objetos.


Ejemplo
Asociaciones en una Casa de Bolsa Cuenta

Figura 5.3.




Una implementación de Java de la cuenta de corretaje en este modelo sería

Cuenta de corretaje de clase
pública { String número de
cuenta; cliente cliente;
Establecer inversiones;
// Constructores, etc omitido
Cliente público
obtenerCliente() { cliente
devuelto;
}
conjunto público
getInvestments() {
inversiones de retorno;
}
}

Pero si nosotros necesitar para ha podido recuperar los datos desde a relacional base de
datos, otro implementación, igualmente consistente con los modelo, haría ser los siguiente:


Tabla: BROKERAGE_ACCOUNT
CUENTA_NUMBER CLIENTE_SS_NUMBER

Tabla: CLIENTE
SS_NUMBER NOMBRE





Mesa: INVERSIÓN
NÚMERO DE CUENTA STOCK_SÍMBOLO CANTIDAD




Cuenta de corretaje de clase
pública { Cuerda número de
cuenta;
String númeroSeguridadSocialcliente;
// Omitir constructores, etc.
public Customer getCustomer() {
Cadena sqlQuery =
"SELECCIONE * DEL CLIENTE DONDE" +
"SS_NUMBER='"+númerodeSeguridadSocialcliente+"'";
devuelve QueryService.findSingleCustomerFor(sqlQuery);
}
conjunto público
getInvestments() { Cadena
sqlQuery =
"SELECCIONE * DE INVERSI ÓN DONDE" +
"CUENTA_CORTAJE='"+N úmeroCuenta+"'";
devuelve QueryService.findInvestmentsFor(sqlQuery);
}
}

( Nota: los servicio de consultas, a utilidad por atractivo filas desde los base de datos y
creando objetos, es simple por explicando ejemplos, pero es no necesariamente a bien diseño
por a verdadero proyecto.)

Refinemos el modelo calificando la asociación entre la cuenta de corretaje y
inversión , reduciendo su multiplicidad. Esta dice allí lata ser solamente una inversión por
valores.



Figura 5.4.

Esta no lo haría ser cierto de todos negocio situaciones (por ejemplo, si los un montón
necesitar para ser rastreado), pero cualesquiera que sean las reglas particulares, a medida
que se descubran restricciones en las asociaciones, deberían incluirse en el modelo y la
implementación. Hacen que el mod elo sea más preciso y la implementación más fácil para
mantener.

La implementación de Java podría convertirse en:

Cuenta de corretaje de clase
pública { String número de
cuenta; cliente cliente;
Mapa de inversiones;
// Omitir constructores, etc.
public Customer getCustomer() {
cliente devuelto;
}
público Inversión getInvestment(String símbolo de
valores) { volver (Inversión) inversiones.get
(stockSymbol);
}
}

Y una implementación basada en SQL sería:

Cuenta de corretaje de clase
pública { Cuerda número de
cuenta;
String númeroSeguridadSocialcliente;
//Omitir constructores, etc.
public Customer getCustomer() {
String sqlQuery = "SELECCIONAR * DEL CLIENTE DONDE SS_NUMBER='"
+ numerodesegurosocialdelcliente + "'";
devuelve QueryService.findSingleCustomerFor(sqlQuery);
}
inversión pública getInvestment(String stockSymbol) {

String sqlQuery = "SELECCIONAR * DE INVERSI ÓN"
+ "WHERE BROKERAGE_ACCOUNT='" + n úmero de cuenta + "'"
+ "AND STOCK_SYMBOL='" + stockSymbol +"'";
devuelve QueryService.findInvestmentFor(sqlQuery);
}
}

Con cuidado destilando y restringiendo los del modelo asociaciones voluntad llevar usted a
largo manera hacia un MODELO IMPULSADO DISEÑO . Ahora vamos girar para los objetos ellos
mismos. Cierto distinciones aclarar el modelo tiempo haciendo por a más práctico
implementación. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Entidades (también conocidas como Objetos de
referencia)

Muchos objetos están no fundamentalmente definido por sus atributos, pero bastante por a hilo
de continuidad y identidad.


A dueña demandado me, reclamando importante daños y perjuicios para su propiedad. los
documentos I era servido describió un apartamento con agujeros en las paredes, manchas en la
alfombra y un líquido nocivo en el fregadero que le dio apagado cáustico vapores que tenido
hecha los cocina fondo de pantalla cáscara. los Corte documentos llamado mí como el
arrendatario responsable de los daños, identificándome por mi nombre y por mi dirección
actual. Esta era confuso para me, porque I tenido Nunca incluso visitó que arruinado lugar.

Después a momento, I dio cuenta que eso deber ser a caso de equivocado identidad. I llamado los
demandante y Dile a ella esta, pero ella no lo hizo creer me. los anterior inquilino tenido estado
eludiendo su por meses. Cómo ¿podría probar que yo no era la misma persona que le había
costado tanto dinero? Yo era el único Eric Evans en los teléfono libro.

Bueno, la guía telefónica resultó ser mi salvación. Porque había estado viviendo en el mismo
apartamento. por dos años, I pedido su si ella todavía tenido los anterior años libro. Después ella
fundar eso y verificado que mi listado era los mismo (Correcto próximo para mi homónimo
listado), ella dio cuenta que yo era no los persona ella querido para demandar, se disculpó, y
prometido para soltar los caso.

Ordenadores están no que ingenioso. A caso de equivocado identidad en a software sistema Guías
para corrupción de datos y programa errores

Hay desafíos técnicos especiales aquí, que discutiré en un momento, pero primero veamos el
problema fundamental: muchas cosas se definen por su identidad, y no por algún atributo. En
nuestra concepción típica, una persona (para continuar con el ejemplo no técnico) tiene una
identidad que se extiende desde nacimiento para muerte y incluso más allá de. Que de la
persona físico atributos transformar y ultimamente desaparecer. los nombre mayo cambiar.
Financiero relaciones venir y ir. Ahí es no un solo atributo de a persona que no poder cambiar; aún
los identidad persiste Soy I los mismo persona yo era en años ¿cinco? Esta tipo de metafísico
pregunta es importante en los búsqueda por eficaz modelos de dominio Levemente reformulado:
Lo hace los usuario de los solicitud cuidado si I soy los mismo persona I era a la edad ¿cinco?

En a software sistema por seguimiento cuentas vencer, que modesto "cliente" objeto mayo tener
a más colorido lado. Eso acumula estado por inmediato pago o es convertido sobre para a cobro
de facturas agencia por falta de pago. Puede llevar una doble vida en otro sistema por
completo cuando la fuerza de ventas extrae cliente datos dentro su contacto administración
software. En ninguna caso, eso es aplastado sin contemplaciones Departamento para ser
almacenado en a base de datos mesa. Cuándo nuevo negocio se detiene fluido desde que fuente,
la cliente objeto voluntad ser retirado para un archivo, a sombra de su anterior uno mismo.

Cada una de estas formas del cliente es una implementación diferente basada en un lenguaje
de programación y tecnología diferente. Pero cuando llega una llamada telefónica con un
pedido, es importante para saber: Es esta los cliente quién posee los delincuente ¿cuenta? Es esta
los cliente ese gato (a especial Ventas representante) posee estado trabajando con por
¿semanas? Es esta a completamente ¿nuevo cliente?

Se debe hacer coincidir una identidad conceptual entre las múltiples implementaciones de los
objetos, sus formas almacenadas y los actores del mundo real, como la persona que llama por
teléfono. Los atributos pueden no coincidir. un representante de ventas mayo tener ingresó un
habla a actualizar dentro los contacto software, cual es sólo siendo propagado a las cuentas
vencidas. Dos contactos de clientes pueden tener el mismo nombre. En el software distribuido,
múltiple usuarios pudo ser entrando datos desde diferente fuentes, causando actualizar
transacciones a propagar a través de los sistema para ser reconciliado en diferente bases de datos
asincrónicamente

Objeto modelado tiende para dirigir nosotros para enfocar en los atributos de un objeto,
pero los concepto fundamental de un ENTIDAD es un resumen continuidad enhebrar a través
de a la vida ciclo y incluso que pasa a través múltiple formularios

Algunos objetos no se definen principalmente por sus atributos. Representan un hilo
de identidad que corre a través del tiempo y, a menudo, a través de representaciones
distintas. A veces tal un objeto deber ser emparejado con otro objeto incluso aunque
atributos diferir de. Un objeto deber ser distinguido desde otro objetos incluso aunque
ellos puede que tener los mismos atributos. Equivocado identidad lata dirigir para
datos corrupción.

Un objeto definido principalmente por su identidad se llama ENTIDAD . [1] LAS E NTIDADES tienen
modelos especiales y diseño consideraciones Ellos tener la vida ciclos que lata radicalmente
cambiar sus formulario y contenido, pero a hilo de continuidad deber ser mantenido Sus
identidades deber ser definido entonces que ellos lata ser rastreado de manera efectiva. Sus
definiciones de clase, responsabilidades, atributos y asociaciones deben girar en torno a
quiénes son, en lugar de los atributos particulares que llevan. Incluso para ENTIDADES que no
transformar entonces radicalmente o tener tal Complicado la vida ciclos, colocación ellos en los
categoría semántica Guías para más lúcido modelos y más robusto implementaciones.

[1] A modelo ENTIDAD es no los mismo cosa como a Java "entidad frijol." Entidad frijoles fueron quiso decir
como a estructura para implementar ENTITIES , más o menos, pero no ha funcionado de esa manera. La
mayoría de las ENTIDADES se implementan como ordinarias objetos. Independientemente de cómo ellos están
implementado, Las ENTIDADES son a fundamental distinción en a modelo de dominio

De curso, más " ENTIDADES " en a software sistema están no gente o entidades en los usual sentido
de la palabra. Un ENTIDAD es cualquier cosa que posee continuidad a través de a la vida ciclo y
distinciones independiente de atributos que están importante para los aplicación usuario. Eso
pudo ser a persona, a ciudad, a coche, a billete de lotería, o a Banco transacción.

En los otro mano, no todos objetos en los modelo están ENTIDADES , con significativo identidades
Esta el problema es confundido por los hecho que orientado a objetos idiomas construir
"identidad" operaciones dentro cada objeto (por ejemplo, los " == " operador en Java). Estas
operaciones determinar si dos referencias punto para lo mismo objeto por comparando sus
ubicación en memoria o por algunos otro mecanismo. En esta sentido, cada objeto ejemplo posee
identidad. En los dominio de, decir, creando a Java tiempo de ejecución ambiente o un técnico
estructura por almacenamiento en caché remoto objetos en la zona, cada objeto ejemplo mayo
Por supuesto ser una ENTIDAD . Pero este mecanismo de identidad significa muy poco en otros
dominios de aplicación. La identidad es sutil y significativo atributo de ENTIDADES , cual hipocresía
ser convertido sobre para los automático caracteristicas de la idioma.

Considere las transacciones en una aplicación bancaria. Dos depósitos de la misma cantidad a
la misma cuenta en los mismo día están todavía distinto actas, entonces ellos tener identidad y
están ENTIDADES . Por otro lado, los atributos de cantidad de esas dos transacciones son
probablemente instancias de algo de dinero. objeto. Estas valores tener no identidad, ya que allí
es no utilidad en distintivo ellos. De hecho, dos objetos pueden tener la misma identidad sin
tener los mismos atributos o incluso, necesariamente, siendo de los mismo clase. Cuándo los
Banco cliente es reconciliando los actas de el extracto bancario con las transacciones del registro
de cheques, la tarea es, específicamente, hacer coincidir las transacciones que tener los mismo
identidad, incluso aunque ellos fueron grabado por diferente gente en diferentes fechas (los Banco
claro fecha siendo luego que los fecha en los controlar). los propósito de el número de cheque
sirve como un identificador único para este propósito, ya sea que se esté manejando el
problema por a computadora programa o por mano. Depósitos y dinero en efectivo retiros, cual
no tener una identificación número, lata ser más complicado, pero los mismo principio se aplica:
cada transacción es un ENTIDAD , que aparece en en menos dos formularios

Eso es común por identidad para ser significativo fuera de a especial software sistema, como es
los caso con el bancario actas y los Departamento inquilinos Pero a veces los identidad es
importante solo en los contexto de los sistema, tal como los identidad de a computadora proceso.

Por lo tanto:

Cuando un objeto se distingue por su identidad, en lugar de sus atributos, haga que
esto sea primordial para su definición en el modelo. Mantenga la definición de clase
simple y enfocada en la continuidad e identidad del ciclo de vida. Definir un medio
para distinguir cada objeto independientemente de su formulario o historia. Ser alerta
para requisitos que llamada por pareo objetos por atributos. Defina una operación que
garantice que producirá un resultado único para cada objeto, posiblemente
adjuntando un símbolo que garantice que es único. Este medio de identificación mayo
venir desde los fuera de, o eso mayo ser un arbitrario identificador creado por y por los
sistema, pero eso deber corresponder para los identidad distinciones en los modelo. El
modelo deber definir qué eso medio para ser los mismo cosa.

Identidad es no intrínseco para a cosa en los mundo; eso es a sentido superpuesto porque eso
es útil. En hecho, los mismo mundo real cosa puede que o puede que no ser representado
como un ENTIDAD en a modelo de dominio

Un solicitud por reserva asientos en a estadio puede que tratar asientos y asistentes como
ENTIDADES . En el caso de asignado asientos, en cual cada billete posee a asiento número en
eso, los asiento es un ENTIDAD . su identificador es los asiento número, cual es único dentro de
los estadio. los asiento mayo tener muchos otros atributos, tal como su ubicación, ya sea los
vista es obstruido, y los precio, pero solamente los número de asiento, o a único fila y posición,
es usado para identificar y distinguir asientos.

En los otro mano, si los evento es "general admisión," sentido que billete titulares sentarse
dondequiera que ellos encontrar un vacío asiento, allí es no necesitar para distinguir individual
asientos. Solamente los total número de asientos es importante. Aunque los asiento números
están todavía grabado en los físico asientos, allí es no es necesario que el software los rastree.
De hecho, sería erróneo que el modelo asociara números de asientos específicos con boletos ,
porque no existe tal restricción en un evento de admisión general. En tal a caso, asientos están
no ENTIDADES , y no identificador es necesario.



Modelado E NTIDADES

Eso es natural para pensar sobre los atributos Cuándo modelado un objeto, y eso es bastante
importante pensar sobre su conducta. Pero los más básico responsabilidad de ENTIDADES es para
establecer continuidad así que eso conducta lata ser claro y previsible. Ellos hacer esta mejor si
ellos están conservó repuesto. Bastante que enfocar en los atributos o incluso los conducta,
banda los ENTIDAD objetos definición abajo para los

la mayoría de las características intrínsecas, particularmente aquellas que lo identifican o se
usan comúnmente para encontrar o unir eso. Agregar solamente conducta que es esencial para
los concepto y atributos que están requerido por ese comportamiento Más allá de que, Mira para
retirar conducta y atributos dentro otro objetos asociado con la ENTIDAD central . Algunas de estas
serán otras ENTIDADES . Algunos serán OBJETOS DE VALOR , que es el siguiente patrón en esta
capítulo. Más allá de identidad cuestiones, ENTIDADES tender para realizar sus responsabilidades
coordinando los operaciones de objetos ellos propio.

los Identificación del cliente es los una y solamente identificador de los Cliente ENTIDAD en Figura
5.5 , pero los número de teléfono y habla a haría con frecuencia ser usado para encontrar o
partido a cliente _ los nombre lo hace no definir un de la persona identidad, pero eso es con
frecuencia usado como parte de los medio de determinando eso. En esta ejemplo, los atributos de
teléfono y dirección se movieron a Customer , pero en un proyecto real, esa elección
dependería en cómo los de dominio clientes están típicamente emparejado o distinguido. Para
ejemplo, si un cliente posee muchos contacto teléfono números por diferente propósitos, luego
los teléfono número es no asociado con identidad y deberían Quédate con los Ventas contacto _


Figura 5.5. Los atributos asociados con la identidad permanecen
con la ENTIDAD .


Diseño de la operación de identidad

Cada ENTIDAD debe tener una forma operativa de establecer su identidad con otro objeto,
distinguible incluso de otro objeto con los mismos atributos descriptivos. una identificación
atributo deber ser garantizado para ser único dentro de los sistema sin embargo que sistema se
define, incluso si repartido, incluso Cuándo objetos están archivado.

Como mencionado más temprano, orientado a objetos idiomas tener "identidad" operaciones
que determinar si dos referencias punto para los mismo objeto por comparando los objetos'
ubicaciones en memoria. Esta tipo del rastreo de identidad es demasiado frágil para nuestros
propósitos. En la mayoría de las tecnologías para el almacenamiento persistente de objetos,
cada hora un objeto es recuperado desde a base de datos, a nuevo ejemplo es creado, y
entonces se pierde la identidad inicial. Cada vez que un objeto se transmite a través de una
red, se crea una nueva instancia en los destino, y una vez otra vez los identidad es perdió. los
problema lata ser incluso peor cuando múltiple versiones de los mismo objeto existe en los
sistema, tal como Cuándo actualizaciones propagarse a través de a repartido base de datos.

Incluso con marcos que simplificar estas técnico problemas, los fundamental asunto existe:
Como hacer usted saber que dos objetos representar los mismo conceptual ENTIDAD ? los
definición de emerge la identidad desde los modelo. Definición identidad demandas
comprensión de los dominio.

A veces, ciertos atributos de datos, o combinaciones de atributos, se pueden garantizar o

simplemente

constreñido para ser único dentro de los sistema. Esta Acercarse proporciona a único llave por
los ENTIDAD . A diario periódicos, por ejemplo, puede que ser identificado por los nombre de los
periódico, los ciudad, y el fecha de publicación. (Pero reloj fuera por extra ediciones y nombre
¡cambios!)

Cuándo allí es no cierto único llave hecha arriba de los atributos de un objeto, otro común La
solución es adjuntar a cada instancia un símbolo (como un número o una cadena) que sea
único dentro de la clase. Una vez que este símbolo de identificación se crea y almacena como
un atributo de la ENTIDAD , se designa como inmutable. Nunca debe cambiar , incluso si el
sistema de desarrollo no puede hacer cumplir directamente esta regla. Por ejemplo, el atributo
ID se conserva cuando el objeto se aplana en una base de datos y reconstruido. A veces a
técnico estructura ayuda con esta proceso, pero de lo contrario eso solo toma ingenieria disciplina.

Con frecuencia los IDENTIFICACIÓN es generado automáticamente por los sistema. los
Generacion algoritmo deber garantizar la unicidad dentro del sistema, lo que puede ser un
desafío con el procesamiento concurrente y en distribución sistemas generando tal un
IDENTIFICACIÓN mayo exigir tecnicas que están más allá de los alcance de este libro El objetivo
aquí es señalar cuándo surgen las consideraciones, para que los desarrolladores estén al tanto
ellos tener a problema para resolver y saber cómo para estrecho abajo sus preocupaciones para
los Areas criticas. los llave es para reconocer que identidad preocupaciones bisagra en específico
aspectos de los modelo. A menudo, el medio de identificación demanda a Cuidado estudio de los
dominio, como bien.

Cuándo los IDENTIFICACIÓN es automáticamente generado, los usuario mayo Nunca necesitar
para ver eso. los IDENTIFICACIÓN mayo ser solo se necesita internamente, como en una
aplicación de gestión de contactos que permite al usuario buscar registros por el nombre de
una persona. El programa debe ser capaz de distinguir dos contactos con exactamente el
mismo nombre de una manera sencill a y sin ambigüedades. Las identificaciones internas únicas
permiten que el sistema haga exactamente eso. Después de recuperar los dos distinto
elementos, los sistema voluntad show dos separar contactos para los usuario, pero las
identificaciones mayo no ser mostrado. los usuario voluntad distinguir ellos en los base de sus
empresa, sus ubicación, y así en.

Finalmente, allí están casos en cual a generado IDENTIFICACIÓN es de interesar para los
usuario. Cuándo I Embarcacion a paquete a través de un servicio de entrega de paquetes, me
dan un número de seguimiento, generado por la compañía de envío software, cual I lata utilizar
para identificar y seguir arriba en mi paquete. Cuándo I libro boletos de avión o reservar un
hotel, me dan números de confirmación que son identificadores únicos para la transacción.

En algunos casos, los unicidad de los IDENTIFICACIÓN deber aplicar más allá de los
computadora del sistema límites. Para ejemplo, si médico registros están siendo intercambiado
Entre dos hospitales que tener sistemas informáticos separados, idealmente cada sistema
utilizará la misma ID de paciente, pero esto es difícil si generan sus propio símbolo. Tal
sistemas con frecuencia utilizar un identificador emitido por algunos otro institución, por lo
general a Gobierno agencia. En los Unido estados, los Social Seguridad número es con frecuencia
usado por hospitales como un identificador por a persona. Tal métodos están no infalible. No
todo el mundo posee a Seguridad Social número (niños y no residentes de los Unido estados,
especialmente), y muchos la gente se opone para su utilizar, por intimidad razones.

En menos formal situaciones (decir, video alquiler), teléfono números están usado como
identificadores Pero un teléfono lata ser compartido. los número lata cambiar. Un viejo
número lata incluso ser reasignado para un diferente persona.

Para estas razones, especialmente asignado identificadores están con frecuencia usado (tal como
frecuente volante números), y otro atributos, tal como teléfono números y Social Seguridad
números, están usado para partido y verificar. En ninguna caso, Cuándo los solicitud requiere un
externo IDENTIFICACIÓN, los usuarios de los sistema hacerse responsable por abastecimiento
identificaciones que están único, y los sistema deber dar ellos adecuado herramientas manejar
excepciones que aumentar.

Dado todos estas técnico problemas, eso es fácil para perder visión de los subyacente
conceptual problema: que lo hace eso significar por dos objetos para ser los mismo ¿cosa? Eso

es fácil suficiente para sello cada objeto con un IDENTIFICACIÓN, o para escribe un operación
que compara dos instancias, pero si estas identificaciones o las operaciones no corresponder
para algunos significativo distinción en los dominio, ellos sólo confundir asuntos más.

Esta es por qué asignación de identidad operaciones con frecuencia involucrar humano
aporte. Talonario de cheques software de reconciliación, por ejemplo, mayo oferta probable
partidos, pero los usuario es previsto para hacer los determinación definitiva.

[ Equipo LiB ]

[ Equipo LiB ]


Objetos de valor

Muchos objetos no tienen identidad conceptual. Estos objetos describen alguna característica de
una cosa.


Cuándo a niño es dibujo, él se preocupa sobre los color de los marcador él elige, y él mayo
preocuparse los nitidez de los propina. Pero si allí están dos marcadores de los mismo color y
forma, el probablemente no lo haré cuidado cual una él usos. Si a marcador es perdió y
sustituido por otro de los el mismo color desde a nuevo paquete, él lata reanudar su trabajo
despreocupado sobre los cambiar.

Pedir los niño sobre los varios dibujos en los refrigerador, y él voluntad rápidamente distinguir los
que el hecha desde esos su hermana hecha. Él y su hermana tener útil identidades, como hacer
sus dibujos terminados. Pero imagina cómo Complicado eso haría ser si él tenido para pista cual
líneas en a dibujo fueron hechos por cada marcador. Dibujo haría no más extenso ser del niño
jugar.

Porque los más conspicuo objetos en a modelo están generalmente ENTIDADES , y porque
eso es muy importante para pista cada ENTIDAD _ identidad, eso es natural para considerar
asignando un identidad para todo el dominio objetos. Por supuesto, algunos marcos
asignar a único IDENTIFICACIÓN para cada objeto.

los sistema posee para afrontar con todos que seguimiento, y muchos posible rendimiento
optimizaciones son gobernados fuera. Analítico esfuerzo es requerido para definir significativo
identidades y trabajo fuera infalible formas de pista objetos al otro lado de repartido sistemas o
en base de datos almacenamiento. Igualmente importante, tomando en artificial identidades es
engañoso. Eso enredos los modelo, forzando todos objetos dentro los mismo molde.

Seguimiento los identidad de ENTIDADES es esencial, pero adjuntando identidad para
otro objetos puede perjudicar el rendimiento del sistema, agregar trabajo analítico y
confundir el modelo al hacer que todos los objetos Mira los mismo.

Software diseño es a constante batalla con complejidad. Nosotros deber hacer
distinciones así que eso especial manejo es aplicado solamente donde necesario.

Sin embargo, si pensamos en esta categoría de objeto simplemente como la
ausencia de identidad,

no hemos agregado mucho a nuestra caja de herramientas o vocabulario. De
hecho, estos objetos tienen características de sus propio y sus propio significado
para los modelo. Estas están los objetos que describir cosas.

Un objeto que representa a descriptivo aspecto de los dominio con no conceptual identidad es
llamado un OBJETO DE VALOR . Se crean instancias de OBJETOS DE VALOR para representar
elementos del diseño que nos interesan solamente por qué ellos están, no quién o cual ellos
están.



Los colores son un ejemplo de OBJETOS DE VALOR que se proporcionan en las bibliotecas base de
muchos desarrollos modernos. sistemas; entonces están instrumentos de cuerda y números. (Tú
no cuidado cual "4" usted tener o que "Q".) Estas básico ejemplos están sencillo, pero VALOR
OBJETOS están no necesariamente sencillo. Para Por ejemplo, un programa de mezcla de colores
podría tener un modelo enriquecido en el que se podrían combinar objetos de colores
mejorados. para Produce otro colores. Estas colores pudo tener complejo algoritmos por
colaborando para derivar los nuevo resultante VALOR OBJETO .

A VALOR OBJETO lata ser un conjunto de otro objetos. En software por diseño casa planes, un
objeto pudo ser creado por cada ventana estilo. Esta "ventana estilo" pudo ser incorporado
dentro una ventana" objeto, a lo largo de con altura y ancho, como bien como normas
gobernante cómo estas atributos Se puede cambiar y combinar. Estas ventanas son intrincados
OBJETOS DE VALOR formados por otros OBJETOS DE VALOR . Ellos en girar haría ser incorporado
dentro más grande elementos de a plan, tal como "muro" objetos.

OBJETOS DE VALOR pueden incluso hacer referencia a ENTIDADES . Por ejemplo, si le pido a un
servicio de mapas en línea un paisaje conduciendo ruta desde San Francisco para Los Ángeles,
eso puede que derivar a Ruta objeto enlace LA y San Francisco vía los Pacífico Costa Carretera.
Que Ruta objeto haría ser a VALOR , incluso aunque el Tres objetos eso referencias (dos ciudades y
a carretera) están todos ENTIDADES .

V ALOR OBJETOS están con frecuencia aprobado como parámetros en mensajes Entre objetos.
Ellos están frecuentemente transitorio, creado para una operación y luego descartado. Los
OBJETOS DE VALOR se utilizan como atributos de ENTIDADES (y otros VALORES ). Una persona
puede ser modelada como una ENTIDAD con una identidad, pero la identidad de esa persona
nombre es a VALOR .

Cuándo usted cuidado solamente sobre los atributos de un elemento de los
modelo, clasificar eso como un OBJETO DE VALOR . Haz que exprese el significado de
los atributos que transmite y dale información relacionada. funcionalidad. Tratar
los VALOR OBJETO como inmutable. no dar eso ninguna identidad y evitar los diseño
complejidades necesario para mantener ENTIDADES .

Is "Address" a VALUE OBJECT? Who's Asking?

In software for a mail-order company, an address is needed to confirm the credit card,
and to address the parcel. But if a roommate also orders from the same company, it is
not important to realize they are in the same location. Address is a VALUE OBJEC T.

In software for the postal service, intended to organize delivery routes, the country
could be formed into a hierarchy of regions, cities, postal zones, and blocks, terminating
in individual addresses. These address objects would derive their zip code from their
parent in the hierarchy, and if the postal service decided to reassign postal zones, all
the addresses within would go along for the ride. Here, Address is an ENTITY.

In software for an electric utility company, an address corresponds to a destination for
the company's lines and service. If roommates each called to order electrical service,
the company would need to realize it. Address is an ENTITY. Alternatively, the model
could associate utility service with a "dwelling," an ENTITY with an attribute of address.
Then Address would be a VALUE OBJEC T.

Los atributos que componen un OBJETO DE VALOR deben formar un todo conceptual. [2] Por
ejemplo, calle, ciudad, y postal código no debería ser separar atributos de a Persona objeto. Ellos
están parte de un solo, entero habla a, cual hace a más simple Persona, y a más coherente VALOR
OBJETO .

[2] El patrón TODO EL VALOR , por Ward C unningham.


Figura 5.6. UN OBJETO DE VALOR puede dar información sobre una ENTIDAD .
Debe ser conceptualmente completo.




Diseño de objetos de valor

Nosotros no cuidado cual ejemplo nosotros tener de a VALOR OBJETO . Esta carecer de
restricciones da nosotros libertad de diseño nosotros lata utilizar para simplificar los diseño o
optimizar rendimiento. Esta implica haciendo elecciones sobre proceso de copiar, intercambio, y
inmutabilidad.

Si dos gente tener los mismo nombre, que lo hace no hacer ellos los mismo persona, o hacer
ellos intercambiables. Pero los objeto representando los nombre es intercambiable, porque
solamente la ortografía de los nombre asuntos. A Nombre objeto lata ser copiado desde los
primero Persona objeto para el segundo.

En hecho, los dos Persona objetos puede que no necesitar sus propio nombre instancias. los
mismo Nombre el objeto podría ser compartido Entre los dos Persona objetos (cada con a
puntero para los mismo nombre ejemplo) sin cambios en su comportamiento o identidad. Es
decir, su comportamiento será correcto hasta que algún cambio es hecha para los nombre de
una persona. Luego los otro de la persona nombre haría cambiar ¡además! Proteger en contra
esta, en pedido por un objeto para ser compartido sin peligro, eso deber ser inmutable : eso no
poder ser cambiado excepto por completo reemplazo.

Los mismos problemas surgen cuando un objeto pasa uno de sus atributos a otro objeto como
argumento o regreso valor. Cualquier cosa pudo suceder para los errante objeto tiempo eso es
fuera de control de su dueño. El VALOR podría cambiarse de una manera que corrompa al
propietario, al violar los derechos del propietario. invariantes Esta problema es evitado
cualquiera por haciendo los aprobado objeto inmutable, o al pasar un Copiar.

Creando extra opciones por rendimiento Afinación lata ser importante porque VALOR OBJETOS
tender para ser numeroso El ejemplo del software de diseño de la casa sugiere esto. Si cada
enchufe eléctrico es un OBJETO DE VALOR separado , podría haber cien de ellos en una sola
versión de un solo plano de casa. Pero si todos los puntos de venta se consideran
intercambiables, podríamos compartir solo una instancia de un punto de venta y punto para
eso a centenar veces (un ejemplo de PESO MOSC A [ Gama et Alabama. 1995 ]). En grandes
sistemas, esta tipo de efecto lata ser multiplicado por miles, y tal un mejoramiento lata marca la
diferencia entre un sistema utilizable y uno que se ralentiza a paso de tortuga, ahogado por
millones de objetos redundantes. Este es solo un ejemplo de un truco de optimización que no
está disponible para ENTITIES .

los economía de proceso de copiar versus intercambio depende en los implementación
ambiente. Aunque las copias mayo obstruir los sistema con enorme números de objetos,
intercambio lata lento abajo a Sistema distribuido. Cuándo a Copiar es aprobado Entre dos
máquinas, a único mensaje es enviado y los la copia vive independientemente en la máquina
receptora. Pero si se comparte una sola instancia, solo una referencia es aprobado,
requiriendo a mensaje espalda para los objeto por cada Interacción.

Compartir se restringe mejor a aquellos casos en los que es más valioso y menos
problemático:


Cuando es fundamental ahorrar espacio o contar objetos en la base de datos

Cuando la sobrecarga de comunicación es baja (como en un servidor centralizado)

Cuando el objeto compartido es estrictamente inmutable

Inmutabilidad de un atributo o un objeto lata ser declarado en algunos idiomas y ambientes pero
no en otros. Tal caracteristicas ayuda comunicar los diseño decisión, pero ellos están no esencial.
Muchas de las distinciones que estamos haciendo en el modelo no se pueden declarar
explícitamente en la implementación. con más Actual herramientas y programación idiomas Tú
hipocresía declarar ENTIDADES , por ejemplo, y luego tener un identidad operación
automáticamente forzado Pero los carecer de lenguaje directo apoyo por a conceptual
distinción lo hace no significar que los distinción es no útil. Es solo medio que más disciplina es
necesario para mantener los normas que voluntad ser solamente implícito en la
implementación. Esta lata ser reforzado con nombrando convenciones, selectivo
documentación, y muchos discusión _

Siempre que un OBJETO DE VALOR sea inmutable, la gestión de cambios es simple: no hay
ningún cambio excepto el reemplazo completo. Los objetos inmutables se pueden compartir
libremente, como en el ejemplo del enchufe eléctrico. Si basura colección es de confianza,
supresión es sólo a importar de goteante todos referencias para el objeto. Cuándo a VALOR OBJETO
es designado inmutable en los diseño, desarrolladores están gratis para tomar decisiones sobre
cuestiones como copiar y compartir sobre una base puramente técnica, con la seguridad de
saber que los solicitud lo hace no confiar en especial instancias de los objetos.

Definición VALOR OBJETOS y designando ellos como inmutable es a caso de siguiente a general
regla: Evitar restricciones innecesarias en un modelo deja a los desarrolladores libres para
hacer un rendimiento puramente técnico Afinación. Explícitamente definiendo los esencial
restricciones vamos desarrolladores retocar los diseño mientras acuerdo a salvo desde
cambiando significativo conducta. Tal diseño retoques están con frecuencia muy específico a los
tecnología en utilizar en a especial proyecto.


Ejemplo
Ajuste de una base de datos con O BJETOS DE V ALOR

bases de datos, en los más bajo nivel, tener para lugar datos en a físico ubicación en a disco,
y eso requiere tiempo por físico partes para moverse alrededor y leer que datos. Sofisticado
bases de datos intento agrupar estas físico direcciones entonces que relacionados datos lata
ser buscado desde los disco en a solo físico operación.

Si un objeto es referenciado por muchos otro objetos, algunos de esos objetos voluntad no ser
situado cerca (en los mismo página), requiriendo un adicional físico operación para obtener los
datos. Por haciendo a copiar, más bien que intercambio a referencia para los mismo ejemplo, a
VALOR OBJETO que es interino como un El atributo de muchas ENTIDADES se puede almacenar en
la misma página que cada ENTIDAD que lo usa. Esta técnica de almacenamiento múltiple copias
de los mismo datos es llamado desnormalización y es con frecuencia usado Cuándo tiempo de
acceso es más crítico que almacenamiento espacio o sencillez de mantenimiento.

En una base de datos relacional, es posible que desee poner un VALOR particular en la tabla de la
ENTIDAD que posee eso, bastante que creando un asociación para a separar mesa. En a repartido
sistema, tenencia una referencia para a VALOR OBJETO en otro servidor voluntad probablemente
hacer por lento respuestas para mensajes; en su lugar, se debe pasar una copia de todo el
objeto al otro servidor. Podemos hacer estos libremente copias porque nosotros están relación
comercial con VALOR OBJETOS .

Special Cases: When to Allow Mutability

Immutability is a great simplifier in an implementation, making sharing and reference
passing safe. It is also consistent with the meaning of a value. If the value of an
attribute changes, you use a different VALUE OBJEC T, rather than modifying the existing
one. Even so, there are cases when performance considerations will favor allowing a
VALUE OBJEC T to be mutable. These factors would weigh in favor of a mutable
implementation:


If the VALUE changes frequently

If object creation or deletion is expensive

If replacement (rather than modification) will disturb clustering (as discussed in
the previous example)

If there is not much sharing of VALUES, or if such sharing is forgone to improve
clustering or for some other technical reason

Just to reiterate: If a VALUE's implementation is to be mutable, then it must not be
shared. Whether you will be sharing or not, design VALUE OBJEC TS as immutable when
you can.

Diseño de asociaciones que involucren objetos de valor

Más de los más temprano discusión de asociaciones se aplica para ENTIDADES y VALOR OBJETOS
similar. los menos y más simple los asociaciones en los modelo, los mejor.

Pero, mientras que las asociaciones bidireccionales entre ENTIDADES pueden ser difíciles de
mantener, las asociaciones bidireccionales Entre dos VALOR OBJETOS sólo hacer no sentido. Sin
identidad, eso es sin sentido decir que un objeto puntos espalda para los mismo VALOR OBJETO
que puntos para eso. los más usted pudo decir es que eso puntos para un objeto que es igual
para los una señalando para eso, pero usted haría tener para hacer cumplir eso invariante algun
lado. Y aunque usted pudo hacer entonces, y colocar arriba punteros yendo ambas cosas formas,
es difícil pensar en ejemplos en los que tal disposición sería útil. Trate de eliminar por
completo bidireccional asociaciones Entre VALOR OBJETOS . Si en los final tal asociaciones parece
necesario en su modelo, reconsidere la decisión de declarar el objeto como un OBJETO DE VALOR
en primer lugar. Quizás eso posee un identidad que no tiene estado explícitamente Reconocido
aún.

E NTIDADES y VALOR OBJETOS están los principal elementos de convencional objeto modelos, pero
diseñadores pragmáticos tener venir para utilizar una elemento, SERVIC IOS . . . .

[ Equipo LiB ]

[ Equipo LiB ]


Servicios

A veces, simplemente no es una cosa.

En algunos casos, el diseño más claro y pragmático incluye operaciones que conceptualmente
no pertenecer para ninguna objeto. Bastante que fuerza los asunto, nosotros lata seguir los
natural contornos de los problema espacio y incluir SERVIC IOS explícitamente en los modelo.


Ahí están importante dominio operaciones que hipocresía encontrar a natural casa en un
ENTIDAD o OBJETO DE VALOR . Algunos de estas están intrínsecamente ocupaciones o
comportamiento, no cosas, pero ya que nuestro paradigma de modelado es objetos,
nosotros tratar para encajar ellos dentro objetos de todos modos.

Ahora, los más común error es para dar arriba también fácilmente en adecuado los conducta
dentro un objeto apropiado, gradualmente corrimiento hacia procesal programación. Pero Cuándo
nosotros fuerza un operación dentro un objeto que no encajar los objetos definición, los objeto
pierde su conceptual claridad y se vuelve duro para comprender o refactorizar Complejo
operaciones lata fácilmente pantano a sencillo objeto, oscureciendo su papel. Y debido a que
estas operaciones a menudo reúnen muchos objetos de dominio, coordinándolos y poniendo
ellos dentro acción, los agregado responsabilidad voluntad crear dependencias en todos esos
objetos, enredando conceptos que pudo ser entendido independientemente.

A veces servicios mascarada como modelo objetos, apareciendo como objetos con no sentido más
allá de hacer algunos operación. Estas "hacedores" final arriba con nombres finalizando en
"Gerente" y los me gusta. Ellos tienen no estado de sus propio ni ninguna sentido en los dominio
más allá de los operación ellos anfitrión. Todavía, por lo menos esta solución da estas distinto
comportamientos a casa sin ensuciar arriba a verdadero modelo objeto.

Algunos conceptos del dominio no son naturales para modelar como objetos.
Obligar a que la funcionalidad de dominio requerida sea responsabilidad de una
ENTIDAD o VALOR distorsiona los definición de a basado en modelos objeto o agrega
sin sentido artificial objetos.

Un SERVIC IO es una operación que se ofrece como una interfaz que está sola en el modelo, sin
encapsular estado, como ENTIDADES y VALOR OBJETOS hacer. S ERVIC IOS están a común patrón en
marcos técnicos, pero ellos lata además aplicar en los dominio capa.

El servicio de nombres enfatiza la relación con otros objetos. A diferencia de las ENTIDADES y los
OBJETOS DE VALOR , eso es definido puramente en condiciones de qué eso lata hacer por a cliente.
A SERVIC IO tiende para ser llamado por un actividad, bastante que un entidad—una verbo
bastante que a sustantivo. A SERVIC IO lata todavía tener un abstracto, intencional definición; eso
sólo posee a diferente sabor que los definición de un objeto. A SERVIC IO aún debe tener una
responsabilidad definida, y esa responsabilidad y la interfaz que la cumple deben definirse como
parte del modelo de dominio. Los nombres de las operaciones deben provenir del LENGUAJE
UBIC UO o ser introducido dentro eso. Parámetros y resultados deberían ser dominio objetos.

S ERVIC IOS deberían ser usado juiciosamente y no permitido para banda los ENTIDADES y VALOR
OBJETOS de todos sus conducta. Pero Cuándo un operación es Realmente un importante dominio
concepto, a SERVICIO formularios una parte natural de un DISEÑO IMPULSADO POR MODELOS .
Declarado en el modelo como SERVICIO, en lugar de falso objeto que no Realmente representar
cualquier cosa, los ser único operación voluntad no engañar a nadie.

Un buen SERVIC IO tiene tres características.

1. los operación relaciona para a dominio concepto que es no a natural parte de un ENTIDAD
o OBJETO DE VALOR .

2. los interfaz es definido en condiciones de otro elementos de los dominio modelo.

3. los operación es apátrida.

apatridia aquí medio que ninguna cliente lata utilizar ninguna ejemplo de a especial SERVIC IO
sin consideración para los instancias individual historia. los ejecución de a SERVIC IO voluntad
utilizar información que es accesible globalmente, e incluso puede cambiar esa información
global (es decir, puede tener efectos secundarios). Pero el SERVIC IO no tiene un estado
propio que afecte su propio comportamiento, como la mayoría de los dominios. objetos
hacer.

Cuando un proceso significativo o una transformación en el dominio no sea una
responsabilidad natural de una ENTIDAD u OBJETO DE VALOR , agregue una operación al
modelo como una interfaz independiente declarada como SERVICIO . Definir la
interfaz en términos de idioma. de los modelo y hacer Por supuesto los operación
nombre es parte de los LENGUA UBICUO . Hacer los SERVICIO apátrida.



S ERVICIOS y el Dominio Aislado Capa

Esta patrón es enfocado en esos SERVIC IOS que tener un importante sentido en los dominio en
por derecho propio, pero, por supuesto, los SERVIC IOS no se utilizan solo en la capa de
dominio. Se ocupa de distinguir los SERVIC IOS que pertenecen a la capa de dominio de los de
otras capas, y de factorizar las responsabilidades para mantenerse que distinción afilado.

La mayoría de los SERVIC IOS discutidos en la literatura son puramente técnicos y pertenecen
a la capa de infraestructura. Los SERVIC IOS de dominio y aplicación colaboran con estos
SERVIC IOS de infraestructura . Por ejemplo, a Banco puede que tener un solicitud que envía un
Email para a cliente Cuándo un saldo de la cuenta caídas debajo a específico límite. los interfaz
que encapsula los Email sistema, y quizá alterno medio de notificación, es a SERVIC IO en los
infraestructura capa.

Eso lata ser más difícil para distinguir solicitud SERVIC IOS desde dominio SERVIC IOS . los solicitud
capa es responsable de ordenar la notificación. La capa de dominio es responsable de
determinar si un umbral era conocí—aunque esta tarea probablemente lo hace no llamada por a
SERVIC IO , porque eso haría encajar la responsabilidad de un objeto "cuenta". Esa aplicación
bancaria podría ser responsable de las transferencias de fondos. Si a SERVIC IO fueron ideado
para hacer apropiado débitos y creditos por a fondos transferir,

que capacidad haría pertenecer en los dominio capa. Fondos transferir posee a sentido en los
dominio bancario idioma, y eso implica fundamental negocio lógica. Técnico SERVIC IOS deberían
carecer cualquier negocio sentido en todos.

Muchos SERVIC IOS de dominio o aplicación se construyen sobre las poblaciones de ENTIDADES y
VALORES , comportándose como scripts que organizan el potencial del dominio para realmente
hacer algo. Las E NTIDADES y los OBJETOS DE VALOR a menudo son demasiado detallados para
proporcionar un acceso conveniente a las capacidades. de los dominio capa. Aquí nosotros
encuentro a muy multa línea Entre los dominio capa y la capa de aplicación. Por ejemplo, si la
aplicación bancaria puede convertir y exportar nuestras transacciones dentro a hoja de cálculo
expediente por nosotros para analizar, que exportar es un solicitud SERVIC IO . Hay no sentido de
"expediente formatos" en los dominio de bancario, y allí están no negocio normas involucrado.

Por otro lado, una característica que puede transferir fondos de una cuenta a otra es un
SERVIC IO de dominio porque incorpora reglas comerciales significativas (abono y débito de las
cuentas apropiadas, por ejemplo) y porque a "fondos transferir" es a significativo bancario
término. En esta caso, el SERVIC IO lo hace no hacer mucho en su propio; eso haría pedir los dos
Cuenta objetos para hacer más de la obra. Pero para poner los "transferir" operación en los
Cuenta objeto haría ser incómodo, porque la operacion implica dos cuentas y algunos global
normas.

Quizá nos gustaría crear un objeto de transferencia de fondos para representar las dos
entradas más las reglas y el historial. alrededor los transferir. Pero nosotros están todavía
izquierda con llamadas para SERVIC IOS en los interbancario redes Qué más, en más desarrollo
sistemas, eso es incómodo para hacer a directo interfaz Entre un dominio objeto y externo
recursos. Nosotros lata vestido arriba tal externo SERVIC IOS con a FAC HADA que toma entradas en
términos del modelo, tal vez devolviendo un objeto Transferencia de fondos como resultado.
Pero lo que sea intermediarios nosotros puede que tener, y incluso aunque ellos no pertenecer
para nosotros, esos Los SERVIC IOS son que lleva fuera los dominio responsabilidad de fondos
transferir.


Fraccionamiento Servicios
dentro Fondos de aplicación de capas Transferir aplicación
Servicio

Entrada de resúmenes (como una solicitud XML).

Envía un mensaje al servicio de dominio para su cumplimiento.

Escucha para confirmar.

Decide enviar una notificación utilizando el servicio de infraestructura.
Fondos de dominio Transferir Dominio Servicio


interactúa con necesario Cuenta y Libro mayor objetos, haciendo débitos
apropiados y créditos

Suministra confirmación de resultado (transferencia permitida o no,
etc.).
Servicio de notificación de envío de infraestructura


envía correos electrónicos, letras, y otro comunicaciones como
dirigido por la aplicación

granularidad

Aunque esta discusión de patrones ha enfatizado la expresividad de modelar un concepto como
un

SERVIC IO , los patrón es además valioso como a medio de controlador granularidad en los
interfaces de el dominio capa, como bien como desacoplamiento clientela desde los ENTIDADES y
VALOR OBJETOS .

SERVIC IOS sin estado y de grano medio pueden ser más fáciles de reutilizar en sistemas
grandes porque encapsulan significativo funcionalidad detrás a sencillo interfaz. También, de
grano fino objetos lata Conducir a ineficiente mensajería en a repartido sistema.

Como previamente discutido, de grano fino dominio objetos lata contribuir para conocimiento
fugas desde el dominio en la capa de aplicación, donde se coordina el comportamiento del
objeto de dominio. La complejidad de a muy detallado Interacción termina arriba siendo
manejado en los solicitud capa, permitiendo el dominio conocimiento para arrastrarse dentro los
solicitud o usuario interfaz código, donde eso es perdió desde la capa de dominio. La
introducción juiciosa de los servicios de dominio puede ayudar a mantener la línea clara entre
capas.

Esta patrón favores interfaz sencillez sobre cliente control y versatilidad. Eso proporciona a
grano medio de funcionalidad muy útil en embalaje componentes de grande o repartido
sistemas Y aveces a SERVIC IO es los más natural manera para Rápido a dominio concepto.


Acceso a S ERVICIOS

Repartido sistema arquitecturas, tal como J2EE y CORBÁ, proveer especial publicación
mecanismos para SERVIC IOS , con convenciones por sus utilizar, y ellos agregar distribución y
acceso capacidades. Pero tal marcos están no siempre en utilizar en a proyecto, y incluso Cuándo
ellos están, ellos están probable para ser exagerado Cuándo los motivación es sólo a lógico
separación de preocupaciones.

los medio de Proporcionar acceso para a SERVIC IO es no como importante como los diseño
decisión para esculpir fuera de específico responsabilidades. A "hacedor" objeto mayo ser
satisfactorio como un implementación de a Interfaz de SERVIC IO . A sencillo ÚNIC O ( Gama et
Alabama. 1995 ) lata ser escrito fácilmente para proveer acceso. Las convenciones de
codificación pueden dejar en claro que estos objetos son solo mecanismos de entrega para las
interfaces de SERVIC IO , y no significativo dominio objetos. Elaborar arquitecturas deberían ser
usado solamente cuando ahí es a verdadero necesitar para distribuir los sistema o de lo contrario
dibujar en los del marco capacidades.


[ Equipo LiB ]

[ Equipo LiB ]


Módulos (también conocidos como Paquetes)
MÓDULOS _ están un viejo, establecido diseño elemento. Ahí están técnico consideraciones, pero
sobrecarga cognitiva es los primario motivación por modularidad. MÓDULOS _ dar gente dos
puntos de vista de los modelo: Ellos lata Mira en detalle dentro de a MÓDULO sin siendo abrumados
por los entero, o ellos lata mirar relaciones Entre MÓDULOS en puntos de vista que excluir interior
detalle.

los MÓDULOS en los dominio capa deberían surgir como a significativo parte de los modelo,
narración la historia de los dominio en a más grande escala.


Todos usan MÓDULOS , pero pocos los tratan como una parte completa del modelo. El
código obtiene roto abajo dentro todos ordena de categorías, desde aspectos de los
técnico arquitectura a las asignaciones de trabajo de los desarrolladores. Incluso los
desarrolladores que refactorizan mucho tienden a contentarse con MÓDULOS concebido
temprano en los proyecto.

Es una perogrullada que debe haber un acoplamiento bajo entre los MÓDULOS y una
alta cohesión dentro de ellos. Las explicaciones de acoplamiento y cohesión tienden a
hacerlas parecer técnicas. métrica, para ser juzgado mecánicamente establecido en los
distribuciones de asociaciones y interacciones. Aún eso no es sólo código siendo
dividido dentro MÓDULOS , pero conceptos. Ahí es un límite para cómo muchos cosas a
persona lata pensar sobre en una vez (por eso bajo acoplamiento).
Incoherente fragmentos de ideas están como duro para comprender como un
indiferenciado sopa de ideas (por eso elevado cohesión).

Bajo acoplamiento y elevado cohesión están general diseño principios que aplicar como
mucho para objetos individuales como para MÓDULOS , pero ellos están particularmente
importante en esta más grande grano de modelado y diseño. Estas condiciones tener estado
alrededor por a largo hora; una estilo de patrones explicación lata ser encontrado en larman
1998 _

Cuando sea dos modelo elementos están apartado dentro diferente módulos, los relaciones entre
ellos volverse menos directo que ellos fueron, cual aumenta los gastos generales de
comprensión Su lugar en los diseño. Bajo acoplamiento Entre MÓDULOS minimiza esta costo, y
hace eso posible analizar los contenido de una MÓDULO con a mínimo de referencia para otros
que interactuar.

En los mismo hora, los elementos de a bien modelo tener sinergia, y bien elegido MÓDULOS
reunir a elementos de los modelo con particularmente Rico conceptual relaciones Esta elevado
cohesión de objetos con relacionados responsabilidades permite modelado y diseño trabajo para
concentrado dentro de un solo MÓDULO , a escala de complejidad a humano mente lata
fácilmente encargarse de.

MÓDULOS _ y los menor elementos deberían coevolucionar, pero típicamente ellos hacer no.
MÓDULOS _ están elegido para organizar un temprano formulario de los objetos. Después que,
los objetos tender para cambiar en formas que mantenerlos en los límites de los existente MÓDULO
definición. refactorización MÓDULOS es más trabajo y más disruptivo que refactorización clases, y
probablemente hipocresía ser como frecuente. Pero sólo como modelo los objetos tienden a
comenzar siendo ingenuos y concretos y luego se transforman gradualmente para revelar una
visión más profunda, MÓDULOS lata volverse sutil y resumen. Alquiler los MÓDULOS reflejar
cambiando comprensión de El dominio voluntad además permitir más libertad por los objetos
dentro de ellos para evolucionar.

Me gusta todo demás en a impulsado por el dominio diseño, MÓDULOS están a comunicaciones

mecanismo _ El significado de los objetos que se dividen debe determinar la elección de los
MÓDULOS . Cuando colocas algunos clases juntos en a MÓDULO , usted están narración los próximo
desarrollador quién mira en tu diseño pensar sobre ellos juntos. Si tu modelo es narración a
historia, los MÓDULOS están capítulos los nombre de

el MÓDULO transmite su significado. Estos nombres entran en el LENGUAJE UBIC UO . "Ahora
hablemos de los 'cliente' módulo," usted puede que decir para a negocio experto, y los contexto
es colocar por tu conversación

Por lo tanto:

Escoger MÓDULOS que decir los historia de los sistema y Contiene a cohesivo colocar de
conceptos. Esto a menudo produce un bajo acoplamiento entre MÓDULOS , pero si no
es así, busque una forma de cambiar los modelo para desenredar los conceptos, o
búsqueda por un pasado por alto concepto eso podría ser los base de a MÓDULO que
haría traer los elementos juntos en a de manera significativa. Busque un bajo
acoplamiento en el sentido de conceptos que puedan entenderse y razonarse
independientemente unos de otros. Refine el modelo hasta que se divida de acuerdo
con el alto nivel dominio conceptos y los correspondiente código es desacoplado como
bien.

Dar los MÓDULOS nombres que volverse parte de los UBICUO IDIOMA . MÓDULOS y ellos
nombres deberían reflejar visión dentro los dominio.

Mirando en conceptual relaciones es no un alternativa para técnico medidas. Ellos están niveles
diferentes de los mismo asunto, y ambas cosas tener para ser logrado. Pero centrado en el
modelo pensando produce un Más adentro solución, bastante que un incidental una. Y Cuándo allí
posee para ser a compensación, eso es mejor para ir con la claridad conceptual, incluso si eso
significa más referencias entre MÓDULOS u onda ocasional efectos Cuándo cambios están hecha
para a MÓDULO . Desarrolladores lata encargarse de estas problemas si entienden los historia los
modelo es narración ellos.



MÓDULOS Ágiles

MÓDULOS _ necesitar para coevolucionar con los descanso de los modelo. Esta medio
refactorización MÓDULOS Correcto junto con los modelo y código. Pero esta refactorización con
frecuencia no suceder. Cambiando MÓDULOS tiende requerir extendido actualizaciones para los
código. Tal cambios lata ser disruptivo para equipo comunicación e incluso puede ser una llave
inglesa para las herramientas de desarrollo, como los sistemas de control de código fuente.
Como a resultado, MÓDULO estructuras y nombres con frecuencia reflejar mucho más temprano
formularios de los modelo que los clases hacer.

Inevitable temprano errores en MÓDULO elecciones dirigir para elevado acoplamiento, cual hace
eso duro para refactorizar La falta de refactorización sigue aumentando la inercia. Solo se
puede superar mordiendo la bala. y reorganizando MÓDULOS establecido en experiencia de donde
los problema lugares mentir.

Algunas herramientas de desarrollo y sistemas de programación exacerban el problema.
Cualquiera que sea la tecnología de desarrollo en la que se basará la implementación,
debemos buscar formas de minimizar los trabajo de refactorización MÓDULOS , y minimizando
desorden en comunicado para otros desarrolladores.


Ejemplo
Convenciones de codificación de paquetes en Java

En Java, importaciones (dependencias) deber ser declarado en algunos individual clase. A
modelador probablemente piensa de paquetes como dependiente en otro paquetes, pero esta
hipocresía ser fijado en Java. Codificación común convenciones alentar los importar de
específico clases, resultante en código me gusta esta:

Clase A1

importar
paqueteB.ClaseB1;
importar
paqueteB.ClaseB2;
importar
paqueteB.ClaseB3;
importar
paqueteC.ClaseC1;
importar
paqueteC.ClaseC2;
importar
paqueteC.ClassC3;
. . .

En Java, Desafortunadamente, allí es no escapar desde importador dentro individual clases,
pero usted lata por lo menos importar completo paquetes en a hora, reflejando los intención
que paquetes están muy unidades cohesivas tiempo simultaneamente reduciendo los esfuerzo
de cambiando paquete nombres

Clase A1
importar paqueteB.*;
importar paqueteC.*;
. . .

Cierto, esta técnica medio mezclando dos escamas (clases depender en paquetes), pero eso
comunica más que los anterior voluminoso lista de clases—es transmite los intención para crear a
dependencia en particular MÓDULOS .

Si una clase individual realmente depende de una clase específica en otro paquete, y el
MÓDULO local no parecer para tener a conceptual dependencia en los otro MÓDULO , luego quizás a
la clase debería ser movido, o los MÓDULOS ellos mismos deberían ser reconsiderado.


Las trampas del empaque impulsado por la infraestructura

Fuerte efectivo en nuestro embalaje decisiones venir desde técnico marcos Algunos de estas
son útiles, tiempo otros necesitar para ser resistido

Un ejemplo de a muy útil estructura estándar es los aplicación de EN C APAS ARQUITECTURA
colocando la infraestructura y el código de la interfaz de usuario en grupos separados de
paquetes, dejando el dominio capa físicamente apartado dentro su propio colocar de paquetes

Por otro lado, las arquitecturas en niveles pueden fragmentar la implementación de los objetos
del modelo. Algunos marcos crean niveles al distribuir las responsabilidades de un solo objeto
de dominio en varios objetos y luego colocar esos objetos en paquetes separados. Por ejemplo,
con J2EE, una práctica común es colocar los datos y el acceso a los datos en un "bean de
entidad" mientras se coloca la lógica comercial asociada en un "bean de sesión". Además de la
mayor complejidad de implementación de cada componente, los separación inmediatamente
roba un objeto modelo de cohesión. Una de los más fundamental conceptos de objetos es para
encapsular datos con los lógica que opera en que datos. Este tipo de implementación escalonada
no es fatal, porque ambos componentes pueden verse juntos constituyendo los implementación
de a único modelo elemento, pero para hacer asuntos peor, el entidad y sesión frijoles están con
frecuencia apartado dentro diferente paquetes En que punto, visita los diversos objetos y volver a
unirlos mentalmente como una sola ENTIDAD conceptual es demasiado esfuerzo. Nosotros perder
los conexión Entre los modelo y diseño. Mejor práctica es para utilizar EJB en un más grande
grano que ENTIDAD objetos, reduciendo los Abajo de separando niveles Pero grano fino los objetos
son con frecuencia separar dentro niveles además.

Por ejemplo, me encontré con estos problemas en un proyecto bastante inteligente en el que

cada conceptual objeto era Realmente roto dentro cuatro niveles Cada división tenido a bien
razón fundamental. los primer nivel era a datos persistencia capa, manejo cartografía y acceso
para los relacional base de datos. Entonces vino a capa que manejado conducta intrínseco para
los objeto en todos situaciones Próximo era a capa por

superponiendo específico de la aplicación funcionalidad. los cuatro nivel era quiso decir como a
público interfaz, desacoplada de toda la implementación a continuación. Este esquema era un
poco demasiado complicado, pero las capas fueron bien definido y allí era algunos orden para los
separación de preocupaciones. Nosotros pudo han vivido conectando mentalmente todos los
objetos físicos que forman un objeto conceptual. La separación de aspectos incluso ayudado en
veces. En especial, teniendo los persistencia código movido eliminado a lote de desorden.

Pero en cima de todos esta, los estructura requerido cada nivel para ser en a separar colocar de
paquetes, nombrado de acuerdo para a convención que identificado los nivel. Esta tomó arriba
todos los mental habitación por fraccionamiento. Como resultado, los desarrolladores de
dominios tendieron a evitar crear demasiados MÓDULOS (cada uno de los cuales se multiplicó
por cuatro) y difícilmente siempre cambió una, porque los esfuerzo de refactorización a MÓDULO
era prohibitivo. Peor, caza abajo todos los datos y conducta que definido a único conceptual la
clase era entonces difícil (conjunto con los indirecta de los capas) que desarrolladores no lo hizo
tener mucho mental espacio izquierda para pensar sobre modelos los solicitud era entregado,
pero con un anémico modelo de dominio que básicamente cumplía con los requisitos de acceso
a la base de datos de la aplicación, con comportamiento suministrado por a pocos SERVIC IOS . los
aprovechar que deberían tener derivado desde IMPULSADO POR MODELO DISEÑO estaba limitado
porque el código no revelaba de forma transparente el modelo y permitía que un desarrollador
trabajara con eso.

Este tipo de diseño de marco intenta abordar dos problemas legítimos. Una es la división lógica.
de preocupaciones: Una objeto posee responsabilidad por base de datos acceso, otro por negocio
lógica, y entonces en. Tal divisiones hacer eso más fácil para comprender los marcha de cada
nivel (en a nivel técnico) y facilitar el cambio de capas. El problema es que no se reconoce el
costo del desarrollo de aplicaciones. Este no es un libro sobre diseño de marcos, por lo que no
entraré en alternativas. soluciones para que problema, pero ellos hacer existe. Y incluso si allí
fueron no opciones, eso sería mejor para comercio apagado estas beneficios por a más cohesivo
dominio capa.

La otra motivación para estos esquemas de empaque es la distribución de niveles. Est o
podría ser un fuerte argumento si los código Realmente tiene desplegado en diferente
servidores. Generalmente eso lo hace no. la flexibilidad es buscado sólo en caso eso es
necesario. En a proyecto que esperanzas para obtener aprovechar desde IMPULSADO POR
MODELO DISEÑO , esta sacrificio es también estupendo a no ser que eso resuelve un inmediato y
prensado problema.

Los esquemas de empaque elaborados técnicamente imponen dos costos.


Si los del marco fraccionamiento convenciones jalar aparte los elementos
implementar el conceptual objetos, los código no más extenso revela los modelo.

Ahí es solamente entonces mucho fraccionamiento a mente lata puntada espalda juntos, y si
los estructura lo usa todos arriba, los dominio desarrolladores perder sus capacidad para
pedazo los modelo dentro significativo piezas.

Eso es mejor para mantenerse cosas sencillo. Escoger a mínimo de técnico fraccionamiento
normas que están esencial para el entorno técnico o realmente ayuda al desarrollo. Por ejemplo,
desacoplar datos complicados persistencia código desde los conductual aspectos de los objetos
mayo hacer refactorización más fácil.

A no ser que allí es a verdadero intención para distribuir código en diferente
servidores, mantenerse todos los código que implementos a único conceptual objeto en
los mismo MÓDULO , si no los mismo objeto.

Nosotros pudo tener venir para los mismo conclusión por dibujo en los viejo estándar, "elevado
cohesión/bajo acoplamiento". Las conexiones entre un "objeto" que implementa la lógica de
negocio y el responsable por base de datos acceso están entonces extenso que los
acoplamiento es muy elevado.

Ahí están otro trampas donde estructura diseño o sólo convenciones de a empresa o proyecto

puede socavar IMPULSADO POR MODELO DISEÑO por oscureciendo los natural cohesión de los
dominio objetos, pero El fondo línea es los mismo. los restricciones, o sólo los grande número de
requerido paquetes, normas fuera de utilizar de otro embalaje esquemas que están adaptado
para los necesidades de los dominio modelo.

Utilizar embalaje para separar los dominio capa desde otro código. De lo contrario, salir
como mucho

libertad como posible para los dominio desarrolladores para paquete los dominio
objetos en formas en que apoyo sus modelo y diseño opciones

Una excepción surge Cuándo código es generado establecido en a declarativo diseño (discutido
en Capítulo 10 ). En ese caso, los desarrolladores no necesitan leer el código y es mejor
ponerlo en un lugar separado. paquete entonces que eso es fuera de los manera, no
desordenando arriba los diseño elementos los desarrolladores en realidad tener para trabajo
con.

Modularidad se convierte más crítico como los diseño obtiene más grande y más complejo.
Esta sección presenta los básico consideraciones Mucho de Parte IV , "Estratégico Diseño,"
proporciona enfoques al embalaje y rotura abajo grande modelos y diseños, y formas para
dar gente focal puntos guiar _ comprensión.

Cada concepto del modelo de dominio debe reflejarse en un elemento de implementación. Las
ENTIDADES , OBJETOS DE VALOR , y sus asociaciones, junto con unos SERVIC IOS de dominio y los
MÓDULOS organiza dores , son puntos de correspondencia directa entre la implementación y el
modelo. los objetos, punteros, y recuperación mecanismos en los implementación deber mapa
para elementos del modelo directamente, obviamente. Si ellos hacer no, limpio arriba los código,
ir espalda y cambiar el modelo, o ambas cosas.

Resista la tentación de agregar algo a los objetos del dominio que no se relacione
estrechamente con los conceptos que representan. Estos elementos de diseño tienen su
trabajo que hacer: expresan el modelo. Ahí están otro relacionado con el dominio
responsabilidades que deber ser transportado fuera y otro datos que debe ser administrado en
pedido para hacer los sistema trabajo, pero ellos no pertenecer en estas objetos. En Capítulo 6 ,
discutiré algunos objetos de soporte que cumplen con las responsabilidades técnicas de la capa
de dominio, tal como definiendo base de datos búsquedas y encapsulando complejo objeto
creación.

los cuatro patrones en esta capítulo proveer los edificio bloques por un objeto modelo. Pero
DISEÑO IMPULSADO POR MODELO no significa necesariamente forzar todo en un molde de objeto.
También hay otros paradigmas de modelos compatibles con herramientas, como los motores
de reglas. Los proyectos tienen que hacer concesiones pragmáticas entre ellos. Estas otras
herramientas y técnicas son medios para el fin de un MODELO IMPULSADO. DISEÑO , no
alternativas para eso.


[ Equipo LiB ]

[ Equipo LiB ]


Paradigmas de modelado
IMPULSADO POR MODELOS DISEÑO llamadas por un implementación tecnología en melodía con los
especial paradigma de modelado siendo aplicado. Muchos tal paradigmas tener estado
experimentado con, pero solamente a pocos han sido ampliamente utilizados en la práctica. En
la actualidad, el paradigma dominante es el diseño orientado a objetos, y la mayoría complejo
proyectos estas días colocar fuera para utilizar objetos. Esta predominio posee venir sobre por
una variedad de razones: algunos factores son intrínsecos a los objetos, algunos son
circunstanciales y otros se derivan desde los ventajas que venir desde amplio uso sí mismo.


Por qué predomina el paradigma del objeto

Muchos de los razones equipos escoger los objeto paradigma están no técnico, o incluso
intrínseco a los objetos Pero Correcto fuera de los portón, objeto modelado lo hace Huelga a
agradable equilibrio de sencillez y sofisticación.

Si a modelado paradigma es también esotérico, no suficiente desarrolladores voluntad Maestro
eso, y ellos voluntad utilizar mal Si los miembros no técnicos del equipo no pueden captar al
menos los rudimentos del paradigma, no entenderán el modelo y se perderá el LENGUAJE
UBIC UO . Los fundamentos de orientado a objetos diseño parecer para venir naturalmente para
más gente. Aunque algunos desarrolladores extrañar los sutilezas de modelado, incluso no
tecnólogos lata seguir a diagrama de un objeto modelo.

Aún, sencillo como los concepto de objeto modelado es, eso posee probado Rico suficiente para
capturar dominio importante conocimiento. Y eso posee estado soportado desde los comienzo
por desarrollo herramientas que permitió un modelo para ser expresado en software.

Hoy, el paradigma del objeto también tiene algunas ventajas c ircunstanciales significativas
derivadas de la madurez. y extendido adopción. Sin maduro infraestructura y herramienta
apoyo, a proyecto puede desviarse hacia la I+D tecnológica, retrasando y desviando recursos
del desarrollo de aplicaciones y introduciendo técnico riesgos Algunos tecnologías no jugar bien
con otros, y puede que no sea posible integrarlos con soluciones estándar de la industria, lo
que obliga al equipo a reinventar las utilidades comunes. Pero a lo largo de los años, muchos
de estos problemas se han resuelto para objetos, o hecha irrelevante por extendido adopción.
(Ahora eso caídas en otro enfoques para integrar con convencional objeto tecnología.) Más nuevo
tecnologías proveer los medio para integrar con las populares plataformas orientadas a objetos.
Esto facilita la integración e incluso deja abierta la opción de mezclando en subsistemas
establecido en otro modelado paradigmas (cual nosotros voluntad discutir luego en esto
capítulo).

Igualmente importante es la madurez de la comunidad de desarrolladores y la propia cultura
del diseño . Es posible que un proyecto que adopte un paradigma novedoso no pueda
encontrar desarrolladores con experiencia en la tecnología, o con los experiencia para crear
eficaz modelos en los elegido paradigma. Eso mayo No ser factible para educar desarrolladores
en a razonable Monto de hora porque los patrones por haciendo el más de los paradigma y
tecnología no he gelificado aún. Quizás los pioneros de los campo son efectivos pero no he aún
publicado sus perspectivas en un accesible formulario.

Objetos están ya entendido por a comunidad de miles de desarrolladores, proyecto gerentes y
todos los otro especialistas involucrado en proyecto trabajo.

A historia desde un orientado a objetos proyecto de solamente a década atrás ilustra los riesgos
de trabajando en un inmaduro paradigma. En los temprano 1990, esta proyecto comprometido
sí mismo para varios innovador

tecnologías, incluso utilizar de un orientado a objetos base de datos en a grande escala. Eso era
excitante. La gente del equipo les decía con orgullo a los visitantes que estábamos
implementando la base de datos más grande que esta tecnología haya soportado jamás.
Cuando me uní al proyecto, diferentes equipos elaboraban diseños orientados a objetos y
almacenaban sus objetos en la base de datos sin esfuerzo. Pero poco a poco la realización se
arrastró sobre nosotros que nosotros fueron comenzando para absorber a significativo fracción de
los la capacidad de la base de datos—¡con datos de prueba! La base de datos real sería
docenas de veces más grande. La transacción real volumen haría ser docenas de veces más
alto. Era eso imposible para utilizar esta tecnología para esto ¿solicitud? Tenido nosotros usado
eso ¿incorrectamente? Nosotros fueron fuera de nuestro profundidad.

Afortunadamente, nosotros fueron poder para traer sobre los equipo una de a puñado de gente
en los mundo con las habilidades para sacarnos del problema. Dijo su precio y lo pagamos.
Había tres fuentes de los problema. Primero, los fuera de la plataforma infraestructura
proporcionó con los base de datos simplemente no lo hizo escala arriba para nuestro
necesidades. Segundo, almacenamiento de de grano fino objetos convertido fuera para ser
mucho más costoso de lo que habíamos pensado. En tercer lugar, partes del modelo de
objetos tenían tal maraña de interdependencias que contención se convirtió a problema con a
relativamente pequeña número de transacciones simultáneas.

Con la ayuda de este experto contratado, mejoramos la infraestructura. El equipo, ahora
consciente del impacto de de grano fino objetos, comenzó para encontrar modelos que trabajó
mejor con esta tecnología. Todos de nosotros profundizado nuestro pensando sobre los
importancia de limitando los web de relaciones en a modelo, y nosotros comenzó aplicar esta
nuevo comprensión para haciendo mejor modelos con más desacoplamiento entre de cerca
interrelacionado agregados

Se perdieron varios meses en esta recuperación, además de los prim eros meses en un camino
fallido. Y este no había sido el primer revés del equipo derivado de la inmadurez del elegido
tecnologías y nuestro propio carecer de experiencia con los asociado aprendiendo curva.
Tristemente, este proyecto finalmente se redujo y se volvió bastante conservador. Hasta el día
de hoy utilizan las tecnologías exóticas, pero por cautelosamente alcance aplicaciones que
probablemente no De Verdad beneficio desde ellos.

A década luego, orientado a objetos tecnología es relativamente maduro. Más común
infraestructura las necesidades pueden ser reunió con fuera de la plataforma soluciones que
tener estado usado en los campo. Misión crítica herramientas viene de importante vendedores,
con frecuencia múltiple vendedores, o desde estable fuente abierta proyectos Muchos de estas
piezas de infraestructura en sí mismas se usan lo suficientemente ampliamente como para que
haya una base de personas que ya comprender ellos, como bien como libros explicando ellos, y
entonces adelante. los limitaciones de estos establecidos tecnologías están equitativamente bien
entendido, entonces que experto equipos están menos probable extralimitarse.

Otro interesante modelado paradigmas sólo no tener esta madurez. Algunos están también duro
para master y nunca se utilizará fuera de pequeñas especialidades. Otros tienen potencial,
pero la infraestructura técnica es todavía irregular de o tembloroso, y pocos gente comprender
los sutilezas de creando buenos modelos por ellos. Estas mayo venir de años, pero ellos están no
Listo por más proyectos

Esta es la razón por la que, por el momento, la mayoría de los proyectos que intentan el
DISEÑO IMPULSADO POR MODELOS son sabios al usar diseños orientados a objetos. tecnología
como los centro de sus sistema. Ellos voluntad no ser bloqueado dentro un sistema solo de
objetos: debido a que los objetos se han convertido en la corriente principal de la industria,
las herramientas de integración están disponibles para conectar con casi ninguna otro
tecnología en Actual utilizar.

Aún esta no significar que gente deberían restringir ellos mismos para objetos Siempre. De viaje
con la multitud brinda cierta seguridad, pero no siempre es el camino a seguir. Los modelos de
objetos abordan una gran cantidad de problemas prácticos de software, pero hay dominios que
no son naturales para modelar como discretos. paquetes de encapsulado conducta. Para
ejemplo, dominios que están intensamente matemático o que están dominado por global lógico
razonamiento hacer no encajar bien dentro los orientado a objetos paradigma.

No objetos en un objeto Mundo

Un modelo de dominio no tiene que ser un modelo de objetos. Hay DISEÑOS IMPULSADOS POR
MODELOS implementados en Prolog, por ejemplo, con un modelo formado por reglas y hechos
lógicos. Paradigmas modelo tener estado concebido para habla a cierto formas gente me gusta
para pensar sobre dominios Entonces el modelos de esos dominios están conformado por los
paradigma. los resultado es a modelo que se ajusta al paradigma para que pueda ser
implementado efectivamente en las herramientas que soportan ese estilo de modelado.

Lo que los dominante modelo paradigma mayo ser en a proyecto, allí están ligado para ser partes
de el dominio que haría ser mucho más fácil para Rápido en algunos otro paradigma. Cuándo allí
están sólo a pocos anómalos elementos de a dominio que de lo contrario obras bien en a
paradigma, desarrolladores lata En Vivo con un pocos incómodo objetos en un de lo contrario
consistente modelo. (O, en los otro extremo, si los mayor parte del dominio del problema se
expresa más naturalmente en otro paradigma particular, puede hacer sentido para cambiar
paradigmas en total y escoger a diferente implementación plataforma.) Pero cuando las partes
principales del dominio parecen pertenecer a diferentes paradigmas, es intelectualmente
atractivo modelar cada parte en un paradigma que encaje, utilizando una combinación de
conjuntos de herramientas para respaldar la implementación. Cuando la interdependencia es
pequeña, se puede encapsular un subsistema en el otro paradigma, tal como a complejo
Matemáticas cálculo que simplemente necesidades para ser llamado por un objeto.
Otro veces los diferente aspectos están más entrelazados, tal como Cuándo los Interacción de los
los objetos dependen en algunos matemático relaciones

Esto es lo que motiva la integración en sistemas de objetos de componentes que no son
objetos, como motores de reglas comerciales y mot ores de flujo de trabajo. La mezcla de
paradigmas permite a los desarrolladores modelar conceptos particulares en el estilo que mejor
se adapte. Además, la mayoría de los sistemas deben utilizar alguna infraestructura técnica no
objeto, más comúnmente base s de datos relacionales. Pero hacer un modelo coherente que se
extiende paradigmas es duro, y haciendo los secundario herramientas coexistir es Complicado.
Cuando los desarrolladores hipocresía claramente ver a coherente modelo encarnado en los
software, IMPULSADO POR MODELO DISEÑO puede ir fuera los ventana, incluso como esta mezcla
aumenta los necesitar por eso.


Apegarse al D ISEÑO IMPULSADO POR MODELOS al mezclar paradigmas

Normas motores voluntad atender como un ejemplo de a tecnología a veces mezclado dentro un
aplicación orientada a objetos desarrollo proyecto. A rico en conocimientos dominio modelo
probablemente contiene explícito reglas, todavía los objeto paradigma carece específico
semántica por declarando normas y sus interacciones. Aunque las reglas se pueden modelar
como objetos, y con frecuencia se logran con éxito, la encapsulación de objetos hace que sea
difícil para aplicar global normas que cruzar los entero sistema. Normas motor tecnología es
atractivo porque promete proporcionar una forma más natural y declarativa de definir las
reglas, lo que permite que el paradigma de las reglas se mezcle con el paradigma de los
objetos. El paradigma lógico está bien desarrollado. y poderoso, y eso parece me gusta a bien
complemento para los fortalezas y debilidades de objetos

Pero las personas no siempre obtienen lo que esperan de los motores de reglas. Algunos
productos simplemente no funcionan muy bien. Algunos carecer a sin costura vista que lata
show los relación de modelo conceptos que se ejecutan entre los dos entornos de
implementación. Un resultado común es una aplicación dividida en dos: un sistema de
almacenamiento de datos estáticos que utiliza objetos y una aplicación de procesamiento de
reglas ad hoc. que posee perdió casi todos conexión con los objeto modelo.

Eso es importante para Seguir para pensar en condiciones de modelos tiempo trabajando con
normas. los equipo posee encontrar a único modelo que lata trabajo con ambas cosas
implementación paradigmas. Esta es no fácil, pero debería ser posible si los normas motor
permite expresivo implementación. De lo contrario, los datos y las reglas se desconectan. Las
reglas en el motor terminan más como pequeños programas que como conceptos normas en
los dominio modelo. Con ajustado, claro relaciones Entre los normas y los objetos, los sentido
de ambas cosas piezas es retenido.

Sin a sin costura ambiente, eso caídas en los desarrolladores para destilar a modelo hecha arriba
de claro, fundamental conceptos para sostener los entero diseño juntos.

La herramienta más efectiva para mantener las partes juntas es un LENGUAJE UBIC UO robusto
que subyace los entero heterogéneo modelo. Consecuentemente aplicar nombres en los dos
ambientes y haciendo ejercicio esos nombres en los UBIC UO IDIOMA lata ayuda puente los
brecha.

Esta es a tema que merece a libro de su propio. los meta de esta sección es simplemente para
show que no es necesario para dar arriba IMPULSADO POR MODELO DISEÑO , y que eso es valor
los esfuerzo para mantenerse eso.

Aunque a DISEÑO IMPULSADO POR MODELOS lo hace no tener para ser objeto orientado, eso lo hace
depender en teniendo una implementación expresiva de las construcciones del modelo, ya sean
objetos, reglas o flujos de trabajo. Si la herramienta disponible no facilita esa expresividad,
reconsidere la elección de herramientas. un inexpresivo implementación niega los ventaja de los
extra paradigma.

Aquí están cuatro normas de pulgar por mezclando no objeto elementos dentro a
predominantemente sistema orientado a objetos :

no pelear los implementación paradigma _ hay siempre otro manera para pensar
sobre un dominio. Encontrar modelo conceptos que encajar los paradigma.

Inclinarse en los ubicuo lenguaje _ Incluso Cuándo allí es no riguroso conexión Entre
herramientas, muy consistente utilizar de idioma lata mantenerse partes de los diseño
desde divergente

No se obsesione con UML . A veces, la fijación en una herramienta, como la
diagramación UML, lleva gente para distorsionar los modelo para hacer eso encajar qué
lata fácilmente ser dibujado. Para ejemplo, UML hace tener algunos caracteristicas por
representando restricciones, pero ellos están no siempre suficiente.
Algunos otro estilo de dibujo (quizás convencional por los otro paradigma), o sencillo
descripciones en inglés, son mejores que la tortuosa adaptación de un estilo de dibujo
destinado a una determinada visión de objetos.

Ser escéptico _ Es los herramienta De Verdad tracción su ¿peso? Sólo porque usted tener
algunos normas, eso no necesariamente significar usted necesitar los gastos generales de
a normas motor. Normas lata ser expresado como objetos, quizás a poco menos
pulcramente; múltiple paradigmas complicar asuntos enormemente.

Antes tomando en los carga de mezclado paradigmas, los opciones dentro de los dominante
paradigma debiera ser exhausto. Incluso aunque algunos dominio conceptos no regalo ellos
mismos como obvio objetos, a menudo se pueden modelar dentro del paradigma. El capítulo 9
discutirá el modelado de no convencionales tipos de conceptos utilizando objeto tecnología

El paradigma relacional es un caso especial de mezcla de paradigmas. La tecnología no objeto
más común, los relacional base de datos es además más íntimamente relacionados para los
objeto modelo que otros componentes, porque actúa como el almacén persistente de los datos
que componen los propios objetos. almacenar objeto datos en relacional bases de datos
voluntad ser discutido en Capítulo 6 , a lo largo de con el muchos otro retos de los objeto la vida
ciclo.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo Seis. El ciclo de vida de un
objeto de dominio
Cada objeto tiene un ciclo de vida. Un objeto nace, probablemente pasa por varios estados y
finalmente muere—siendo cualquiera archivado o eliminado De curso, muchos de estas están
sencillo, objetos transitorios, creados con una simple llamada a su constructor, utilizados en
algunos cálculos y luego abandonados al recolector de basura. No hay necesidad de complicar
tales objetos. Pero otros objetos tienen vidas más largas, no todos los cuales se gastan en la
memoria activa. tienen complejas interdependencias con otro objetos. Ellos ir a través de
cambios de estado para cual invariantes aplicar. La gestión de estos objetos presenta desafíos
que pueden descarrilar fácilmente un intento de DISEÑO IMPULSADO POR MODELOS .


Figura 6.1. El ciclo de vida de un objeto de dominio

Los desafíos se dividen en dos categorías.

1. mantenimiento integridad a lo largo de los la vida ciclo

2. Prevención los modelo desde consiguiendo inundado por los complejidad de gerente los la vida
ciclo

Esta capítulo voluntad habla a estas cuestiones a través de Tres patrones. Primero, AGREGADOS
apretar arriba el modelo en sí mismo al definir claramente la propiedad y los límites, evitando
una red caótica y enredada de objetos. Esta patrón es crucial para manteniendo integridad en
todos etapas de los la vida ciclo.

Próximo, los enfocar vueltas para los comenzando de los la vida ciclo, utilizando SUERTE para
crear y reconstituir objetos complejos y AGREGADOS , manteniendo encapsulada su estructura
interna. Finalmente, REPOSITORIOS habla a los medio y final de los la vida ciclo, Proporcionar los
medio de hallazgo y

recuperar objetos persistentes mientras se encapsula la inmensa infraestructura involucrada.

Aunque los REPOSITORIOS y FÁBRIC AS no provienen del dominio, tienen significado papeles en
los dominio diseño. Estas construcciones completo los IMPULSADO POR MOD ELO DISEÑO al dar
nosotros accesible manejas en los modelo objetos.

Modelado AGREGADOS y agregando SUERTE y REPOSITORIOS para los diseño da nosotros los
capacidad manipular los objetos del modelo sistemáticamente y en unidades significativas a lo
largo de su ciclo de vida. Los AGREGADOS marcan el alcance dentro del cual deben mantenerse
los invariantes en cada etapa del proceso. la vida ciclo. FÁBRICAS _ y REPOSITORIOS funcionar en
AGREGADOS , encapsulando los complejidad de específico la vida ciclo transiciones


[ Equipo LiB ]

[ Equipo LiB ]


agregados

minimalista diseño de asociaciones ayuda simplificar el recorrido y límite los explosión de
relaciones un poco, pero más negocio dominios están entonces interconectado que nosotros
todavía final arriba rastreo largo, profundo caminos a través de objeto referencias En a
manera, esta enredo refleja los realidades de los mundo, que raramente obliga nosotros con
afilado límites. Eso es a problema en a software diseño.

Digamos que estaba eliminando un objeto Persona de una base de datos. Junto con la persona,
vaya un nombre, fecha de nacimiento, y trabajo descripción. Pero qué sobre los ¿habla a? Ahí
pudo ser otro gente en los misma dirección. Si usted Eliminar los habla a, esos Persona objetos
voluntad tener referencias para a eliminado objeto. Si usted salir eso, usted acumular chatarra
direcciones en los base de datos. Automático basura colección podría eliminar las direcciones
basura, pero esa solución técnica, incluso si está disponible en su sistema de base de datos,
ignora a básico modelado asunto.

Incluso Cuándo considerando un aislado transacción, los web de relaciones en a típico objeto
modelo da no claro límite para los potencial efecto de a cambiar. Eso es no práctico para actualizar
cada objeto en el sistema, sólo en caso allí es algunos dependencia.

los problema es agudo en a sistema con concurrente acceso para los mismo objetos por
múltiple clientela. Con muchos usuarios consultando y actualizando diferentes objetos en el
sistema, tenemos que evitar cambios simultáneos en objetos interdependientes. Conseguir
mal el alcance tiene graves consecuencias.

Es difícil garantizar la consistencia de los cambios a los objetos en un modelo con
complejos asociaciones. invariantes necesitar para ser mantenido que aplicar para
cercanamente relacionados

grupos de objetos, no solo objetos discretos. Sin embargo, los esquemas de bloqueo
cautelosos hacen que varios usuarios interfieran entre sí sin sentido y dejen
inutilizable el sistema.

Poner otro manera, cómo hacer nosotros saber donde un objeto hecha arriba de otro objetos
comienza y termina? En cualquier sistema con persistente almacenamiento de datos, allí deber
ser a alcance por a transacción que cambia datos, y a manera de manteniendo los consistencia
de los datos (que es, manteniendo su invariantes).
Las bases de datos permiten varios esquemas de bloqueo y se pueden programar pruebas.
Pero estas soluciones ad hoc desviar atención fuera desde los modelo, y pronto usted están
espalda para hackear y esperando.

En hecho, hallazgo a equilibrado solución para estas tipos de problemas llamadas por Más adentro
comprensión de el dominio, esta hora extensión para factores tal como los frecuencia de cambiar
Entre los instancias de ciertas clases. Necesitamos encontrar un modelo que deje los puntos de
alta contención más sueltos e invariantes estrictos más apretado

Aunque esta problema superficies como técnico dificultades en base de datos actas, eso es
arraigado en el modelo—en su carecer de definido límites. A solución impulsado desde los
modelo voluntad hacer los modelo más fácil para comprender y hacer los diseño más fácil para
comunicar. Como los modelo es revisado, eso guiará nuestro cambios para los implementación.

esquemas tener estado desarrollado por definiendo propiedad relaciones en los modelo. los
siguiente simple pero riguroso sistema, destilado desde esos conceptos, incluye a colocar de
normas por implementar transacciones que modificar los objetos y sus dueños [1]

[1] David Siegel ideó y usó este sistema en proyectos en la década de 1990, pero no lo ha publicado.

Primero necesitamos una abstracción para encapsular referencias dentro del modelo. Un
AGREGADO es un grupo de objetos asociados que tratamos como una unidad a efectos de
cambios de datos. Cada AGREGADO tiene una raíz y un límite. El límite define lo que está dentro
del AGREGADO . La raíz es una ENTIDAD única y específica contenida en el AGREGADO . La raíz es el
único miembro del AGREGADO al que se permite que los objetos externos contengan referencias,
aunque los objetos dentro del límite mayo sostener referencias para cada otro. ENTIDADES otro
que los raíz tener local identidad, pero eso identidad necesidades para ser distinguible solamente
dentro de los AGREGADO , porque no fuera de objeto puede alguna vez ver eso fuera de los
contexto de los raíz ENTIDAD .

Un modelo de automóvil podría usarse en software para un taller de reparación de
automóviles. El automóvil es una ENTIDAD con identidad: nosotros querer para distinguir que
coche desde todos otro carros en los mundo, incluso muy similares Nosotros lata utilizar los
vehículo identificación número por esta, a único identificador asignado para cada nuevo coche.
Nosotros puede que querer para pista los rotación historia de los llantas a través de los cuatro
rueda posiciones. Nosotros puede que querer para saber los kilometraje y huella tener puesto de
cada neumático. Para saber cual neumático es cual, las llantas también deben estar
identificadas como ENTIDADES . Pero es muy poco probable que nos importe la identidad de
esos neumáticos fuera del contexto de ese automóvil en particular. Si reemplazamos los
neumáticos y enviamos los viejos para a reciclaje planta, cualquiera nuestro software voluntad
no más extenso pista ellos en todos, o ellos voluntad volverse anónimo miembros de a montón
de llantas. No una voluntad cuidado sobre sus rotación historias Más para el punto, incluso
mientras están conectados al automóvil, nadie intentará consultar el sistema para encontrar un
particular neumático y luego ver cual coche eso es en. Ellos voluntad consulta los base de datos
para encontrar a coche y entonces pregunta eso por a transitorio referencia para los llantas. Por
lo tanto, los coche es los raíz ENTIDAD de los AGREGADO cuyo límite encierra también los
neumáticos. Por otro lado, los bloques de motor tienen números de serie grabados en ellos y
están a veces rastreado independientemente de los coche. En algunos aplicaciones, el motor
puede que ser los raíz de su propio AGREGADO .


Figura 6.2. Referencias de objetos e identidades locales versus
globales

Las invariantes, que son reglas de consistencia que deben mantenerse siempre que cambien
los datos, implicarán relaciones Entre miembros de los AGREGADO . Ninguna regla que se extiende
AGREGADOS voluntad No ser previsto para ser A hoy en todos veces. A través de evento
Procesando, lote Procesando, o otros mecanismos de actualización, otras dependencias se
pueden resolver dentro de un tiempo específico. Pero las invariantes aplicado dentro de un
AGREGAR voluntad ser forzado con los terminación de cada transacción.


Figura 6.3. UN AGREGADO invariantes

Ahora, para traducir que conceptual AGREGAR dentro los implementación, nosotros necesitar a
colocar de normas Aplicar para todos actas.

ENTIDAD raíz tiene una identidad global y es responsable en última instancia de verificar los
invariantes.

Raíz ENTIDADES tener global identidad. E NTIDADES en el interior los Perímetro tener local
identidad, único único dentro de los AGREGADO .

Nada fuera de los AGREGAR Perímetro lata sostener a referencia para cualquier cosa en el
interior, excepto al raíz ENTIDAD . los raíz ENTIDAD lata mano referencias para los interno
ENTIDADES para otro objetos, pero esos objetos lata utilizar ellos solamente
transitoriamente, y ellos mayo no sostener en para los referencia. los raíz mayo mano a
Copiar de a VALOR OBJETO para otro objeto, y eso no importar qué

le sucede, porque es solo un VALOR y ya no tendrá ninguna asociación con el
AGREGAR.

Como a corolario para los anterior regla, solamente AGREGAR raíces lata ser adquirido
directamente con base de datos consultas Todos otro objetos deber ser fundar por el
recorrido de asociaciones.

Los objetos dentro de AGGREGATE pueden contener referencias a otras raíces AGGREGATE .

A Eliminar operación deber retirar todo dentro de los AGREGAR Perímetro en una vez. (Con
basura colección, esta es fácil. Porque allí están no fuera de referencias para cualquier cosa
pero la raíz, Eliminar los raíz y todo demás voluntad ser recogido.)

Cuándo a cambiar para ninguna objeto dentro de los AGREGAR Perímetro es comprometido,
todos invariantes de El entero AGREGAR deber ser satisfecho.

Agrupe las ENTIDADES y los OBJETOS DE VALOR en AGREGADOS y defina los límites
alrededor de cada uno. Escoger una ENTIDAD para ser los raíz de cada AGREGADO , y
control todos acceso para los objetos en el interior los Perímetro a través de los raíz.
Permitir externo objetos para sostener referencias a la raíz solamente. Las referencias
transitorias a los miembros internos se pueden pasar para su uso dentro a único
operación solamente. Porque los raíz control S acceso, eso no poder ser sorprendido
por los cambios en los componentes internos. Este arreglo hace que sea práctico
aplicar todas las invariantes para los objetos en el AGREGADO y para el AGREGADO como
un todo en cualquier cambio de estado.

Eso lata ser muy servicial para tener a técnico estructura que permite usted para declarar
AGREGADOS y luego automáticamente lleva fuera los cierre esquema y entonces adelante. Sin que
asistencia, los el equipo debe tener los autodisciplina para estar de acuerdo en los AGREGADOS y
código consecuentemente con ellos.


Ejemplo
Orden de compra Integridad

Considere las complicaciones posibles en un sistema de órdenes de compra simplificado.


Figura 6.4. Un modelo para un sistema de órdenes de
compra.

Esta diagrama presenta a bonito convencional vista de a compra pedido (CORREOS), roto abajo
dentro artículos de línea, con un invariante regla que los suma de los línea elementos hipocresía
exceder los límite por los correos como entero. los existente implementación posee Tres
interrelacionado problemas.

1.

1. Invariante cumplimiento _ Cuándo a nuevo línea ít es agregado, los correos cheques los
total y se marca a sí mismo inválido si un ít empuja eso sobre los límite. Como bien ver,
esta es no adecuado proteccion.

2. Cambiar gestión _ Cuándo los correos es eliminado o archivado, los línea elementos están
tomado a lo largo, pero los modelo da no Guia en donde para detener siguiente los
relaciones Ahí es también confusión sobre los impacto de cambiando los parte precio en
diferente veces.

3. Intercambio los base de datos Múltiple usuarios están creando contención problemas en los
base de datos.

Múltiples usuarios ingresarán y actualizarán varios PO al mismo tiempo, y tenemos que
evitarlos. desde ensuciar arriba cada otros trabajo. Vamos comienzo con a muy sencillo
estrategia, en cual nosotros bloquear cualquier objeto que un usuario comience a editar hasta
que ese usuario confirme la transacción. Entonces, cuando George está editando línea ít 001,
amanda no poder acceso eso. Ella lata editar ninguna otro línea ít en ninguna otro orden de
compra (incluyendo otro elementos en los correos Jorge es trabajando en).


Figura 6.5. La condición inicial de la orden de compra almacenada
en la base de datos

Objetos voluntad ser leer desde los base de datos y instanciado en cada del usuario memoria
espacio. Ahí se pueden ver y editar. Los bloqueos de la base de datos se solicitarán solo cuando
comience una edición. Así que tanto George y amanda lata trabajo al mismo tiempo, como largo
como ellos Quédate fuera desde cada otros elementos. Todo es bien . . . Hasta que ambas cosas
Jorge y amanda comienzo trabajando en separar línea elementos en los mismo CORREOS.


Figura 6.6. Ediciones simultáneas en transacciones distintas

Todo mira multa para ambas cosas usuarios y para sus software porque ellos ignorar cambios
para otras partes de los base de datos que suceder durante los transacción, y ninguno de los dos
bloqueado línea ít es envuelto en los otro del usuario cambiar.

Figura 6.7. La orden de compra resultante viola el límite de
aprobación (invariante roto).

Después de que ambos usuarios hayan guardado sus cambios, se almacena una orden de
compra en la base de datos que viola el invariante de los dominio modelo. Un importante
negocio regla posee estado roto. Y nadie incluso sabe.

Claramente, cierre a único línea ít no es un adecuado salvaguardia. Si en lugar de nosotros
tenido bloqueado un toda la orden de compra en a hora, los problema haría tener estado
prevenido


Figura 6.8. Bloquear todo el pedido de compra permite aplicar el
invariante.

los programa voluntad no permitir esta transacción para ser salvado Hasta que amanda posee
resuelto los problema, tal vez por levantamiento los límite o por eliminando a guitarra. Esta
mecanismo previene los problema, y eso mayo ser a multa solución si trabajo es principalmente
untado ampliamente al otro lado de muchos PO. Pero si múltiple las personas normalmente
trabajan simultáneamente en diferentes elementos de línea de una orden de compra grande,
entonces este bloqueo se volverá engorroso.

Incluso suponiendo muchas OP pequeñas, hay otras formas de violar la afirmación. Considere
eso

"parte." Si alguien cambió los precio de a trombón tiempo amanda era agregando para su
orden, no que violar los invariante ¿también?

Vamos tratar cierre los parte en adición para los completo CORREOS. Aquí está qué sucede
Cuándo Jorge, amanda y Sam están trabajando en diferente PO:


Figura 6.9. El bloqueo demasiado cauteloso interfiere con el trabajo
de las personas.

los inconveniencia es montaje, porque allí es a lote de contención por los instrumentos (las
partes"). Y luego:


Figura 6.10. Punto muerto

Esos tres estarán esperando un rato.

En este punto podemos comenzar a mejorar el modelo incorporando el siguiente conocimiento
de la

1.

negocio:

1. Partes están usado en muchos órdenes de compra (elevado contención).

2. Ahí están menos cambios para partes que allí están para PO.

3. Cambios para parte precios hacer no necesariamente propagar para existente PO. Eso
depende en los tiempo de a precio cambiar relativo para los estado de los CORREOS.

Punto 3 es particularmente obvio Cuándo nosotros considerar archivado órdenes de compra que
tener ya estado entregado. Ellos deberían, de curso, show los precios como de los hora ellos
fueron lleno, bastante que Actual precios.


Figura 6.11. El precio se copia en el artículo de línea. Ahora se puede
aplicar una invariante GGREGATE .

Una implementación consistente con este modelo garantizaría la relación invariable de PO y sus
artículos, mientras que los cambios en el precio de una parte no tendrían que afectar
inmediatamente a los artículos que hacen referencia. eso. más amplio consistencia normas pudo
ser dirigido en otro formas. Para ejemplo, los el sistema podría regalo a cola de elementos con
anticuado precios para los usuarios cada día, entonces ellos pudo actualizar o eximir a cada uno.
Pero esto no es una invariante que deba cumplirse en todo momento. Al hacer que la
dependencia de las líneas de pedido en las partes sea más relajada, evitamos la contención y
reflejamos mejor las realidades del negocio. Al mismo tiempo, el endurecimiento de la relación
entre la orden de compra y sus partidas garantiza que un importante negocio regla voluntad ser
seguido.

El AGREGADO impone una propiedad de la OP y sus artículos que es consistente con la práctica
comercial. los creación y supresión de a correos y elementos están naturalmente atado juntos,
tiempo los creación y supresión de partes es independiente.


AGREGADOS marca apagado los alcance dentro de cual invariantes tener para ser mantenido en
cada escenario del ciclo de vida. Los siguientes patrones, FÁBRIC AS y REPOSITORIOS , operan
sobre AGREGADOS , encapsulando los complejidad de específico la vida ciclo transiciones . . .

[ Equipo LiB ]

[ Equipo LiB ]


Suerte

Cuándo creación de un objeto, o un completo AGREGADO , se convierte Complicado o revela
también mucho de El interno estructura, SUERTE proveer encapsulación


Gran parte del poder de los objetos descansa en la intrincada configuración de sus
componentes internos y sus asociaciones. Un objeto deberían ser destilado Hasta que nada
restos que lo hace no relacionar para su significado o apoyo su papel en interacciones. Esta
mediana edad ciclo responsabilidad es mucho. Problemas aumentar de la sobrecarga a complejo
objeto con responsabilidad por su propio creación.

A coche motor es un intrincado pedazo de maquinaria, con docenas de partes colaborando para
llevar a cabo la responsabilidad del motor: hacer girar un eje. Uno podría imaginarse tratando
de diseñar un bloque de motor que pudiera sujetar un conjunto de pistones e insertarlos en sus
cilindros, bujías que encontrarían sus casquillos y se atornillarían solas. Pero parece poco
probable que una máquina tan complicada pueda ser como de confianza o como eficiente como
nuestro típico motores están. En lugar de, nosotros aceptar que otra cosa ensamblará las piezas.
Quizás sea un mecánico humano o quizás sea un robot industrial. Tanto el robot como el
humano son en realidad más complejos que el motor que ensamblan. los trabajo de montaje
partes es completamente no relacionado para los trabajo de hilado a eje. los ensambladores
función solamente durante los creación de los coche—tú no necesitar a robot o a mecánico contigo
Cuándo estás conduciendo. Porque carros están Nunca ensamblado y impulsado en los mismo
hora, allí no es valor en combinatorio ambas cosas de estas funciones dentro los mismo
mecanismo. Igualmente, montaje un complejo compuesto objeto es a trabajo que es mejor
apartado desde lo que trabajo que objeto voluntad tengo que hacer Cuándo eso es finalizado.

Pero cambiando responsabilidad para los otro interesado fiesta, los cliente objeto en los solicitud,
Guías a problemas aún peores. El cliente sabe qué trabajo debe hacerse y confía en los objetos
del dominio. para llevar fuera los necesario cálculos Si los cliente es previsto para armar los
objetos de dominio que necesita, debe saber algo sobre la estructura interna del objeto. Para
hacer cumplir todas las invariantes que se aplican a la relación de partes en el objeto de
dominio, el cliente debe saber algunos de los objetos normas. Incluso vocación constructores
parejas los cliente para los clases concretas de los objetos eso es edificio. No cambiar para los
implementación de los dominio objetos lata hacerse sin cambiando los cliente, haciendo
refactorización más difícil.

A cliente tomando en objeto creación se convierte innecesariamente Complicado y desdibuja su
responsabilidad. se incumple los encapsulación de los dominio objetos y los AGREGADOS siendo
creado. Incluso peor aún, si el cliente es parte de la capa de aplicación, entonces las
responsabilidades se han filtrado fuera de la capa de dominio en total. Esta ajustado
acoplamiento de los solicitud para los detalles específicos de los implementación se quita más de
los beneficios de abstracción en los dominio capa y hace continuo cambios Cada vez más caro.

La creación de un objeto puede ser una operación importante en sí misma, pero las
operaciones de ensamblaje complejas no se ajustan a la responsabilidad de los
objetos creados. Combinar tales responsabilidades lata Produce desgarbado diseños
que están duro para comprender. Haciendo la construcción directa del cliente enturbia
el diseño del cliente, viola la encapsulación del ensamblado objeto o AGREGADO , y
demasiado parejas los cliente para los implementación de los creado objeto.

La creación de objetos complejos es responsabilidad de la capa de dominio, pero esa tarea no
pertenece a los objetos que expresan el modelo. Hay algunos casos en los que la creación y el
montaje de un objeto corresponde para a hito significativo en los dominio, tal como "abierto a
Banco cuenta." Pero objeto creación y montaje generalmente tener no sentido en los dominio;
ellos están a necesidad de la implementación. Para resolver esta problema, nosotros tener para
agregar construcciones para los dominio diseño que no son ENTIDADES, OBJETOS DE VALOR o
SERVIC IOS . Esta es una desviación del capítulo anterior, y es importante para hacer los punto
claro: Nosotros están agregando elementos para los diseño que hacer no corresponden a las
cualquier cosa en los modelo, pero ellos están sin embargo parte de los dominio capas
responsabilidad.

Cada orientado a objetos idioma proporciona a mecanismo por creando objetos (constructores en
Java y C++, ejemplo creación clase métodos en Charla, por ejemplo), pero allí es a necesitar por
mas abstracto construcción mecanismos que están desacoplado desde los otro objetos. A
programa elemento cuyo responsabilidad es los creación de otro objetos es llamado a FÁBRIC A .


Figura 6.12. Interacciones básicas con una FÁBRICA

Sólo como los interfaz de un objeto deberían encapsular su implementación, por lo tanto
permitiendo a cliente para usar el comportamiento del objeto sin saber cómo funciona, una
FÁBRIC A encapsula el conocimiento necesario para crear a complejo objeto o AGREGADO . Eso
proporciona un interfaz que refleja los objetivos de El cliente y un resumen vista de los creado
objeto.

Por lo tanto:

Transferir la responsabilidad de crear instancias de objetos complejos y AGREGADOS a
un objeto, cual mayo sí mismo tener no responsabilidad en los dominio modelo pero es
todavía parte de los dominio diseño. Proveer un interfaz que encapsula todos complejo
ensamblaje y que no requiere que el cliente haga referencia a las clases concretas de
los objetos que se están instanciado Crear completo AGREGADOS como a pedazo, hacer
cumplir sus invariantes


Hay muchas formas de diseñar FÁBRIC AS . Varios patrones de creación con fines especiales (
MÉTODO DE FÁBRIC A , FÁBRICA ABSTRACTA y C ONSTRUC TOR ) se trataron minuciosamente en
Gamma et al. 1995 _ Este libro principalmente explorado patrones por los más difícil objeto
construcción problemas. los punto aquí no es profundizar en el diseño de FÁBRIC AS , sino más
bien mostrar el lugar de las FÁBRIC AS como importante componentes de a dominio diseño.
Adecuado utilizar de SUERTE lata ayuda mantenerse a DISEÑO IMPULSADO POR MODELOS en pista.

Los dos requisitos básicos para cualquier buena FÁBRIC A son

1. Cada método de creación es atómico y aplica todas las invariantes del objeto creado o
AGGREGATE . A FÁBRIC A deberían solamente ser poder para Produce un objeto en a
consistente estado. Para una ENTIDAD, esto significa la creación de todo el AGREGADO ,
con todos los invariantes satisfechos, pero probablemente con Opcional elementos todavía
para ser agregado. Para un inmutable VALOR OBJETO , esta significa que todos atributos están
inicializado para sus correcto final estado. Si los interfaz hace eso posible solicitar un objeto
que no se puede crear correctamente, entonces se debe generar una excepción o alguna
otro mecanismo deberían ser invocado que voluntad garantizar que no incorrecto regreso
valor es posible.

2. los FÁBRIC A deberían ser abstraído para los escribe deseado, bastante que los hormigón
clase(s) creada(s). los sofisticado FÁBRIC A patrones en Gama et Alabama. 1995 ayuda
con esta.


Elegir F ACTORIAS y sus sitios

Generalmente discurso, usted crear a fábrica para construir algo cuyo detalles usted querer
para esconder, y tu lugar los FÁBRIC A donde usted querer los control para ser. Estas decisiones
generalmente girar alrededor de AGREGADOS .

Por ejemplo, si necesita agregar elementos dentro de un AGGREGATE preexistente , puede crear un
FAC TORY MÉTODO en los raíz de los AGREGADO . Esta se esconde los implementación de los interior
de el AGREGADO desde ninguna externo cliente, tiempo donación los raíz responsabilidad por
asegurando los integridad de la AGREGAR como elementos están agregado, como mostrado en
Figura 6.13 en los próximo página.


Figura 6.13. UN MÉTODO DE FÁBRICA encapsula la expansión de un
AGREGADO .

Otro ejemplo sería colocar un MÉTODO DE FÁBRIC A en un objeto que está estrechamente
relacionado con el desove otro objeto, aunque eso no propio los producto una vez eso es creado.
Cuándo los datos y posiblemente los normas de una objeto están muy dominante en los creación
de un objeto, esta guarda la extracción de información del generador para usarla en otro lugar
para crear el objeto. también se comunica los especial relación Entre los engendrador y los
producto.

En Figura 6.14 , los Comercio Pedido es no parte de los mismo AGREGAR como los Corretaje
Cuenta porque, para empezar, pasará a interactuar con la aplicación de ejecución de
operaciones, donde la Casa de Bolsa Cuenta haría solamente ser en los manera. Incluso
entonces, eso parece natural para dar los Control de la Cuenta de Corretaje sobre la creación
de Órdenes de Comercio . La cuenta de corretaje contiene información que se integrará
en la orden comercial (comenzando con su propia identidad) y contiene reglas que rigen
qué operaciones están permitidas. También podríamos beneficiarnos al ocultar la
implementación de Trade Order . Por ejemplo, podría refactorizarse en una jerarquía, con
subclases separadas para Orden de compra y Orden de venta . La FÁBRIC A evita que el
cliente se acople para los hormigón clases


Figura 6.14. UN MÉTODO DE FÁBRICA genera una ENTIDAD que no es parte
del mismo AGREGADO .

A FÁBRIC A es muy estrechamente acoplado para su producto, entonces a FÁBRIC A deberían ser
adjunto solamente para un objeto que tiene una estrecha relación natural con el producto.
Cuando hay algo que queremos ocultar, ya sea la implementación concreta o la gran
complejidad de la construcción, pero no parece haber un anfitrión natural, debemos crear un
objeto FAC TORY o SERVIC IO dedicado . Una FÁBRIC A independiente generalmente produce un
AGREGADO completo , entregando una referencia a la raíz y asegurando que se cumplan las
invariantes del AGREGADO del producto. Si un objeto interior a un AGREGADO necesita a FÁBRIC A , y
los AGREGAR raíz es no a razonable casa por eso, luego ir

adelante y hacer a ser único FÁBRIC A . Pero respeto los normas limitando acceso dentro de un
AGREGADO , y hacer Por supuesto allí están solamente transitorio referencias para los producto
desde fuera de los AGREGAR.


Figura 6.15. Una FÁBRICA independiente construye AGGREGATE .


Cuando un constructor es todo lo que necesita

He visto lejos también mucho código en cual todos instancias están creado por directamente
vocación clase constructores, o cualquiera que sea el nivel primitivo de creación de instancias
para el lenguaje de programación. La introducción de FÁBRIC AS tiene grandes ventajas y, en
general, está infrautilizada. Sin embargo, hay momentos en que la franqueza de un co nstructor
lo convierte en la mejor opción. F AC TORIAS puede en realidad oscurecer simples objetos que no
utilizar polimorfismo.

Las compensaciones favorecen a un constructor público desnudo en las siguientes
circunstancias.


los clase es los escribe. Eso es no parte de ninguna interesante jerarquía, y eso
no es usado polimórficamente por implementar un interfaz.

El cliente se preocupa por la implementación, quizás como una forma de elegir una
ESTRATEGIA .

Todos de los atributos de los objeto están disponible para los cliente, entonces que no
objeto creación se anida en el interior los constructor expuesto para los cliente.

La construcción no es complicada.

A público constructor deber seguir los mismo normas como a FÁBRIC A : Eso deber ser un
atómico operación que satisface todos invariantes de los creado objeto.

Evitar vocación constructores dentro de constructores de otro clases Constructores deberían ser
muerto sencillo. Montajes complejos, especialmente de ÁRIDOS , requieren FÁBRIC AS . El umbral
para elegir usar a poco FÁBRIC A MÉTODO no es elevado.

La biblioteca de clases de Java ofrece ejemplos interesantes. Todas las colecciones
implementan interfaces que se desacoplan los cliente desde los hormigón implementación. Aún
ellos están todos creado por directo llamadas a los constructores. A FÁBRIC A pudo tener
encapsulado los colección jerarquía. los FÁBRIC A _ Los métodos podrían haber permitido que un
cliente solicitara las características que necesitaba, con la FÁBRIC A seleccionando el apropiado
clase para instanciar Código que creado colecciones haría ser más expresivo, y nueva colección
clases pudo ser instalado sin rotura cada Java programa.

Pero allí es a caso en favor de los hormigón constructores Primero, los elección de implementación
lata ser sensible al rendimiento para muchas aplicaciones, por lo que una aplicación puede
querer el control. (Aún así, realmente inteligente FÁBRIC A pudo acomodar tal factores.) De todos
modos, allí no son muy muchos clases de colección, entonces eso no es que Complicado para
escoger.

los resumen colección tipos preservar algunos valor en despecho de los carecer de a FÁBRIC A
porque de sus patrones de uso. Muy a menudo, las colecciones se crean en un lugar y se usan
en otro. Esto significa que el cliente que finalmente usa la colección (agregando, eliminando y
recuperando su contenido) puede todavía hablar para los interfaz y ser desacoplado desde los
implementación. los selección de una clase de colección generalmente recae en el objeto que posee la colección, o
en FAC TORY del objeto propietario .


Diseñando el Interfaz

Cuándo diseño los método firma de a FÁBRIC A , ya sea ser único o FÁBRIC A MÉTODO , Mantener
dentro mente estas dos puntos.

Cada operación deber ser atómico _ Tú tener para pasar en todo necesario para crear a
producto completo en a único Interacción con los FÁBRIC A . Tú además tener para decidir qué
voluntad suceder si la creación falla, en los evento que algunos invariante no es satisfecho.
Tú pudo lanzar un excepción o simplemente devolver un valor nulo. Para ser consistente,
considere adoptar un estándar de codificación para fallas en FÁBRIC AS .

los FÁBRICA voluntad ser acoplado para su argumentos _ Si usted están no Cuidado en tu
selección de parámetros de entrada, usted lata crear a de rata nido de dependencias los la
licenciatura de acoplamiento voluntad depender de qué usted hacer con los argumento. Si
eso es simplemente atascado dentro los producto, tienes creado un modesto dependencia.
Si usted están cosecha partes fuera de los argumento para utilizar en los construcción, la
acoplamiento obtiene más apretado

los más seguro parámetros están esos desde a más bajo diseño capa. Incluso dentro de a capa,
allí tender para se Natural Estratos con más básico objetos que están usado por más alto nivel
objetos. (Tal capas voluntad ser discutido en diferente formas en Capítulo 10 , "Flexible Diseño,"
y otra vez en Capítulo 16 , " Estructura a gran escala ").

Otro bien elección de parámetro es un objeto que es cercanamente relacionados para los
producto en los modelo, entonces que no nuevo dependencia es siendo agregado. En los más
temprano ejemplo de a Compra Pedido artículo , el FÁBRIC A MÉTODO toma a Catalogar Parte
como un argumento, cual es un esencial asociación para el artículo _ Esta agrega a directo
dependencia Entre los Compra Pedido clase y los parte _ Pero estos tres objetos forman un
grupo conceptual cerrado. De todos modos, el AGREGADO de la orden de compra ya hacía
referencia a la pieza . Entonces, dar control a la raíz AGREGADO y encapsular los AGREGADOS
interno estructura es a bien compensación.

Utilizar los resumen escribe de los argumentos, no sus hormigón clases los FÁBRIC A es acoplado
para el hormigón clase de los productos; eso lo hace no necesitar para ser acoplado para
hormigón parámetros además.


¿Hacia dónde va la lógica invariante?

UNA FÁBRIC A es responsable de garantizar que se cumplan todos los invariantes para el objeto
o AGREGADO que crea; aún usted deberían siempre pensar dos veces antes de quitando los
normas aplicar para un objeto fuera de eso objeto. los FÁBRIC A lata delegar invariante
comprobación para los producto, y esta es con frecuencia mejor.

Pero SUERTE tener a especial relación con sus productos Ellos ya saber sus interno del producto
estructura, y sus completo razón por siendo implica los implementación de sus producto. En
algunas circunstancias, existen ventajas al colocar la lógica invariable en la FÁBRIC A y reducir
el desorden en el producto. Esto es especialmente atractivo con las reglas AGREGATE (que
abarcan muchos objetos). Es especialmente poco atractivo con MÉTODOS DE FÁBRIC A adjuntos a
otros objetos de dominio .

Aunque en principio invariantes aplicar en los final de cada operación, con frecuencia los
transformaciones permitidas para los objeto lata Nunca traer ellos dentro jugar. Ahí puede
que ser a regla que se aplica para la asignación de los identidad atributos de un ENTIDAD . Pero
después creación que identidad es inmutable. V ALOR OBJETOS están completamente
inmutable. Un objeto no necesitar para llevar alrededor lógica que nunca se aplicará en su
vida activa. En tales casos, la FÁBRIC A es un lugar lógico para poner invariantes, acuerdo los
producto más simple


F ACTORIAS DE ENTIDAD VERSUS F ACTORIAS DE OBJETO DE VALOR

Las FÁBRIC AS DE ENTIDAD difieren de las FÁBRICAS DE OBJETOS DE VALOR de dos maneras. LOS
OBJETOS DE V ALOR son Inmutables; los producto llega fuera completo en su final formulario.
Entonces los FÁBRIC A operaciones tener para permitir por a descripción completa de los producto.
E NTIDAD SUERTE tender para llevar sólo los esencial atributos requerido para hacer a válido
AGREGADO . Detalles lata ser agregado luego si ellos están no requerido por un invariante.

Luego allí están los cuestiones involucrado en asignando identidad para un ENTIDAD : irrelevante
para a VALOR OBJETO . Como puntiagudo fuera en Capítulo 5 , un identificador lata cualquiera ser
asignado automáticamente por los programa o suministrado desde el exterior, típicamente por
el usuario. Si se va a rastrear la identidad de un cliente por teléfono número, luego que teléfono
número deber obviamente ser aprobado en como un argumento a la FÁBRIC A . Cuándo los
programa es asignando un identificador, los FÁBRIC A es a bien lugar para control eso. Aunque los
real Generacion de a único seguimiento IDENTIFICACIÓN es típicamente hecho por a base de
datos "secuencia" o otro infraestructura mecanismo, los FÁBRIC A sabe qué para pedir por y donde
para poner eso.


Reconstitución de objetos almacenados

Arriba para esta punto, los FÁBRIC A posee jugó su parte en los muy comenzando de un objetos
la vida ciclo. En algún momento, la mayoría de los objetos se almacenan en bases de datos o
se transmiten a través de una red, y pocos base de datos tecnologías conservar los objeto
personaje de sus contenido. Más métodos de transmisión aplanar un objeto dentro un incluso
más limitado presentación. Por lo tanto, recuperación requiere potencialmente complejo
proceso de reensamblar los partes dentro a En Vivo objeto.

A FÁBRIC A usado por reconstitución es muy similar para una usado por creación, con dos grandes
diferencias.

1. Un ENTIDAD FÁBRICA usado por reconstitución lo hace no asignar a nuevo seguimiento
identificación _ Para hacer entonces perdería los continuidad con los objetos anterior
encarnación. Entonces identificando atributos deber ser parte de los aporte parámetros en
a FÁBRICA reconstituyendo a almacenado objeto.

2. UNA FÁBRICA que reconstituye un objeto manejará la violación de un invariante de
manera diferente . Durante la creación de a nuevo objeto, a FÁBRICA deberían
simplemente obstáculo Cuándo un invariante no es reunió, pero puede ser necesaria una
respuesta más flexible en la reconstitución. Si un objeto ya existe en alguna parte en los
sistema (tal como en los base de datos), esta hecho no poder ser ignorado Aún nosotros
tampoco puede ignorar la violación de la regla. Tiene que haber alguna estrategia para
reparar tales inconsistencias, lo que puede hacer que la reconstitución sea más
desafiante que la creación de nuevos objetos.

Cifras 6.16 y 6.17 (en los próximo página) show dos tipos de reconstitución. Tecnologías de
mapeo de objetos mayo proveer algunos o todos de estas servicios en los caso de base de
datos reconstitución, que es conveniente. Cuando sea allí es expuesto complejidad en
reconstituyendo un objeto de otro medio, los FÁBRIC A es a bien opción.

Figura 6.16. Reconstituir una ENTIDAD recuperada de un relacional

base de datos


Figura 6.17. Reconstituir una ENTIDAD transmitida como XML

Para suma arriba, los acceso puntos por creación de instancias deber ser identificado, y sus
alcance deber estar definido explícitamente. Ellos mayo simplemente ser constructores, pero
con frecuencia allí es a necesitar por a más abstracto o elaborar ejemplo creación mecanismo.
Esta necesitar presenta nuevo construcciones dentro los diseño: FÁBRIC AS . F AC TORIAS por lo
general no expresan ninguna parte del modelo, sin embargo, son parte del dominio diseño que
ayuda mantenerse los expresando modelo objetos afilado.

A FÁBRIC A encapsula los la vida ciclo transiciones de creación y reconstitución. Otro transición que
expone técnico complejidad que lata pantano los dominio diseño es los transición para y del
almacenamiento Esta transición es los responsabilidad de otro dominio diseño construir, los
REPOSITORIO .


[ Equipo LiB ]

[ Equipo LiB ]


Repositorios

Asociaciones permitir nosotros para encontrar un objeto establecido en su relación para otro.
Pero nosotros deber tener un comienzo punto por a el recorrido para un ENTIDAD o VALOR en los
medio de su la vida ciclo.


Para hacer cualquier cosa con un objeto, usted tener para sostener a referencia para eso. Cómo
hacer usted obtener que ¿referencia? Una forma es crear el objeto, ya que la operación de
creación devolverá una referencia al nuevo objeto. A segundo manera es para atravesar un
asociación. Tú comienzo con un objeto usted ya saber y pregunta eso por un asociado objeto.
Ninguna orientado a objetos programa es yendo para hacer a lote de esta, y estos enlaces dar
objeto modelos mucho de sus expresivo energía. Pero usted tener para obtener que primero
objeto.

De hecho, me encontré con un proyecto una vez en el que el equipo intenta ba, en un abrazo
entusiasta del DISEÑO IMPULSADO POR MODELOS , ¡hacer todos los accesos a los objetos mediante
la creación o el recorrido! Sus objetos residían en una base de datos de objetos y razonaron
que las relaciones conceptuales existentes proporcionarían todos necesario asociaciones. Ellos
necesario solamente para analizar ellos suficiente, haciendo sus todo el dominio modelo cohesivo.
Esta autoimpuesto limitación forzado ellos para crear sólo los tipo de enredo sin fin que nosotros
tener estado difícil para evitar sobre los último pocos capítulos, con Cuidado implementación de
ENTIDADES y solicitud de AGREGADOS . los equipo miembros no lo hizo palo con esta estrategia
largo, pero nunca lo reemplazaron con otro enfoque coherente. Improvisaron soluciones ad hoc
y se convirtió menos ambicioso.

Pocos siquiera pensarían en este enfoque, y mucho menos se sentirían tentados por él, porque
almacenan la mayor parte de

sus objetos en relacional bases de datos Esta almacenamiento tecnología hace eso natural para
utilizar los tercera manera de consiguiendo a referencia: Ejecutar a consulta para encontrar los
objeto en a base de datos establecido en su atributos, o encontrar los constituyentes de un
objeto y luego reconstituir eso.

A base de datos búsqueda es globalmente accesible y hace eso posible para ir directamente para
ninguna objeto. Ahí No es necesario que todos los objetos estén interconectados, lo que nos
permite mantener la web de objetos manejable. Ya sea proporcionar un recorrido o depender
de una búsqueda se convierte en una decisión de diseño, compensando el desacoplamiento de
la búsqueda contra la cohesión de la asociación. Si el cliente objeto sostener a colección de
todos los Pedidos ¿metido? O deberían los Pedidos ser fundar en la base de datos, con a
búsqueda en los Cliente IDENTIFICACIÓN ¿campo? los Correcto combinación de búsqueda y
asociación hace los diseño comprensible.

Desafortunadamente, desarrolladores no generalmente obtener para pensar mucho sobre tal
diseño sutilezas, porque ellos están natación en los mar de mecanismos necesario para jalar
apagado los truco de almacenar un objeto y trayendo eso atrás y finalmente quitando eso desde
almacenamiento.

Ahora, desde un punto de vista técnico, la recuperación de un objeto almacenado es realmente
un subconjunto de la creación, porque los datos de la base de datos se utilizan para ensamblar
nuevos objetos. De hecho, el código que normalmente posee para ser escrito hace eso duro
para olvidar esta realidad. Pero conceptualmente, esta es los medio de El la vida ciclo de un
ENTIDAD . A Cliente objeto lo hace no representar a nuevo cliente sólo porque nosotros
almacenamos eso en a base de datos y recuperado eso. Para mantenerse esta distinción en
mente, I referir para los creación de un ejemplo desde almacenado datos como reconstitución _

El objetivo del diseño basado en dominios es crear un mejor software centrándose en un
modelo del dominio en lugar de la tecnología. En el momento en que un desarrollador ha
construido una consulta SQL, pasada eso para a consulta Servicio en los infraestructura capa,
adquirido a resultado colocar de mesa filas, sacó el necesario información fuera, y aprobado eso
para a constructor o FÁBRIC A , los modelo enfocar es desaparecido. Eso se convierte natural para
pensar de los objetos como contenedores por los datos que los consultas proveer, y el entero
diseño turnos hacia a procesamiento de datos estilo. los detalles de los tecnología variar, pero el
problema restos que los cliente es relación comercial con tecnología, bastante que modelo
conceptos.
Infraestructura tal como METADATOS C ARTOGRAFÍA C APAS (Cazador de aves 2002) ayuda a
estupendo trato, por haciendo más fácil el conversión de los consulta resultado dentro objetos,
pero los desarrollador es todavía pensando sobre mecanismos técnicos, no el dominio. Peor aún,
como el código del cliente utiliza la base de datos directamente, los desarrolladores se ven
tentados a pasar por alto las características del modelo, como los AGREGADOS, o incluso la
encapsulación de objetos, en lugar de tomar y manipular directamente los datos que necesitan.
Cada vez se incrustan más reglas de dominio en consulta código o simplemente perdió. Objeto
bases de datos hacer eliminar los conversión problema, pero busca mecanismos están
generalmente todavía mecánico, y desarrolladores están todavía tentado para tomar cualquier
objeto ellos querer.

A cliente necesidades a práctico medio de adquisidor referencias para Preexistente
dominio objetos. Si los infraestructura hace eso fácil para hacer entonces, los
desarrolladores de los cliente mayo agregar más transitable asociaciones, confuso los
modelo. En los otro mano, ellos mayo utilizar consultas para extraer los datos exactos
que necesitan de la base de datos, o para extraer algunos objetos específicos en lugar
de navegar desde las raíces AGREGADAS . La lógica del dominio se traslada a las
consultas y al cliente código, y los ENTIDADES y VALOR OBJETOS volverse mero datos
contenedores los La gran complejidad técnica de aplicar la mayoría de la
infraestructura de acceso a la base de datos inunda rápidamente el código del cliente,
lo que lleva a los desarrolladores a simplificar la capa de d ominio, lo que hace que el
modelo irrelevante.

Dibujo en los diseño principios discutido entonces lejos, nosotros lata reducir los alcance de los
objeto problema de acceso algo, asumiendo que nosotros encontrar a método de acceso que
mantiene los modelo enfocar lo suficientemente afilado para emplear esos principios Para

arrancadores, nosotros necesitar no preocupación Nosotros mismos con objetos transitorios.
Los transitorios (típicamente OBJETOS DE VALOR ) viven vidas breves, se utilizan en la operación
del cliente que creó ellos y luego descartado. Nosotros además necesitar no consulta acceso por
persistente objetos que son mas conveniente para encontrar por el recorrido. Para ejemplo, los
habla a de a persona pudo ser solicitado de los Persona objeto. Y más importante, ninguna
objeto interno para un AGREGAR es prohibido desde acceso excepto por el recorrido desde los
raíz _

Persistente VALOR OBJETOS están generalmente fundar por el recorrido desde algunos ENTIDAD que
hechos como los raíz del AGREGADO que los encapsula. De hecho, un acceso de búsqueda global a
un VALOR a menudo no tiene sentido, porque encontrar un VALOR por sus propiedades sería
equivalente a crear una nueva instancia con esas propiedades. Sin embargo, hay excepciones.
Por ejemplo, cuando estoy planeando un viaje en línea, I a veces salvar a pocos futuro itinerarios
y regreso luego para Seleccione una para libro. Esos itinerarios están VALORES (si allí fueron dos
hecha arriba de los mismo vuelos, I haría no cuidado que era cual), pero ellos tener estado
asociado con mi usuario nombre y recuperado por me intacto.
Otro caso haría ser un "enumeración," Cuándo a escribe posee a estrictamente limitado,
predeterminado colocar de posible valores. Global acceso para VALOR OBJETOS es mucho menos
común que por ENTIDADES , aunque, y si usted encontrar usted necesitar para búsqueda los base
de datos por a Preexistente VALOR , eso es valor considerando la posibilidad que tienes De Verdad
tiene un ENTIDAD cuyo identidad usted no he Reconocido.

Desde esta discusión, eso es claro que más objetos deberían no ser accedido por a global
búsqueda. Sería ser agradable por los diseño para comunicar esos que hacer.

Ahora el problema se puede reformular con mayor precisión.

A subconjunto de persistente objetos deber ser globalmente accesible a través de a
búsqueda establecido en los atributos del objeto. Dicho acceso es necesario para
las raíces de AGREGADOS que no son convenientes para alcanzar por el recorrido.
Ellos están generalmente ENTIDADES , a veces VALOR OBJETOS con complejo interno
estructura, y a veces enumerado VALORES . Proporcionar el acceso a otros objetos
enturbia distinciones importantes. Las consultas de base de datos gratuitas pueden
violar la encapsulación de objetos de dominio y AGREGADOS . Exposición de la
infraestructura técnica y base de datos acceso mecanismos complica los cliente y
oscurece el modelo IMPULSADO DISEÑO.

Ahí es a balsa de tecnicas por relación comercial con los técnico retos de base de datos acceso. Los
ejemplos incluyen encapsular SQL en OBJETOS DE C ONSULTA o traducir entre objetos y tablas con
C APAS DE MAPEO DE METADATOS (Fowler 2002). Las FÁBRIC AS pueden ayudar a reconstituir objetos
almacenados (como se discutió luego en esta capítulo). Estas y muchos otro tecnicas ayuda
mantenerse a tapa en complejidad.

Pero aun así, toma nota de lo que se ha perdido. Ya no estamos pensando en conceptos en
nuestro dominio. modelo. Nuestro código voluntad no ser comunicado sobre los negocio; eso
voluntad ser manipulando la tecnología de recuperación de datos. El patrón REPOSITORIO es un
marco conceptual simple para encapsular esos soluciones y traer espalda nuestro modelo
enfocar.

A REPOSITORIO representa todos objetos de a cierto escribe como a conceptual colocar
(generalmente emulado). actúa me gusta a colección, excepto con más elaborar consultando
capacidad. Objetos de los tipo apropiado están agregado y remoto, y los maquinaria detrás los
REPOSITORIO inserciones ellos o los elimina desde los base de datos. Esta definición reúne a
cohesivo colocar de responsabilidades por proporcionar acceso para los raíces de AGREGADOS
desde temprano la vida ciclo a través de los final.

Los clientes solicitan objetos del REPOSITORIO utilizando métodos de consulta que seleccionan
objetos según los criterios especificados por el cliente, generalmente el valor de ciertos
atributos. El REPOSITORIO recupera el objeto solicitado, encapsulando la maquinaria de consultas
a bases de datos y mapeo de metadatos. R EPOSITORIOS lata implementar a variedad de
consultas que Seleccione objetos establecido en lo que criterio el cliente requiere Ellos lata
además regreso resumen información, tal como a contar de cómo muchos instancias cumplen con
algunos criterios. Incluso pueden devolver cálculos resumidos, como el total de todas las
coincidencias. objetos de algunos numérico atributo.


Figura 6.18. UN REPOSITORIO haciendo una búsqueda de un
cliente

UN REPOSITOR quita una gran carga del cliente, que ahora puede hablar con un simple,
revelador de intenciones interfaz, y pedir por qué eso necesidades en condiciones de los modelo.
Para apoyo todos esta requiere mucho de complejo técnico infraestructura, pero los interfaz es
sencillo y conceptualmente conectado al dominio modelo.

Por lo tanto:

Para cada escribe de objeto que necesidades global acceso, crear un objeto que lata
proveer la ilusión de una colección en memoria de todos los objetos de ese tipo.
Configure el acceso a través de una conocida interfaz global. Proporcione métodos
para agregar y eliminar objetos, que encapsularán los real inserción o eliminación de
datos en los datos Tienda. Proveer métodos que seleccionan objetos en función de
algunos criterios y devuelven objetos completamente instanciados o colecciones de
objetos cuyos valores de atributos cumplen con los criterios, encapsulando así el real
almacenamiento y consulta tecnología. Proveer REPOSITORIOS solamente por AGREGAR
raíces que realmente necesitan acceso directo. Mantenga al cliente enfocado en el
modelo, delegando todo el objeto almacenamiento y acceso para los REPOSITORIOS .


R EPOSITORIOS tienen muchas ventajas, incluidas las siguientes:


Ellos regalo clientela con a sencillo modelo por obtención persistente objetos y gerente sus
vidas ciclo.

Ellos desacoplar solicitud y dominio diseño desde persistencia tecnología, múltiple estrategias
de base de datos, o incluso múltiple datos fuentes.

Comunican decisiones de diseño sobre el acceso a objetos.

Ellos permitir fácil sustitución de a ficticio implementación, por utilizar en pruebas
(típicamente usando un en memoria colección).


consultando un REPOSITORIO _

Todos repositorios proveer métodos que permitir a cliente para solicitud objetos pareo algunos
criterios, pero hay es a rango de opciones de cómo para diseño esta interfaz.

los más fácil REPOSITORIO para construir posee codificado consultas con específico parámetros
Estas las consultas pueden ser varias: recuperar una ENTIDAD por su identidad (proporcionada
por casi todos los REPOSITORIOS ); solicitar una colección de objetos con un valor de atributo
particular o una combinación compleja de parámetros; seleccionando objetos establecido en
valor rangos (tal como fecha rangos); y incluso realizando algunos calculos que otoño dentro de
los general responsabilidad de a REPOSITORIO (especialmente dibujo en operaciones soportado
por los subyacente base de datos).

Aunque más consultas regreso un objeto o a colección de objetos, eso además encaja dentro de
los concepto para devolver algunos tipos de cálculos de resumen, como un recuento de
objetos o una suma de un atributo numérico que era destinado a por los modelo para ser
contado


Figura 6.19. Consultas codificadas en un REPOSITORIO simple

codificado consultas lata ser construido en cima de ninguna infraestructura y sin a lote de
inversión, porque ellos hacer sólo qué algunos cliente haría tener tenido para hacer de
todos modos.

En proyectos con a lote de consultando, a REPOSITORIO estructura lata ser construido que
permite más consultas flexibles. Esto requiere un personal familiarizado con la tecnología
necesaria y cuenta con la gran ayuda de un apoyo infraestructura.

Un enfoque particularmente adecuado para generalizar REPOSITORIOS a través de un marco es
usar ESPEC IFIC ACIÓN basada en consultas A ESPEC IFIC ACIÓN permite a cliente para describir (que
es, especificar) qué quiere sin preocupación por cómo eso voluntad ser adquirido. En los proceso,
un objeto que lata Realmente realizar los selección es creado. Esta patrón voluntad ser discutido
en profundidad en Capítulo 9 _


Figura 6.20. Una ESPECIFICACIÓN flexible y declarativa de criterios de
búsqueda en un REPOSITOR sofisticado

los ESPEC IFIC ACIÓN -basado consulta es elegante y flexible. Dependiente en los infraestructura
disponible, puede ser un marco modesto o prohibitivamente difícil. Rob Mee y Edward Hieatt
discuten más de los técnico cuestiones involucrado en diseño tal REPOSITORIOS en Cazador de aves
2002.

Incluso a REPOSITORIO diseño con flexible consultas deberían permitir por los adición de
especializado codificado consultas Ellos puede que ser conveniencia métodos que encapsular un
utilizado a menudo consulta o una consulta que no regreso los objetos ellos mismos, tal como a
matemático resumen de objetos seleccionados. Marcos que no permitir por tal contingencias
tender para distorsionar los dominio diseño o conseguir pasado por alto por desarrolladores


El código del cliente ignora la implementación del REPOSITORIO ; Los
desarrolladores hacen No

La encapsulación de la tecnología de persistencia permite que el cliente sea muy simple,

completamente desacoplado desde los implementación de los REPOSITORIO . Pero como es con
frecuencia los caso con encapsulación,

los desarrollador deber comprender qué es sucediendo bajo los capucha. los rendimiento las
implicaciones pueden ser extremo Cuándo REPOSITORIOS están usado en diferente formas o
trabajo en diferente formas.

Kyle Brown me contó la historia de cuando me llamaron para una aplicación de fabricación
basada en WebSphere que era siendo arrollado fuera para producción. los sistema era
misteriosamente corriendo fuera de memoria después de unas horas de uso. Kyle revis ó el
código y encontró el motivo: en un momento, ellos fueron resumiendo algunos información
sobre cada ít en los planta. los desarrolladores había hecho esto usando una consulta llamada
"todos los objetos", que instanciaba cada uno de los objetos y luego seleccionaba los bits que
necesitaban. ¡Este código tuvo el efecto de traer toda la base de datos a la memoria a la vez!
El problema no había aparecido en las pruebas debido a la pequeña cantidad de datos de
prueba.

Esta es un obvio no no, pero mucho más sutil descuidos lata regalo Igualmente grave
problemas. Desarrolladores necesitar para comprender los trascendencia de utilizando
encapsulado conducta. Que lo hace no tengo para significar detallado familiaridad con los
implementación. bien diseñado componentes lata ser caracterizado. (Esta es una de los
principal puntos de Capítulo 10 , "Flexible Diseño.")

Como era discutido en Capítulo 5 , los subyacente tecnología mayo constreñir tu modelado
opciones Por ejemplo, una base de datos relacional puede imponer un límite práctico a las
estructuras de objetos de composición profunda. En sólo los mismo manera, allí deber ser
realimentación para desarrolladores en ambas cosas direcciones Entre los utilizar de los
REPOSITORIO y los implementación de su consultas


Implementando un REPOSITORIO _

Implementación voluntad variar muy, dependiente en los tecnología siendo usado por persistencia
y la infraestructura que tiene. Lo ideal es ocultar todo el funcionamiento interno del cliente
(aunque no de los desarrollador de los cliente), entonces que cliente código voluntad ser los
mismo ya sea los datos es almacenado en un objeto base de datos, almacenado en a relacional
base de datos, o simplemente sostuvo en memoria. los REPOSITORIO delegará en los servicios de
infraestructura apropiados para hacer el trabajo. Encapsular los mecanismos de
almacenamiento, recuperación y consulta es la característica más básica de una
implementación de REPOSITORIO .


Figura 6.21. El REPOSITORIO encapsula el almacén de datos
subyacente.

los REPOSITORIO concepto es adaptable para muchos situaciones los posibilidades de
implementación están entonces

diversa que solo puedo enumerar algunas preocupaciones a tener en cuenta.


Resumen los tipo _ A REPOSITORIO "contiene" todos instancias de a específico escribe, pero
esta lo hace no significa que usted necesitar una REPOSITORIO por cada clase. los escribe
pudo ser un resumen superclase de a jerarquía (por ejemplo, a Orden comercial pudo ser
a CompraOrden o a orden de venta ). los tipo podría ser un interfaz cuyo
implementadores están no incluso jerárquicamente relacionados. O eso pudo ser especifico
hormigón clase. Mantenerse en mente que usted mayo bien rostro restricciones impuesto
por los falta de tal polimorfismo en tu base de datos tecnología.

Llevar ventaja de los desacoplamiento desde los cliente _ Tú tener más libertad para
cambiar la implementación de a REPOSITORIO que usted haría si los cliente fueron
vocación los mecanismos directamente. Tú lata llevar ventaja de esta para optimizar por
rendimiento, por variar los técnica de consulta o por almacenamiento en caché objetos
en memoria, libremente traspuesta persistencia estrategias en cualquier momento. Tú
lata facilitar pruebas de los cliente código y los dominio objetos por Proporcionar
fácilmente manipulado, ficticio en memoria estrategia.

Salir transacción control para los cliente _ Aunque los REPOSITORIO voluntad insertar
dentro y eliminar de los base de datos, eso voluntad ordinariamente no cometer
cualquier cosa. Eso es tentador para cometer después de guardar, por ejemplo, pero el
cliente presumiblemente tiene el contexto para iniciar y cometer correctamente
unidades de trabajo. Transacción administración voluntad ser más simple si los
REPOSITORIO mantiene sus manos apagado.

Por lo general, los equipos agregan un marco a la capa de infraestructura para admitir la
implementación de REPOSITORIOS . En adición para los colaboración con los más bajo nivel
infraestructura componentes, la superclase REPOSITORIO podría implementar algunas consultas
básicas, especialmente cuando se está realizando una consulta flexible. implementado.
Desafortunadamente, con a escribe sistema tal como Java, esta Acercarse haría obligarlo a
escribir los objetos devueltos como "Objeto", dejando que el cliente los envíe al REPOSITORIO
contenido escribe. Pero de curso, esta voluntad tener para ser hecho con consultas que regreso
colecciones de todos modos en Java.

Algunos adicional Guia en implementar REPOSITORIOS y algunos de sus secundario patrones
técnicos tal como C ONSULTA OBJETO lata ser fundar en Cazador de aves (2002).


Trabajar dentro de sus marcos

Antes de implementar algo como un REPOSITORIO , debe pensar detenidamente sobre la
infraestructura con la que está comprometido, especialmente los marcos arquitectónicos. Usted
puede encontrar que el estructura proporciona servicios usted lata utilizar para fácilmente crear a
REPOSITORIO , o usted mayo encontrar que el marco te pelea todo el camino. Puede descubrir
que el marco arquitectónico ya ha definido un equivalente patrón de consiguiendo persistente
objetos. O usted mayo descubrir que eso ha definido a patrón que es no me gusta a REPOSITORIO
en todos.

Para ejemplo, tu proyecto puede que ser comprometido para J2EE. Mirando por conceptual
afinidades Entre los estructura y los patrones de IMPULSADO POR MODELO DISEÑO (y acuerdo en
mente que un entidad frijol es no los mismo cosa como un ENTIDAD ), usted mayo tener elegido
para utilizar entidad frijoles para corresponder para AGREGAR raíces. los construir dentro de los
arquitectónico estructura de J2EE que es responsable para proporcionar acceso para estas
objetos es los "EJB Casa." Difícil para vestido arriba los EJB Casa para Mira como un REPOSITORIO
pudo dirigir para otro problemas.

En general, no pelear tu marcos Buscar formas para mantenerse los fundamentos de diseño
dirigido por dominio y dejar ir de los detalles específicos Cuándo los estructura es antagonista.
Mirar por afinidades Entre los conceptos de impulsado por el dominio diseño y los conceptos en
los estructura. Esta es asumiendo que Tú tener no elección pero para utilizar los estructura.

Muchos J2EE proyectos no utilizar entidad frijoles en todos. Si usted tener los libertad, escoger
marcos, o partes de marcos, que están armonioso con los

estilo de diseño que desea utilizar.


La Relación con F ACTORIAS

A FÁBRIC A manejas los comenzando de un objetos la vida; a REPOSITORIO ayuda administrar los
medio y el fin. Cuando los objetos se mantienen en la memoria o se almacenan en una base de
datos de objetos, esto es sencillo. Pero típicamente allí es en menos algunos objeto
almacenamiento en relacional bases de datos, archivos, u otro, no orientado a objetos sistemas
En tal casos, los recuperado datos deber ser reconstituido en objeto formulario.

Porque los REPOSITORIO es, en esta caso, creando objetos establecido en datos, muchos gente
considerar el REPOSITORIO para ser a FÁBRIC A —en efecto eso es, desde a técnico punto de vista.
Pero eso es más útil mantener los modelo en los primer plano, y como mencionado antes de, los
reconstitución de a almacenado objeto no es los creación de a nuevo conceptual objeto. En esta
impulsado por el dominio vista de los diseño, FÁBRIC AS y REPOSITORIOS tener distinto
responsabilidades. los FÁBRIC A hace nuevo objetos; los REPOSITORIO encuentra objetos antiguos.
Al cliente de un REPOSITORIO se le debe dar la ilusión de que los objetos están en la memoria.
los objeto mayo tener para ser reconstituido (sí, a nuevo ejemplo mayo ser creado), pero eso es
el mismo conceptual objeto, todavía en los medio de su la vida ciclo.

Estas dos vistas se pueden reconciliar haciendo que la creación de objetos delegados
REPOSITORIO a una FÁBRIC A , cual (en teoría, aunque raramente en práctica) pudo además ser
usado para crear objetos desde cero


Figura 6.22. UN REPOSITORIO utiliza una FÁBRICA para reconstituir un
objeto preexistente.

Esta claro separación además ayuda por descarga todos responsabilidad por persistencia desde
los FÁBRIC AS . A DE FÁBRIC A trabajo es para instanciar a potencialmente complejo objeto desde
datos. Si los producto es a nuevo objeto, el cliente sabrá esto y puede agregarlo al
REPOSITORIO , que encapsulará el almacenamiento de los objeto en los base de datos.


Figura 6.23. Un cliente utiliza un REPOSITORIO para almacenar un
nuevo objeto.

Otro caso que impulsa a las personas a combinar FAC TORY y REPOSITORY es el deseo de la
funcionalidad de "buscar o crear", en la que un cliente puede describir un objeto que quiere y,
si no encuentra tal objeto, se le dará uno recién creado. Esta función debe evitarse. Es una
conveniencia menor en el mejor de los casos. Muchos casos en los que parece útil desaparecen
cuando ENTIDADES y OBJETOS DE VALOR están distinguido. A cliente que quiere a VALOR OBJETO
puede ir derecho para a FÁBRIC A y pregunta por a nuevo una. Generalmente, los distinción Entre a
nuevo objeto y un existente objeto es importante en el dominio, y a estructura que
transparentemente combina ellos voluntad Realmente confusión los situación.

[ Equipo LiB ]

[ Equipo LiB ]


Diseño de objetos para bases de datos relacionales
El componente no objeto más común de los sistemas de software principalmente orientados a
objetos es la base de datos relacional. Esta realidad presenta los problemas habituales de una
mezcla de paradigmas (ver Capítulo 5 ). Pero los base de datos es más íntimamente
relacionados para los objeto modelo que están más otros componentes. los base de datos es no
sólo interactuando con los objetos; eso es almacenar los persistente forma de los datos que
constituyen los objetos mismos. Se ha escrito mucho sobre la técnica retos de cartografía
objetos para relacional mesas y efectivamente almacenar y recuperándolos. Se puede encontrar
una discusión reciente en Fowler 2002. Existen herramientas razonablemente refinadas para
crear y administrar asignaciones entre los dos. Aparte de las preocupaciones técnicas, este
desajuste lata tener a significativo impacto en los objeto modelo.

Hay tres casos comunes:

1. los base de datos es ante todo a repositorio por los objetos.

2. los base de datos era diseñado por otro sistema.

3. los base de datos es diseñado por esta sistema pero sirve en papeles otro que objeto Tienda.

Cuando el esquema de la base de datos se crea específicamente como un almacén para los
objetos, vale la pena aceptar algunas limitaciones del modelo para que el mapeo sea muy
simple. Sin otras exigencias en esquema diseño, los base de datos lata ser estructurado para
hacer agregar integridad más seguro y más eficiente a medida que se realizan las
actualizaciones. Técnicamente, el diseño de la tabla relacional no tiene que reflejar los dominio
modelo. Cartografía herramientas están sofisticado suficiente para puente significativo diferencias
los problema es, múltiple superposición modelos están sólo también Complicado. Muchos de los
mismo argumentos presentados por IMPULSADO POR MODELO DISEÑO —evitando separar análisis y
diseño modelos—aplicar para este desajuste. Esto implica cierto sacrificio en la riqueza del
modelo de objetos y, a veces, compromete tener para ser hecha en los base de datos diseño (tal
como selectivo desnormalización), pero hacer lo contrario es correr el riesgo de perder el
estrecho vínculo entre modelo e implementación. Este enfoque no requiere un mapeo simplista
de un objeto/una tabla. Dependiendo del poder de la herramienta de mapeo, puede ser posible
alguna agregación o composición de objetos. Pero es crucial que el asignaciones ser
transparente, fácilmente comprensible por inspeccionando los código o leyendo entradas en el
mapeo herramienta.

Cuándo los base de datos es siendo visto como un objeto Tienda, no dejar los datos
modelo y el objeto modelo divergir lejos, independientemente de los potestades de los
cartografía herramientas. Sacrificio algo de riqueza de objeto relaciones para
mantenerse cerrar para los relacional modelo. Compromiso algo formal relacional
estándares, tal como normalización, si eso ayuda simplificar los objeto cartografía.

Los procesos fuera del sistema de objetos no deberían acceder a dicho almacén de
objetos. podrían violar los invariantes forzado por los objetos. También, sus acceso voluntad
cerrar con llave en los datos modelo así que eso eso es duro para cambiar Cuándo los
objetos están refactorizado

Por otro lado, hay muchos casos en los que los datos provienen de un sistema heredado o
externo. que era Nunca destinado a como a Tienda de objetos. En esta situación, allí están, en
realidad, dos dominios modelos coexistiendo en los mismo sistema. Capítulo 14 , "Manteniendo
Modelo Integridad," trata con esta asunto en profundidad. Eso mayo hacer sentido para
ajustarse para los modelo implícito en los otro sistema, o eso mayo ser mejor para hacer los
modelo completamente distinto.

Otra razón para las excepciones es el rendimiento. Es posible que se deban introducir cambios
de diseño extravagantes

para resolver problemas de velocidad de ejecución.

Pero por los importante común caso de a relacional base de datos interino como los persistente
formulario de orientado a objetos dominio, sencillo franqueza es mejor. A mesa fila deberían
Contiene un objeto, tal vez a lo largo con subsidiarias en un AGREGADO . A extranjero llave en los
mesa deberían traducir para a referencia a otro ENTIDAD objeto. los necesidad de a veces
desviarse desde esta sencillo franqueza no debe dirigir para total abandono de los principio de
sencillo mapeos.

los UBIC UO IDIOMA lata ayuda Corbata los objeto y relacional componentes juntos para a solo
modelo los nombres y asociaciones de elementos en los objetos deberían corresponder
meticulosamente a aquellos de los relacional mesas. Aunque los energía de algunos cartografía
herramientas mayo hacer esta parecer innecesario, sutil diferencias en relaciones voluntad
porque a lote de Confusión.

La tradición de refactorización que se ha arraigado cada vez más en el mundo de los objetos
no ha afectado realmente relacional base de datos diseño mucho. Qué más, grave datos
migración cuestiones desalentar frecuente cambiar. Esta mayo crear a arrastrar en los
refactorización de los objeto modelo, pero si los modelo de objeto y los base de datos modelo
comienzo para divergir, transparencia lata ser perdió rápidamente.

Finalmente, allí están algunos razones para ir con a esquema que es bastante distinto desde los
objeto modelo, incluso Cuándo los base de datos es siendo creado específicamente por tu
sistema. los base de datos mayo además ser usado por otro software que voluntad no instanciar
objetos. los base de datos mayo exigir poco cambiar, incluso tiempo los conducta de los objetos
cambios o evoluciona rápidamente. Corte los dos suelto desde uno al otro es un camino
seductor. A menudo se toma sin querer, cuando el equipo no puede mantener la base de datos
Actual con los modelo. Si los separación es elegido conscientemente, eso lata resultado en a
esquema de base de datos limpio, no uno incómod o lleno de compromisos conforme al modelo
de objetos del año pasado.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo Siete. Usando el lenguaje: un
ejemplo extendido
los anterior Tres capítulos introducido a patrón idioma por bruñido los multa detalle de a modelo
y manteniendo a ajustado IMPULSADO POR MODELO DISEÑO . En los más temprano ejemplos, los
patrones fueron mayormente aplicado una en a hora, pero en a verdadero proyecto usted tener
para combinar ellos. Esta capítulo presenta uno elaborado ejemplo (todavía drásticamente más
simple que a verdadero proyecto, de curso). los ejemplo voluntad paso a través de una sucesión
de refinamientos de modelo y diseño a medida que un equipo hipotético se ocupa de los
requisitos y implementación cuestiones y desarrolla a IMPULSADO POR MODELO DISEÑO ,
demostración los fuerzas que aplicar y cómo los patrones de Parte Yo lata resolver ellos.

[ Equipo LiB ]

[ Equipo LiB ]


Introducción al sistema de envío de carga
Eran desarrollando nuevo software por a carga Envío empresa. los inicial requisitos están tres
básicos funciones

1. Pista llave manejo de cliente carga

2. Libro carga en avance

3. Enviar facturas para clientes automáticamente Cuándo los carga alcanza algunos punto en su
manejo

En a verdadero proyecto, eso haría llevar algunos hora y iteración para obtener para los claridad
de esta modelo. Parte III de esta libro voluntad ir dentro los descubrimiento proceso en
profundidad. Pero aquí bien comienzo con a modelo que tiene el necesario conceptos en a
razonable formulario, y bien enfocar en sintonia FINA los detalles para diseño de soporte.


Figura 7.1. Un diagrama de clases que representa un modelo del
dominio de envío.

Esta modelo organiza dominio conocimiento y proporciona a idioma por los equipo. Nosotros
lata Hacer afirmaciones me gusta esta:

"Múltiples Clientes están involucrados con una Carga , cada uno desempeñando un
papel diferente ".

"Se especifica el objetivo de entrega de la carga ".

"A serie de Transportador Movimientos satisfactorio los Especificación voluntad
realizar los entrega meta ." Cada objeto en los modelo posee a claro sentido:
A Manejo Evento es a discreto acción tomado con los carga , tal como cargando eso sobre a
Embarcacion o limpieza eso a través de costumbres. Esta clase haría probablemente ser
elaborado dentro a jerarquía de diferentes tipos de incidentes, tal como cargando, descarga, o
siendo reclamado por los receptor.

Entrega Especificación define a entrega meta, cual en mínimo haría incluir a destino y un
llegada fecha, pero eso lata ser más complejo. Esta clase sigue los ESPEC IFIC ACIÓN patrón (ver
Capítulo 9 ).

Esta responsabilidad pudo tener estado tomado en por los Carga objeto, pero los abstracción de
Especificación de entrega da en menos Tres ventajas

1. Sin Entrega especificación , los Carga objeto haría ser responsable por los significado
detallado de todos esos atributos y asociaciones por especificando los entrega meta. Esta
desordenaría arriba Carga y hacer eso más difícil para comprender o cambiar.

2. Esta abstracción hace que sea fácil y seguro suprimir detalles al explicar el modelo como
un todo. Por ejemplo, podría haber otros criterios encapsulados en la Especificación de
entrega , pero a diagrama en esta nivel de detalle haría no tener para exponer eso. los
diagrama es narración los lector que allí es a ESPEC IFIC ACIÓN de entrega, y los detalles de
que están no importante para pensar sobre (y, en hecho, pudo ser fácilmente cambió
luego).

3. Esta modelo es más expresivo. agregando Entrega Especificación dice explícitamente que
los medios exactos de entrega de los Carga es indeterminado, pero que eso deber lograr los
meta colocar Salir en los Entrega especificación _

A papel distingue los diferente partes jugó por Clientes en a envío. Una es los "remitente", uno
los "receptor," una los "pagador," y entonces en. Porque solamente una Cliente lata jugar a
dado función para un Cargo en particular , la asociación se convierte en un muchos-a-uno
calificado en lugar de muchos-a- muchos. El rol podría implementarse simplemente como una
cadena, o podría ser una clase si se necesita otro comportamiento.

Transportador Movimiento representa una especial viaje por a especial Transportador (tal
como a camión o un barco) desde una Ubicación para otro. cargamentos lata paseo desde
lugar para lugar por siendo cargado en los transportistas por los duración de una o más
Transportador movimientos _

Entrega Historia refleja qué posee Realmente sucedió para a carga , como opuesto para los
Especificación de entrega , que describe los objetivos. Un objeto Historial de entregas
puede calcular la ubicación actual de la carga analizando la última carga o descarga y el
destino de la carga correspondiente. Transportador movimiento _ A exitoso entrega haría
final con a Entrega Historia que satisfecho los objetivos de los Entrega especificación _

Todos los conceptos necesarios para trabajar a través de los requisitos que acabamos de
describir están presentes en este modelo, asumiendo apropiado mecanismos para persistir los
objetos, encontrar los pertinente objetos, y pronto. Tal implementación cuestiones están no
tratado con en los modelo, pero ellos deber ser en los diseño.

En pedido para marco arriba a sólido implementación, esta modelo todavía necesidades algunos
aclaración y apretando.

Recordar, ordinariamente, modelo refinamiento, diseño, y implementación deberían ir mano a
mano en un iterativo desarrollo proceso. Pero en esta capítulo, por claridad de explicación,
nosotros están empezando con a relativamente maduro modelo, y cambios voluntad ser
motivado estrictamente por los necesitar para conectar que

modelo con una implementación práctica, empleando los patrones de bloques de construcción.

Ordinariamente, como los modelo es siendo refinado para apoyo los diseño mejor, es deberían
además ser refinado reflejar nuevo visión dentro los dominio. Pero en esta capítulo, por claridad
de explicación, cambios voluntad ser estrictamente motivado por los necesitar para conectar con
a práctico implementación, empleando los bloque de construcción patrones.


[ Equipo LiB ]

[ Equipo LiB ]


Aislamiento del dominio: presentación de las
aplicaciones
Para evitar dominio responsabilidades desde siendo mezclado con esos de otro partes de los
sistema, apliquemos _ EN C APAS ARQUITECTURA para marca apagado a dominio capa.

Sin yendo dentro profundo análisis, nosotros lata identificar Tres nivel de usuario solicitud
funciones, cual podemos asignar para Tres solicitud capa clases

1. A Seguimiento Consulta que lata acceso pasado y regalo manejo de a especial Carga

2. A Reserva Solicitud que permite a nuevo Carga para ser registrado y prepara los sistema
para eso

3. Un Incidente Inicio sesión Solicitud que lata registro cada manejo de los Carga
(proporcionando el información que es fundar por los Seguimiento consulta )

Estas solicitud clases están coordinadores Ellos deberían no trabajo fuera los respuestas para los
preguntas que pedir. Que es los dominio capas trabajo.

[ Equipo LiB ]

[ Equipo LiB ]


objetos E NTIDADES y V ALORES
Considerando cada objeto en girar, bien Mira por identidad que deber ser rastreado o a básico
valor que es representado. Primero revisaremos los casos claros y luego consideraremos los
más ambiguos.


Cliente

Vamos comienzo con un fácil una. A Cliente objeto representa a persona o a empresa, un entidad
en el usual sentido de los palabra. los Cliente objeto claramente posee identidad que asuntos
para los usuario, entonces es una ENTIDAD en el modelo. ¿Cómo rastrearlo? El número de
identificación fiscal puede ser apropiado en algunos casos, pero una empresa internacional no
podría usarlo. Esta pregunta requiere una consulta con un experto en el dominio. Nosotros
discutir los problema con a persona de negocios en los Envío empresa, y nosotros descubrir que
la empresa ya tiene una base de datos de clientes en la que a cada Cliente se le asigna un
número de identificación en primero Ventas contacto. Esta IDENTIFICACIÓN es ya usado a lo
largo de los empresa; utilizando los número en nuestro software establecerá la continuidad de la
identidad entre esos sistemas. Inicialmente será un manual. entrada.


Carga

Deben distinguirse dos cajas idénticas, por lo que los objetos de carga son ENTIDADES . En
la práctica, todos los envíos empresas asignar seguimiento identificaciones para cada
pedazo de carga. Esta IDENTIFICACIÓN voluntad ser generada automáticamente, visible
para los usuario, y en esta caso, probablemente transportada para los cliente en tiempo de
reserva


Manipulación de eventos y transportistas Movimiento

Nosotros cuidado sobre tal individual incidentes porque ellos permitir nosotros para mantenerse
pista de qué es yendo en. Ellos reflejar mundo real eventos, cual están no generalmente
intercambiable, entonces ellos están ENTIDADES . Cada transportista Movimiento voluntad
ser identificado por a código adquirido desde a Envío calendario.

Otro discusión con a dominio experto revela que Manejo Eventos lata ser únicamente
identificado por los combinación de Carga IDENTIFICACIÓN, terminación hora, y escribe. Para
ejemplo, los mismo Carga no puede ser ambas cosas cargado y descargado en los mismo hora.


Ubicación

Dos lugares con los mismo nombre están no los mismo. Latitud y longitud pudo proveer a llave
unica, pero probablemente no a muy práctico una, ya que esos mediciones están no de
interesar para la mayoría de los propósitos de esta sistema, y ellos haría ser equitativamente
Complicado. Más probable, los Ubicación voluntad ser parte de a geográfico modelo de algunos
tipo que voluntad relacionar lugares según para Envío carriles y otra específico del dominio
preocupaciones. Entonces un arbitrario, interno, automáticamente generado identificador será
suficiente.

Historial de entrega

Este es complicado. Los Historiales de Entrega no son intercambiables, por lo que son
ENTIDADES . Pero un Historial de entrega tiene una relación de uno a uno con su Carga ,
por lo que en realidad no tiene una identidad. de su propio. Su identidad es prestado desde los
Carga que posee eso. Esta voluntad volverse más claro cuando nosotros modelo los AGREGADOS
.


Entrega Especificación

Aunque eso representa los meta de a carga , esta abstracción lo hace no depender en carga _
Eso realmente expresa a hipotético estado de algunos Entrega historia _ Nosotros esperar que
los Entrega Historia adjunta para nuestro Carga voluntad finalmente satisfacer los Entrega
Especificación adjunto para nuestro carga _ Si tuviéramos dos cargas que van al mismo
lugar, podrían compartir la misma especificación de entrega , pero ellos pudo no Cuota los
mismo Entrega historia , incluso aunque los comienzan las historias fuera los mismo (vacío).
Entrega Especificaciones están VALOR OBJETOS .


Rol y Otro Atributos

El papel dice algo sobre la asociación que califica, pero no tiene historia ni continuidad. Es un
VALOR OBJETO , y eso pudo ser compartido entre diferente Carga / Cliente
asociaciones. Otro atributos tal como hora sellos o nombres están VALOR OBJETOS .
[ Equipo LiB ]

[ Equipo LiB ]


Diseño de Asociaciones en el Dominio del Envío
Ninguna de los asociaciones en los original diagrama especificado a el recorrido dirección, pero
asociaciones bidireccionales están problemático en a diseño. También, el recorrido dirección
con frecuencia capturas visión dentro el dominio, profundizando los modelo sí mismo.

Si los Cliente posee a directo referencia para cada Carga eso posee Enviado, eso voluntad
volverse engorroso para a largo plazo, repetir clientes _ También, los concepto de a Cliente es
no específico para carga _ En un sistema grande, el Cliente puede tener roles para jugar con
muchos objetos. Lo mejor es mantenerlo libre de responsabilidades tan específicas. Si
necesitamos la capacidad de encontrar Cargas por Cliente , esto se puede hacer a través de
una consulta a la base de datos. Volveremos a este tema más adelante en este capítulo, en la
sección de REPOSITORIOS .

Si nuestra aplicación estuviera rastreando el inventario de naves, atravesando desde Carrier
Movement hasta Handling Evento haría ser importante. Pero nuestro negocio necesidades
para pista solamente los carga _ Haciendo la asociación transitable solo desde el evento de
manejo hasta el movimiento del transportista captura esa comprensión de nuestro
negocio. Esta además reduce los implementación para a sencillo objeto referencia, porque los
dirección con multiplicidad era no permitido

El fundamento detrás de las decisiones restantes se explica en la Figura 7.2 , en la página
siguiente.


Figura 7.2. La dirección transversal se ha restringido en algunas
asociaciones.

Hay una referencia circular en nuestro modelo: Cargo conoce su Historial de entrega , que
contiene un

serie de eventos de manipulación , que a su vez apuntan de nuevo a la carga . Las
referencias circulares existen lógicamente en muchos dominios y, a veces, también son
necesarias en el diseño, pero son difíciles de mantener. Implementación elecciones lata ayuda
por evitando tenencia los mismo información en dos lugares que deber ser conservó sincronizado
En esta caso, nosotros lata hacer a sencillo pero frágil implementación (en Java) en un prototipo
inicial, dando a Delivery History un objeto List que contiene Handling Events . Pero en
algunos punto bien probablemente querer para soltar los colección en favor de a base de datos
buscar con Carga como los llave. Esta discusión voluntad ser tomado arriba otra vez Cuándo
eligiendo REPOSITORIOS . Si la consulta para ver el historial es relativamente poco frecuente, esto
debería dar un buen rendimiento, simplificar el mantenimiento, y reducir los gastos generales de
agregando Manejo Eventos _ Si esta consulta es muy frecuentes, entonces es mejor seguir
adelante y mantener el puntero directo. Estas compensaciones de diseño equilibran la
simplicidad de implementación en contra rendimiento. los modelo es los mismo; eso contiene los
ciclo y el bidireccional asociación.


[ Equipo LiB ]

[ Equipo LiB ]


UN AGREGADO Límites
Cliente, Ubicación , y Transportador Movimiento tener sus propio identidades y están
compartido por muchas cargas , entonces ellos deber ser los raíces de sus propio AGREGADOS ,
cual Contiene sus atributos y posiblemente otros objetos por debajo del nivel de detalle de esta
discusión. La carga también es un AGREGADO obvio raíz, pero donde para dibujar los Perímetro
toma algunos pensamiento.

los Carga AGREGAR pudo barrer en todo que haría no existe pero por los especial Carga , que
incluiría el Historial de Entrega , la Especificación de Entrega y los Eventos de Manejo .
Esta encaja por Entrega Historia. No una haría Mira arriba a Entrega Historia directamente sin
querer los Carga sí mismo. Con no necesitar por directo global acceso, y con un identidad que es
realmente derivado de Cargo , el Historial de entregas encaja muy bien dentro de los límites
de Cargo , y no necesita ser una raíz. La Especificación de Entrega es un OBJETO DE VALOR ,
por lo que no hay complicaciones desde incluso eso en los Carga AGREGADO .

El evento de manipulación es otro asunto. Previamente hemos considerado dos posibles
consultas a la base de datos que haría búsqueda por estas: una, para encontrar los Manejo
Eventos por a Entrega Historia como posible alternativa al acopio, sería local dentro del
AGREGADO de Carga ; el otro lo haría ser usado para encontrar todos los operaciones para carga y
preparar por a especial Transportador movimiento _ En los segundo caso, eso parece que los
actividad de manejo los Carga posee algunos sentido incluso cuando se considera aparte de la
Carga misma. Entonces, el evento de manejo debe ser la raíz de su propio AGREGADO .


Figura 7.3. Límites AGREGADOS impuestos al modelo. (Nota: se
supone que una ENTIDAD fuera de un límite dibujado es la raíz de su
propio AGREGADO ).

[ Equipo LiB ]

[ Equipo LiB ]


Selección de R EPOSITORIOS
Ahí están cinco ENTIDADES en los diseño que están raíces de AGREGADOS , entonces nosotros lata
límite nuestra consideración para estas, ya que ninguna de los otro objetos es permitido para
tener REPOSITORIOS .

Para decidir cual de estas candidatos deberían Realmente tener a REPOSITORIO , nosotros deber ir
espalda para la aplicación requisitos En pedido para llevar a reserva a través de los Reserva
aplicación , los necesidades del usuario para Seleccione los Clientes) jugando los varios
papeles (expedidor, receptor, y entonces en). Entonces nosotros necesitamos a Cliente
repositorio _ Nosotros además necesitar para encontrar a Ubicación para especificar como los
destino para el carga , entonces nosotros crear a Ubicación repositorio _

La aplicación de registro de actividad debe permitir al usuario buscar el movimiento del
transportista que a Carga es siendo cargado sobre, entonces nosotros necesitar a
Transportador Movimiento repositorio _ Esta usuario también debe decir los sistema cual
Carga posee estado cargado, entonces nosotros necesitar a Carga repositorio _


Figura 7.4. Los R EPOSITORIOS dan acceso a raíces AGREGADAS
seleccionadas .

Por ahora no hay Repositorio de Manejo de Eventos , porque decidimos implementar la
asociación con Entrega Historia como a colección en los primero iteración, y nosotros tener no
requisito de aplicación para encontrar fuera qué posee estado cargado sobre a Transportador
movimiento _ Cualquiera de estas las razones podrían cambiar; si ellos hizo, luego nosotros

haría agregar a REPOSITORIO .

[ Equipo LiB ]

[ Equipo LiB ]


Caminando a través de escenarios
Para verificar por distintos modos todos estas decisiones, nosotros tener para constantemente
paso a través de escenarios para confirmar que nosotros lata resolver solicitud problemas
efectivamente.


Función de aplicación de muestra: cambiar el destino de una carga

De vez en cuando a Cliente llamadas arriba y dice, "Oh ¡no! Nosotros dijo para enviar nuestro
carga para mochila, pero nosotros De Verdad necesitar eso en Hoboken". Nosotros están aquí
para atender, entonces los sistema es requerido para proveer por este cambio

Entrega Especificación es a VALOR OBJETO , entonces eso haría ser más simple para sólo para
lanzar eso fuera y obtener una nuevo una, luego utilizar a setter método en Carga para
reemplazar los viejo una con los nuevo una.


Función de aplicación de muestra: negocios repetidos

los usuarios decir que repetido reservaciones desde los mismo Clientes tender para ser similar,
entonces ellos querer utilizar viejo cargamentos como prototipos por nuevo unos. los solicitud
voluntad permitir ellos para encontrar a Carga en el REPOSITORIO y luego Seleccione a mando
para crear a nuevo Carga establecido en los seleccionado una.
Diseñaremos esto usando el patrón PROTOTYPE ( Gamma et al. 1995 ).

Carga es un ENTIDAD y es los raíz de un AGREGADO . Por lo tanto, eso deber ser copiado con
cuidado; necesitamos considerar qué debería pasar con cada objeto o atributo encerrado por
su límite AGREGADO . Vamos ir sobre cada una:

Entrega Historia: Nosotros deberían crear a nuevo, vacío una, porque los historia de los
viejo uno no aplicar. Esta es los usual caso con ENTIDADES en el interior los AGREGAR
Perímetro.

Funciones del cliente: debemos copiar el mapa (u otra colección) que contiene las
referencias clave para clientes , incluso los teclas, porque ellos están probable para jugar
los mismo funciones en el nuevo envío. Pero debemos tener cuidado de no copiar los
propios objetos del Cliente . Debemos terminar con referencias a los mismos objetos
Cliente que el Cargo anterior objeto referenciado, porque ellos están ENTIDADES fuera de
los AGREGAR Perímetro.

Seguimiento IDENTIFICACIÓN: Nosotros deber proveer a nuevo Seguimiento
IDENTIFICACIÓN desde los mismo fuente como nosotros haría al crear a nuevo Carga
desde rasguño.

Note que hemos copiado todo dentro del límite de Cargo AGREGATE , hemos hecho algunos
modificaciones para los Copiar, pero nosotros tener afectado nada fuera de los AGREGAR Perímetro
en absoluto


[ Equipo LiB ]

[ Equipo LiB ]


Creación de objetos

F ACTORIAS y Constructores para Carga

Incluso si tenemos una FÁBRIC A elegante para Carga , o usamos otra Carga como FÁBRIC A ,
como en el escenario "Repetir negocio", todavía tenemos que tener un constructor primitivo.
Nos gustaría el constructor para Produce un objeto que cumple su invariantes o en menos, en
los caso de un ENTIDAD , tiene su identidad intacto.

Dadas estas decisiones, podríamos crear un método FAC TORY en Cargo como este:

copyPrototype de carga p ública (String newTrackingID)

O podríamos hacer un método en una FÁBRIC A independiente como esta:

carga pública newCargo (prototipo de carga, String newTrackingID)

A ser único FÁBRIC A pudo además encapsular los proceso de obtención a nuevo (generada
automáticamente) IDENTIFICACIÓN por a nuevo carga , en cual caso eso haría necesitar
solamente una argumento:

Carga pública newCargo(Carga prototipo)

El resultado devuelto por cualquiera de estas FÁBRIC AS sería el mismo: una Carga con un
vacío
Historial de entregas y una Especificación de entrega nula .

los bidireccional asociación Entre Carga y Entrega Historia medio que ninguno de los dos
Carga ni el historial de entregas está completo sin apuntar a su contraparte, por lo que
deben crearse juntos. Recordar que Carga es los raíz de los AGREGAR que incluye Entrega
historia _
Por lo tanto, podemos permitir que el constructor de Cargo o la FÁBRIC A creen un Historial
de Entrega . la entrega Historia constructor voluntad llevar a Carga como un argumento.
los resultado haría ser algo como esta:

Carga pública (ID de
cadena) { ID de
seguimiento = id;
historia de la entrega = nuevo Historial de
entrega (esto); roles del cliente = nuevo
HashMap();
}

El resultado es una nueva carga con un nuevo historial de entregas que apunta a la carga
. la entrega Historia constructor es usado exclusivamente por su AGREGAR raíz, a saber carga
, entonces que el composición de Carga es encapsulado


Agregar un evento de manejo

Cada hora los carga es manejado en los verdadero mundo, algunos usuario voluntad ingresar a
Manejo Evento utilizando los
Aplicación de registro de incidentes .

Cada clase debe tener constructores primitivos. Debido a que el evento de manejo es una
ENTIDAD , todos los atributos que definir su identidad deber ser aprobado para los constructor.
Como discutido previamente, el manejo Evento es únicamente identificado por los combinación
de los IDENTIFICACIÓN de su carga , los hora de finalización y el tipo de evento. El único otro
atributo del evento de manejo es la asociación a un transportista movimiento , cual
algunos tipos de Manejo Eventos no incluso tener. A básico constructor que crea a válido
Manejo Evento haría ser:

público HandlingEvent(Carga C, Cuerda tipo de evento, Fecha
marca de tiempo) { manejado = C;
tipo = tipo de evento;
tiempo de finalizaci ón =
marca de tiempo;
}

No identificado atributos de un ENTIDAD lata generalmente ser agregado luego. En esta caso, todos
atributos de el evento de manejo se configurará en la transacción inicial y nunca se modificará
(excepto posiblemente para corregir un error de ingreso de datos), por lo que podría ser
conveniente y hacer que el código del cliente sea más expresivo, para agregar a sencillo FÁBRIC A
MÉTODO para Manejo Evento por cada evento escribe, tomando todos lo necesario argumentos
Para ejemplo, a "cargando evento" lo hace involucrar a Transportador Movimiento :

Evento de manejo est ático público nuevoCargando(
Carga C, PortadorMovimiento cargado en, Fecha marca de
tiempo) { Resultado del evento de manejo =
nuevo ManejoEvento(c, CARGANDO_EVENTO, marca de
tiempo); result.setCarrierMovement(loadedOnto);
resultado devuelto;
}

los Manejo Evento en los modelo es un abstracción que puede que encapsular a variedad de
clases especializadas de eventos de manipulación , que van desde la carga y descarga hasta
el sellado, el almacenamiento y otras actividades no relacionadas con los transportistas .
Pueden implementarse como varias subclases o tener una inicialización complicada, o amb as
cosas. Al agregar FAC TORY METHODS a la clase base ( Handling Event ) para cada tipo, se
abstrae la creación de instancias, liberando al cliente del conocimiento de la implementación.
los FÁBRIC A es responsable por conocimiento qué clase era para ser instanciado y cómo deberían
ser inicializado

Desafortunadamente, los historia no es bastante que sencillo. los ciclo de referencias, desde
Carga para El historial de entregas al evento de historial y de regreso a Cargo complica
la creación de instancias. El historial de entrega sostiene a colección de Manejo Eventos
pertinente para su carga , y los nuevo objeto deber agregarse a esta colección como parte de la
transacción. Si no se creara este puntero hacia atrás, los objetos haría ser inconsistente.


Figura 7.5. Agregar un evento de manejo requiere insertarlo en un
historial de entrega.

Creación de los puntero de retroceso pudo ser encapsulado en los FÁBRIC A (y conservó en los
dominio capa donde pertenece), pero ahora veremos un diseño alternativo que elimina esta
incómoda interacción en total.

[ Equipo LiB ]

[ Equipo LiB ]


Pausa para la refactorización: un diseño alternativo del
AGREGADO de carga
El modelado y el diseño no es un proceso constante hacia adelante. Se detendrá a menos que
haya frecuentes refactorización para llevar ventaja de nuevo perspectivas para mejorar los
modelo y los diseño.

Por ahora, allí están a Pareja de incómodo aspectos para esta diseño, aunque eso lo hace
trabajo y refleja el modelo. Empiezan problemas que no parecían importantes al iniciar el
diseño para ser molesto. Vamos ir espalda para una de ellos y, con los beneficio de comprensión
retrospectiva, apilar el diseño plataforma en nuestro favor.

los necesitar para actualizar Entrega Historia Cuándo agregando a Manejo Evento obtiene los
Carga AGREGADO involucrado en la transacción. Si algún otro usuario estuviera modificando la
Carga al mismo tiempo, la transacción del Evento de manejo podría fallar o retrasarse.
Ingresar un evento de manejo es una operación actividad que necesidades para ser rápido y
sencillo, entonces un importante solicitud requisito es la capacidad de ingresar eventos de
manejo sin contención. Esto nos empuja a considerar un diseño diferente.

Reemplazar la colección de eventos de manejo del historial de entregas con una consulta
permitiría el manejo Eventos para ser agregado sin levantamiento ninguna integridad
cuestiones fuera de su propio AGREGADO . Este cambio permitiría que tales transacciones se
completen sin interferencias. Si hay mucho manejo Eventos siendo ingresó y relativamente
pocos consultas, esta diseño es más eficiente. En hecho, si una base de datos relacional es la
tecnología subyacente, probablemente se estaba utilizando una consulta encubierta de todos
modos para emular los colección. Utilizando a consulta bastante que a colección haría además
reducir la dificultad de mantener la consistencia en la referencia cíclica entre Cargo y
Handling Event .

Para llevar responsabilidad por los consultas, bien agregar a REPOSITORIO por Manejo Eventos _
los Evento de manejo Repositorio voluntad apoyo a consulta por los Eventos relacionados
para a cierto carga _ En adición, el REPOSITORIO lata proveer consultas optimizado para responder
específico preguntas eficientemente. Para ejemplo, si un frecuente acceso sendero es los Entrega
Historia hallazgo los último reportado carga o descargar, en pedido para inferir el estado actual
de la Carga , se podría diseñar una consulta para devolver solo ese Evento de manejo
relevante . Y si quisiéramos una consulta para encontrar todas las Cargas cargadas en un
Movimiento de Transportista en particular , nosotros pudo fácilmente agregar eso.


Figura 7.6. La implementación de la colección de eventos de manejo
del historial de entregas como una consulta hace que la inserción de
eventos de manejo sea simple y libre de contienda con la Carga
AGREGADO .

Esta sale de los Entrega Historia con no persistente estado. En esta punto, allí es no verdadero
necesitar mantener eso alrededor. Nosotros pudo derivar Entrega Historia sí mismo cuando
sea eso es necesario para responder alguna pregunta. Nosotros lata derivar esta objeto porque,
aunque los ENTIDAD voluntad ser repetidamente recreado, la Asociación con los mismo Carga
objeto mantiene los hilo de continuidad Entre encarnaciones

La referencia circular ya no es complicada de crear y mantener. La fábrica de carga se
simplificará para no más extenso adjuntar un vacío Entrega Historia para nuevo instancias.
Base de datos espacio puede reducirse ligeramente, y el número real de objetos persistentes
podría reducirse considerablemente, lo que es a limitado recurso en algunos objeto bases de
datos Si los común uso patrón es que los el usuario rara vez consulta el estado de una carga
hasta que llega, entonces se evitará una gran cantidad de trabajo innecesario en total.

Por otro lado, si estamos usando una base de datos de objetos, atravesando una asociaci ón o
una colección explícita es probablemente mucho más rápido que a REPOSITORIO consulta. Si los
acceso patrón incluye una lista frecuente del historial completo, en lugar de la consulta
específica ocasional de la última posición, la compensación de rendimiento podría favorecer la
recopilación explícita. Y recuerde que la función adicional ("¿Qué hay en este movimiento del
transportista ?") aún no se ha solicitado, y es posible que nunca se solicite, por lo que no
querer para pagar mucho por que opción.

Estas tipos de alternativas y diseño compensaciones están En todas partes, y I pudo venir arriba
con un montón de ejemplos sólo en esta poco simplificado sistema. Pero los importante punto es
que estas están grados de libertad dentro de los mismo modelo. Por modelado VALORES ,
ENTIDADES , y sus AGREGADOS como nosotros tenemos, hemos reducido el impacto de dichos
cambios de diseño. Por ejemplo, en este caso, todos los cambios se encapsulan dentro del
límite AGREGADO de la carga . También requería la adición del Repositorio de eventos de
manejo , pero no requería ningún rediseño del Evento de manejo en sí (aunque podrían
estar involucrados algunos cambios de implementación, dependiendo de los detalles del
REPOSITORIO). estructura).

[ Equipo LiB ]

[ Equipo LiB ]


M ODULOS en el Envío Modelo
Hasta ahora hemos estado mirando tan pocos objetos que la modularidad no es un problema.
Ahora veamos un poco más grande parte de a Envío modelo (aunque todavía simplificado, de
curso) para ver su organización en MÓDULOS que voluntad afectar los modelo.

La figura 7.7 muestra un modelo prolijamente dividido por un hipotético lector entusiasta de
este libro. Esta diagrama es a variación en los impulsado por la infraestructura embalaje
problema elevado en Capítulo 5 . En esto caso, los objetos tener estado agrupados según para
los patrón cada sigue. los resultado es que los objetos que conceptualmente tienen poca
relación (baja cohesión) se amontonan, y las asociaciones correr quieras o no Entre todos los
MÓDULOS (elevado acoplamiento). los paquetes decir a historia, pero es no los historia de Envío;
eso es los historia de qué los desarrollador era leyendo en los hora.


Figura 7.7. Estos MÓDULOS no transmiten conocimiento del
dominio.

Fraccionamiento por patrón mayo parecer me gusta un obvio error, pero eso es no De Verdad
ninguna menos sensato que separar los objetos persistentes de los transitorios o cualquier
otro esquema metódico que no esté fundamentado en los sentido de los objetos.

En cambio, deberíamos buscar los conceptos cohesivos y centrarnos en lo que queremos
comunicar. para otros en los proyecto. Como con menor escala modelado decisiones, allí están
Muchas maneras para hacer eso. Figura 7.8 espectáculos a simple una.


Figura 7.8. M ÓDULOS basados en conceptos de dominio
amplio

los MÓDULO nombres en Figura 7.8 contribuir para los del equipo idioma. Nuestro empresa lo
hace envío para clientes entonces que nosotros lata cuenta ellos. Nuestro Ventas y márketing
gente trato con clientes , y hacer acuerdos con ellos. La gente de operaciones hace el envío ,
llevando la carga a su lugar especificado. destino. los espalda oficina toma cuidado de
facturación , sumisión facturas según para el precio en los clientes convenio. Eso es una historia
I lata decir con esta colocar de MÓDULOS .

Esta intuitivo desglose pudo ser refinado, ciertamente, en sucesivo iteraciones, o incluso
reemplazado por completo, pero eso es ahora ayudando IMPULSADO POR MODELO DISEÑO y
contribuyendo para los UBIC UO IDIOMA .

[ Equipo LiB ]

[ Equipo LiB ]


Presentamos una nueva característica: Verificación de
asignaciones
Arriba para esta punto, hemos estado trabajando apagado los inicial requisitos y modelo.
Ahora los primero importante nuevo funciones están yendo para ser agregado.

La división de ventas de la naviera imaginaria utiliza otro software para gestionar las relaciones
con los clientes, Ventas proyecciones, y entonces adelante. Una rasgo apoya producir
administración por permitiendo el firma para asignar cómo mucho carga de específico tipos ellos
voluntad intento para libro establecido en los tipo de bienes, los origen y destino, o ninguna otro
factor ellos mayo escoger que lata ser ingresó como un nombre de categoría. Estos constituyen
metas de cuánto se venderá de cada tipo, para que sea más rentable tipos de negocio voluntad
no ser atestado fuera por menos rentable cargamentos, tiempo en los Mismo tiempo evitando
reserva insuficiente (no completamente utilizando sus Envío capacidad) o excesivo overbooking
(resultante en chocando carga entonces con frecuencia que eso duele cliente relaciones).

Ahora ellos querer esta rasgo para ser integrado con los reserva sistema. Cuándo a reserva
llega en ellos querer eso comprobado en contra estas asignaciones para ver si eso deberían ser
aceptado.

La información necesaria reside en dos lugares, los cuales deberán ser consultados por la
Aplicación de Reservas entonces que eso lata cualquiera aceptar o rechazar los solicitado
reserva. A bosquejo de los información general fluye mira algo me gusta esta.


Figura 7.9. Nuestra Aplicación de Reservas debe utilizar
información del Sistema de Gestión de Ventas y de REPOSITORIOS de
nuestro propio dominio .


Conexión de los dos sistemas

El Sistema de Gestión de Ventas no fue escrito con el mismo modelo en mente que estamos
trabajando con aquí. Si los Reserva Solicitud interactúa con eso directamente, nuestro solicitud
voluntad tendrá que adaptarse al diseño del otro sistema, lo que hará que sea más difícil
mantener un modelo claro IMPULSADO DISEÑO y voluntad confundir los UBIC UO IDIOMA . En lugar
de, vamos crear otro clase cuyo trabajo será traducir entre nuestro modelo y el lenguaje del
Sistema de Gestión de Ventas . No será un mecanismo de traducción general. Expondrá solo
las características de nuestra aplicación. necesidades, y eso voluntad resumir ellos en
condiciones de nuestro dominio modelo. Esta clase voluntad Actuar como un ANTI C ORRUPC ION
C APA (discutido en Capítulo 14 ).

Esta es una interfaz para el Sistema de gestión de ventas , por lo que primero podríamos
pensar en llamarlo de alguna manera. me gusta Ventas _ Gestión interfaz ". Pero nosotros
haría ser desaparecido un oportunidad para utilizar

idioma para refundir a los problema a lo largo de líneas más útil para nosotros. En lugar de,
vamos definir a SERVIC IO para cada una de las funciones de asignación que necesitamos obtener
del otro sistema. Implementaremos los SERVIC IOS con a clase cuyo nombre refleja su
responsabilidad en nuestro sistema: Asignación _ corrector ".

Si se necesita alguna otra integración (por ejemplo, utilizando el cliente del Sistema de
Gestión de Ventas base de datos en lugar de de nuestro propio Cliente REPOSITORIO ), otro
traductor lata ser creado con SERVIC IOS cumpliendo con esa responsabilidad. Todavía podría ser
útil tener una clase de nivel inferior como Ventas Gestión Sistema Interfaz para encargarse
de los maquinaria de hablando para los otro programa, pero no sería responsable de la
traducción. Además, estaría oculto detrás del Comprobador de asignación , entonces eso no
lo haría show arriba en los dominio diseño.


Potenciando el Modelo: Segmentando el Negocio

Ahora que nosotros tener delineado los Interacción de los dos sistemas, qué tipo de interfaz están
nosotros va a suministrar que pueda responder a la pregunta "¿Cuánto de este tipo de Carga
se puede reservar?" El problema es definir cuál es el "tipo" de un Cargo , porque nuestro
modelo de dominio aún no categoriza los Cargos . En el Sistema de gestión de ventas , los
tipos de carga son solo un conjunto de categorías palabras clave, y nosotros pudo
ajustarse nuestro tipos para que lista. Nosotros pudo pasar en a colección de cuerdas como un
argumento. Pero nosotros haría ser paso arriba otro oportunidad: esta hora, para reabstraer el
dominio del otro sistema. Necesitamos enriquecer nuestro modelo de dominio para acomodar
el conocimiento que allí están categorías de carga. Nosotros deberían idea genial con a dominio
experto para elaborar los nuevo concepto.

A veces (como se discutirá en el Capítulo 11 ) un patrón de análisis puede darnos una idea
para un modelo. solución. los libro Análisis Patrones (Cazador de aves 1996) describe a patrón
que aborda esto tipo de problema: los EMPRESA SEGMENTO . Un EMPRESA SEGMENTO es a colocar de
dimensiones que definen una forma de desglosar un negocio. Estas dimensiones podrían incluir
todas las ya mencionadas por los Envío negocio, como bien como hora dimensiones, tal como
mes para fecha. Utilizando este concepto en nuestro modelo de asignación hace los modelo más
expresivo y simplifica los interfaces A clase llamado " Empresa Segmento" voluntad aparecer
en nuestro dominio modelo y diseño como un VALOR adicional OBJETO , cual voluntad tener para
ser derivado por cada carga _


Figura 7.10. El Comprobador de asignación actúa como una CAPA
ANTICORRUPCIÓN que presenta una interfaz selectiva para el Sistema
de gestión de ventas. en términos de nuestro dominio modelo.

los Asignación Inspector voluntad traducir Entre Empresa Segmentos y los categoría
nombres del sistema externo. El Repositorio de Carga también debe proporcionar una
consulta basada en la Empresa segmento _ En ambas cosas casos, colaboración con los
Empresa Segmento objeto lata ser usado para llevar a cabo los operaciones sin violando los del
segmento encapsulación y complicando su propio implementaciones. (Aviso que los Carga
Repositorio es respondiendo a consulta con a contar, más bien que a colección de instancias.)

Todavía hay algunos problemas con este diseño.

1. Nosotros tener dado los Reserva Solicitud los trabajo de aplicar esta regla: "A Carga es
aceptado si el espacio asignado para su Segmento Enterprise es mayor que la cantidad
ya reservada más los Talla de los nuevo carga ". hacer cumplir a negocio regla es dominio
responsabilidad y no debería ser realizado en los solicitud capa.

2. Eso no es claro cómo los Reserva Solicitud deriva los Empresa segmento _

Ambas cosas de estas responsabilidades parecer para pertenecer para los Asignación
corrector _ Cambiando su la interfaz puede separar estas dos SERVIC IOS y hacer los
Interacción claro y explícito.


Figura 7.11. Las responsabilidades del dominio se trasladaron de la
aplicación de reserva al verificador de
asignación

La única restricción seria impuesta por esta integración será que el Sistema de gestión de
ventas no debe usar dimensiones que el Comprobador de asignación no pueda convertir en
Segmentos empresariales . (Sin aplicar los EMPRESA SEGMENTO patrón, los mismo restricción
haría forzar el Ventas sistema para utilizar solamente dimensiones que lata ser usado en a
consulta para los Carga repositorio _ Esta Acercarse es factible, pero los Ventas sistema
derrames dentro otro partes de los dominio. En esta diseño, el Repositorio de carga solo
necesita estar diseñado para manejar el segmento empresarial y los cambios en el Ventas
sistema onda solamente como lejos como los Asignación corrector , cual era concebido como a
FAC HADA en los primero lugar.)


La optimización del rendimiento

Aunque los Asignación Juego de damas interfaz es los solamente parte que preocupaciones
los descanso de los diseño de dominio, su implementación interna puede presentar
oportunidades para resolver problemas de rendimiento, si surgen. Por ejemplo, si el Sistema
de gestión de ventas se está ejecutando en otro servidor, tal vez en otro ubicación, los
comunicaciones gastos generales pudo ser significativo, y allí están dos intercambios de
mensajes por cada control de asignación. No hay alternativa al segundo mensaje, que invoca
los Ventas Gestión Sistema para responder los básico pregunta de ya sea a cierta carga debe
ser aceptada. Pero el primer mensaje, que deriva el segmento empresarial para una carga,
se basa en datos y comportamientos relativamente estáticos en comparación con las
decisiones de asignación en sí. Una diseño opción haría ser para cache esta información entonces
que eso pudo ser reubicado sobre el servidor con los Asignación corrector , reduciendo
mensajería gastos generales por medio. Ahí es a precio por esta flexibilidad. los diseño es más
Complicado y los duplicado datos deber ahora ser conservó arriba hasta la fecha de alguna
manera. Pero Cuándo rendimiento es crítico en a repartido sistema, flexible despliegue puede ser
un importante diseño meta.


[ Equipo LiB ]

[ Equipo LiB ]


Una última mirada
Eso es eso. Esta integración pudo tener convertido nuestro sencillo, conceptualmente
consistente diseño dentro un lío enredado, pero ahora, utilizando una C APA ANTIC ORRUPCIÓN
, un SERVIC IO y algunos SEGMENTOS EMPRESARIALES , nosotros tener integrado los
funcionalidad de los Ventas Gestión Sistema dentro nuestra reserva sistema
limpiamente, enriquecedor los dominio.

Una última pregunta de diseño: ¿Por qué no dar a Cargo la responsabilidad de derivar el
segmento empresarial ? A simple vista parece elegante, si todos los datos en los que se
basa la derivación están en el Cargo , para hacer eso a derivado atributo de carga _
Desafortunadamente, eso es no que sencillo. Los segmentos empresariales se definen
arbitrariamente para dividirse en líneas útiles para la estrategia comercial. Las mismas
ENTIDADES pudo ser segmentario diferentemente por diferente propósitos Nosotros están
derivando los segmento por una carga en particular para fines de asignación de reservas ,
pero podría tener un segmento empresarial completamente diferente para fines de
contabilidad fiscal. Incluso la asignación del segmento empresarial podría cambiar si los
Ventas Gestión Sistema es reconfigurado porque de a nuevo Ventas estrategia. Por lo tanto ,
Cargo tendría que conocer el Comprobador de asignación , que está fuera de su
responsabilidad conceptual, y estaría cargado de métodos para derivar tipos específicos de
Enterprise . segmento _ Por lo tanto, los responsabilidad por derivando esta valor mentiras
adecuadamente con el objeto que conoce las reglas de segmentación, en lugar del objeto que
tiene los datos a los que esas normas aplicar. Esos normas pudo ser separar fuera dentro a
separar " Estrategia " objeto, cual pudo pasarse a un Cargo para permitirle derivar un
Segmento Empresarial . Esa solución parece ir más allá los requisitos nosotros tener aquí,
pero eso haría ser un opción por a luego diseño y no debería ser a muy disruptivo cambiar.

[ Equipo LiB ]

[ Equipo LiB ]


Parte III: Refactorización hacia una
visión más profunda
Parte Yo de esta libro establecido a Fundación por manteniendo los correspondencia Entre
modelo e implementación. Utilizando a probado colocar de básico edificio bloques a lo largo
de con consistente el lenguaje trae algunos cordura para los desarrollo esfuerzo.

De curso, los verdadero desafío es para Realmente encontrar un incisivo modelo, una que
capturas preocupaciones sutiles de los expertos en el dominio y pueden impulsar un
diseño práctico. En última instancia, esperamos desarrollar a modelo que capturas a
profundo comprensión de los dominio. Esta deberían hacer el software está más en
sintonía con la forma en que piensan los expertos del dominio y responde mejor a las
necesidades del usuario necesidades. Esta parte de los libro voluntad aclarar que meta,
describir los proceso por cual eso puede ser se acercó, y explicar algunos diseño principios y
patrones para aplicar para hacer los diseño acomodar los necesidades de los solicitud como
bien como los desarrolladores ellos mismos.

El éxito en el desarrollo de modelos útiles se reduce a tres puntos.

1. Sofisticado dominio modelos están realizable y valor los problema.

2. Ellos están raramente desarrollado excepto a través de un iterativo proceso de
refactorización, incluyendo cerrar intervención de los dominio expertos con
desarrolladores interesado en aprendiendo acerca de dominio.

3. Ellos mayo llamada por sofisticado diseño habilidades para implementar y para utilizar
efectivamente.


Niveles de refactorización
refactorización es los rediseñar de software en formas que hacer no cambiar su
funcionalidad. En vez de haciendo elaborar en la delantera diseño decisiones,
desarrolladores llevar código a través de a serie continua de pequeña, discreto diseño
cambios, cada partida existente funcionalidad sin alterar al tiempo que hace que el diseño
sea más flexible o más fácil de entender. Un conjunto de pruebas unitarias automatizadas
permite relativamente a salvo experimentación con los código. los proceso libera los
desarrolladores desde el necesitar para Mira lejos adelante.

Pero por poco todos los literatura en cómo para refactorizar se enfoca en mecánico
cambios para los código que lo hace más fácil de leer o mejorar a un nivel muy detallado.
El enfoque de "refactorización para patrones" [1] lata dar a nivel más alto objetivo para los
refactorización proceso Cuándo un desarrollador reconoce una oportunidad de aplicar un
patrón de diseño establecido. Aún así, es principalmente técnico vista de los calidad de a
diseño.

[1] Patrones como objetivos por refactorización fueron brevemente mencionado en Gama et Alabama. (
1995 ). Josué Kerievsky tiene desarrollado refactorización para patrones dentro a más maduro y útil
formulario ( Kerievsky 2003 ).

Las refactorizaciones que tienen mayor impacto en la viabilidad del sistema son aquellas
motivadas por nuevos conocimientos sobre el dominio o aquellas que aclaran la expresión
del modelo a través del código. Este tipo de refactorización no reemplaza en modo alguno
las refactorizaciones a patrones de diseño o las micro-refactorizaciones, que deben

proceder de manera continua. se superpone otro nivel: refactorización para a Más adentro
modelo. ejecutando a refactorización establecido en

dominio visión con frecuencia implica a serie de micro-refactorizaciones, pero los motivación
es no sólo el estado de los código. Bastante, los micro-refactorizaciones proveer conveniente
unidades de cambiar hacia un mas perspicaz modelo. los meta es que no solamente lata a
desarrollador comprender qué los el código lo hace; él o ella también puede entender por
qué hace lo que hace y puede relacionar eso con el proceso en curso comunicación con los
dominio expertos

los catalogar en refactorización (Cazador de aves 1999) cubre más de los micro-
refactorizaciones que venir arriba regularmente. Cada uno está motivado principalmente
por algún problema que se puede observar en el propio código. Por contraste, dominio
modelos están transformado en tal a rango de formas como nuevo surgen ideas que a
exhaustivo catalogar haría ser imposible para compilar.

El modelado es tan intrínsecamente desestructurado como cualquier exploración. La
refactorización a una visión más profunda debería seguir donde quiera aprendiendo y
profundo pensando dirigir. Publicado colecciones de modelos exitosos lata ser servicial,
como discutido en Capítulo 11 , pero nosotros no debería obtener desviado difícil para
reducir dominio modelado para a libro de cocina o a caja de herramientas Modelado y
diseño llamada por creatividad.
los próximo seis capítulos voluntad sugerir algunos específico enfoques para pensando
sobre mejorando un dominio modelo, a lo largo de con los diseño que trae eso para la
vida.


modelos profundos

los tradicional manera de explicando objeto análisis implica identificando sustantivos y
verbos en los requisitos documentos y utilizando ellos como los inicial objetos y métodos.
Esta La explicación se reconoce como una simplificación excesiva que puede ser útil para
enseñar modelado de objetos a principiantes. los verdad es, aunque, que inicial modelos
generalmente están ingenuo y superficial, establecido en superficial conocimiento.

Por ejemplo, una vez trabajé en una aplicación de envío para la cual mi idea inicial de un
modelo de objetos involucraba barcos y contenedores. Los barcos se movían de un lugar a
otro. Los contenedores se asociaban y desasociaban mediante operaciones de ca rga y
descarga. Esa es una descripción precisa. de algunos físico Envío ocupaciones. Eso lo hace
no girar fuera para ser a muy útil modelo para Envío negocio software.

Finalmente, después meses trabajando con Envío expertos a través de muchos iteraciones,
nosotros evolucionó un bastante diferente modelo. Eso era menos obvio para a laico, pero
mucho más pertinente para los expertos. Eso era reenfocado en los negocio de entregando
carga.

Los barcos todavía estaban allí, pero abstraídos en la forma de un "viaje en barco", un
viaje particular programado para un barco, tren u otro medio de transporte. El barco en sí
era secundario y podía ser sustituido en los último minuto por mantenimiento o a
corrimiento calendario, tiempo los embarcación El viaje continuó según lo planeado. El
contenedor de envío casi desapareció del modelo. Emergió en a manipulación de la carga
solicitud en a diferente, muy complejo formulario, pero en los contexto de los original
solicitud, los envase era un Operacional detalle. los físico movimiento de El carga tomó a
espalda asiento para los transferencias de legal responsabilidad por que carga. Menos
objetos obvios, tal como los "cuenta de flete," llegó para los delantero.

Cuando sea nuevo objeto modeladores mostró arriba en los proyecto, qué era sus primero
¿sugerencia? los desaparecido clases: Embarcacion y envase. Ellos fueron inteligente
gente. Ellos sólo no había pasado a través de los procesos de descubrimiento.

A profundo modelo proporciona a lúcido expresión de los primario preocupaciones de los
dominio expertos y ellos más pertinente conocimiento tiempo eso mudas apagado los
superficial aspectos de los dominio. Esta definición no menciona la abstracción. Un modelo
profundo suele tener elementos abstractos, pero puede bien tener hormigón elementos

donde esos Corte para los corazón de los problema.

Versatilidad, sencillez, y explicativo energía venir desde a modelo que es verdaderamente en
melodía con los

dominio. Una rasgo tal modelos casi siempre tener es a sencillo, aunque posiblemente
abstracto, lenguaje que los negocio expertos me gusta para utilizar.


Modelo profundo/Diseño flexible

En a proceso de constante refactorización, los diseño sí mismo necesidades para apoyo
cambiar. Capítulo 10 miradas en formas para hacer a diseño fácil para trabajo con, ambas
cosas por esos cambiando eso y por los integrantes eso con otro partes de los sistema.

Ciertas características de un diseño facilitan su cambio y uso. no son complicados,
pero ellos están desafiante. "Flexible diseño" y formas para Acercarse eso están los
sujetos de Capítulo 10 _

Un poco de suerte es que el mismo acto de transformar el modelo y el código una y otra
vez, si cada cambiar refleja nuevo comprensión—puede traer sobre flexibilidad en sólo los
puntos donde cambio es más necesario, a lo largo de con fácil formas de haciendo los común
cosas. A bien gastado El guante se vuelve flexible en los puntos donde se doblan los
dedos, mientras que otras partes son rígidas y protectoras. Entonces aunque allí es a lote
de prueba y error involucrado en esta Acercarse para modelado y diseño, los cambios en
realidad pueden volverse más fáciles de hacer, y los cambios repetidos en realidad
moverse nosotros hacia a flexible diseño.

En adición para facilitando cambiar, a flexible diseño contribuye para los refinamiento de los
modelo en sí. A IMPULSADO POR MODELO DISEÑO soportes en dos piernas. A profundo modelo
hace posible un diseño expresivo. En los mismo hora, a diseño lata Realmente alimento
visión dentro los modelo descubrimiento proceso cuando eso posee los flexibilidad para
dejar a desarrollador experimentar y los claridad para show a desarrollador lo que está
sucediendo. Esta mitad del circuito de retroalimentación es esencial, porque el modelo que
buscamos por es no sólo a agradable colocar de ideas: eso es los Fundación de los sistema.


El proceso de descubrimiento

Para crear un diseño que realmente se ajuste al problema en cuestión, primero debe
tener un modelo que capture los central pertinente conceptos de los dominio.
Activamente buscando por estas conceptos e incorporarlos al diseño es el tema del
Capítulo 9 , "Convertir conceptos implícitos en explícitos".

Porque de los cerrar relación Entre modelo y diseño, los modelado proceso llega a un detener
Cuándo los código es duro para refactorizar Capítulo 10 , "Flexible Diseño," discute cómo
para escriba software para desarrolladores de software, y no menos importante para
usted mismo, de modo que sea productivo ampliarlo y cambiarlo. Esta esfuerzo va mano
en mano con más refinamientos para los modelo. Eso con frecuencia implica más avanzado
diseño tecnicas y más rigor en modelo definiciones

Por lo general, dependerá de la creatividad y el ensayo y error para encontrar buenas
formas de modelar los conceptos que descubra, pero a veces alguien ha establecido un
patrón que puede seguir. Los capítulos 11 y 12 discuten la aplicación de " patrones de
análisis " y " patrones de diseño ". Dichos patrones no son soluciones listas para usar,
pero alimentan su proceso de procesamiento de conocimientos y reducen su búsqueda.

Pero voy a comienzo Parte tercero con los más excitante evento en impulsado por el dominio
diseño. A veces, cuando el escenario es colocar con a DISEÑO IMPULSADO POR MODELOS y
explícito conceptos, usted tener a descubrimiento. Se abre una oportunidad para
transformar su software en algo más expresivo y versátil que usted previsto. Esta lata
significar nuevo caracteristicas o eso lata sólo significar los reemplazo de una gran parte de
código rígido con una expresión simple y flexible de un modelo más profundo. Aunque
tales avances no ocurren todos los días, son tan valiosos que cuando suceden, los
oportunidad necesidades para ser Reconocido y agarrado

Capítulo 8 dice los cierto historia de a proyecto en cual a proceso de refactorización hacia
visión más profunda LED para a descubrimiento. Esta experiencia es no algo usted lata
plan por.
Sin embargo, eso proporciona a bien contexto por pensando sobre dominio
refactorización [ Equipo LiB ]

[ Equipo LiB ]


Capítulo Ocho. Descubrimiento

los devoluciones desde refactorización están no lineal. Generalmente allí es a marginal regreso
por a pequeña esfuerzo, y los pequeña mejoras agregar arriba. Ellos pelear entropía, y ellos
están los primera línea protección contra a fosilizado legado. Pero algunos de los más
importante perspectivas venir abruptamente y enviar un shock a través de los proyecto.

Lentamente pero seguramente, los equipo asimila conocimiento y abdominales eso dentro a
modelo. Profundo modelos puede emerger gradualmente a través de una secuencia de
pequeñas refactorizaciones, un objeto a la vez: una asociación modificada aquí, a desplazado
responsabilidad allí.

Sin embargo, a menudo, la refactorización continua prepara el camino para algo menos
ordenado. Cada refinamiento de código y modelo da desarrolladores a más claro vista. Esta
claridad crea los potencial para descubrimiento de perspectivas. A prisa de cambiar Guías para a
modelo que corresponde en a Más adentro nivel a las realidades y prioridades de los usuarios.
La versatilidad y el poder explicativo aumentan repentinamente incluso como complejidad se
evapora

Esta clasificar de descubrimiento es no a técnica; eso es un evento. los desafío mentiras en
reconociendo Qué es sucediendo y decidiendo cómo para trato con eso. Para transmitir qué esta
experiencia siente me gusta, voy a decir una verdad historia de a proyecto I trabajó en algunos
años atrás, y cómo nosotros llegado en a muy valioso modelo profundo .


[ Equipo LiB ]

[ Equipo LiB ]


Historia de un avance
Después a largo Nuevo york invierno de refactorización, nosotros tenido llegado en a modelo que
capturado algunos de la clave conocimiento de los dominio y a diseño que hizo algunos verdadero
trabajo por los solicitud. Nosotros estaban desarrollando a centro parte de a grande solicitud por
gerente sindicado prestamos en un inversión Banco.

Cuándo Intel quiere para construir a bilion de dolares fábrica, ellos necesitar a préstamo que es
también grande por ninguna préstamo único empresa para llevar en, entonces los prestamistas
formulario a sindicato que quinielas su recursos para apoyo una instalación (ver barra lateral).
Un banco de inversión suele actuar como líder del sindicato, coordinando las transacciones y
otro servicios. Nuestro proyecto era para construir software para pista y apoyo esta todo el
proceso.


Un modelo decente, y sin embargo . . .

Nosotros fueron sentimiento bonito bueno. cuatro meses antes de, nosotros tenido estado en
profundo problema con a base de código heredada completamente inviable, que desde
entonces habíamos luchado en un DISEÑO IMPULSADO POR MODELO coherente .

los modelo reflejado en Figura 8.1 hace los común caso muy sencillo. los Préstamo Inversión es
un derivado objeto que representa a especial del inversionista contribución para los Préstamo,
proporcional para su parte en los instalación _


Figura 8.1. Un modelo que supone que las acciones del
prestamista son fijas

Pero allí fueron algunos desconcertante señales. Nosotros conservó tropezando sobre
inesperado requisitos que complicado los diseño. A importante ejemplo era los progresivo
comprensión que los Comparte en a Facilidad eran solo una pauta para la participación en
cualquier retiro de préstamo en particular. Cuando el prestatario peticiones su dinero, los líder
de los sindicato llamadas todos miembros por sus Comparte.

Cuando se les llama, los inversores suelen soltar su parte, pero a menudo negocian con otros
miembros. de los sindicato y invertir menos (o más). Nosotros tenido acomodado esta por
agregando Ajustes de préstamo para los modelo.


Figura 8.2. Un modelo modi ficado gradualmente para resolver
problemas. Los Ajustes de Préstamo rastrean las desviaciones de la
parte que un prestamista acordó originalmente en el Fondo.

Refinamientos de esta tipo permitido nosotros para mantenerse arriba como los normas de varios
actas se convirtió más claro Pero la complejidad estaba aumentando y no parecíamos estar
convergiendo rápidamente en una funcionalidad realmente sólida.

Aún más preocupantes fueron las sutiles inconsistencias de redondeo que no habíamos podido
eliminar con cada vez más complejo algoritmos Cierto, en a $100 millón (MM) trato, no una se
preocupa sobre donde el extra centavos ir, pero banqueros no confianza software que no poder
meticulosamente cuenta por esos centavos Nosotros comenzó para sospechar que nuestro
dificultades fueron sintomático de a básico diseño problema.

What Is a "Facility"?

A "facility" in this context is not a building. As on most projects, specialized terminology
from the domain experts entered our vocabulary and became part of the UBIQUITOUS
LANGUAGE. In the domain of commercial banking, a facility is a commitment by a
company to lend. Your credit card is a facility that entitles you to borrow on demand up
to a prearranged limit at a predetermined interest rate. When you use the card, you
create an outstanding loan, and each additional charge is a drawdown against your
facility that increases the loan. Finally you pay back the loan principal. You may also
pay an annual fee. This is a fee for the privilege of having the card (the facility) and is
independent of your loan.

el avance

De repente una semana eso amaneció en nosotros qué era incorrecto. Nuestro modelo atado
juntos los Instalaciones y Prestar acciones de una manera que no era apropiada para el
negocio . Esta revelación tuvo amplias repercusiones. Con los expertos en negocios
asintiendo, ayudando con entusiasmo y, me atrevo a decir, preguntándose qué tomó
nosotros entonces largo—nosotros Troceado fuera a nuevo modelo en a pizarron. Aunque los
detalles no había gelificado aún, nosotros supo los crucial rasgo de los nuevo modelo:
Comparte de los Préstamo y esos de los Instalaciones pudo cambiar independientemente
de cada otro. Con que visión, nosotros caminado a través de numeroso escenarios utilizando
a visualización de los nuevo modelo que miró algo así :


Figura 8.3. Una disposición distribuida en función de las
acciones de la Instalación

Esta diagrama dice que los prestatario posee elegido para dibujar un inicial $ 50 millones
desde los $100MM comprometidos bajo los instalación _ los Tres prestamistas chip en sus
Comparte en exacto proporción para la instalación Comparte, resultante en a $ 50 millones
Préstamo dividido entre los prestamistas

Luego, en la Figura 8.4 , el prestatario retira $ 30MM adicionales, lo que eleva su Préstamo
pendiente a
$80MM, aún por debajo del límite de $100MM del Fondo . Esta vez, la empresa B elige no
participar, dejando que la empresa A tome una parte adicional. Las acciones d e la disposición
reflejan estas inversiones opciones Cuándo los reducción montos están agregado para los
préstamo , los Comparte de los préstamo son no más extenso proporcional para los Comparte
de los instalación _ Esta es común.


Figura 8.4. El prestamista B opta por no participar en un
segundo retiro.

Figura 8.5. Los pagos de principal siempre se distribuyen
proporcionalmente a las participaciones en el Préstamo pendiente.

Cuándo los prestatario paga abajo los préstamo , los dinero es dividido entre los prestamistas
según para las acciones de los préstamo , no los instalación _ Igualmente, interesar pagos
voluntad ser dividido según para el préstamo Comparte.


Figura 8.6. Los pagos de tarifas siempre se distribuyen
proporcionalmente a las acciones en la Instalación.

En los otro mano, Cuándo los prestatario paga a tarifa por los privilegio de teniendo los
Instalaciones disponible, este dinero es dividido según para los Instalaciones Comparte,
independientemente de quién Realmente posee prestado dinero. los Préstamo es sin alterar por
tarifa pagos Ahí están incluso escenarios en cual prestamistas comercio acciones de Tarifa por
separado desde sus Comparte de interesar, y entonces en.


Un modelo más profundo

Tuvimos dos percepciones profundas. Primero fue la realización de que nuestras "Inversiones"
e "Inversiones de préstamo" fueron sólo dos especial casos de a general y fundamental concepto:
Comparte. Comparte de un instalaciones, Comparte de a préstamo, Comparte de a pago
distribucion _ Comparte, Comparte En todas partes. Comparte de cualquier divisible valor.

A pocos tumultuoso días luego I tenido esbozado a modelo de Comparte, dibujo en los idioma
usado en el discusiones con expertos y los escenarios nosotros tenido explorado juntos.

Figura 8.7. Un modelo abstracto de acciones

También esbocé un nuevo modelo de préstamo para acompañarlo.


Figura 8.8. El modelo de préstamo usando Share Pie

Ahí fueron no más extenso especializado objetos por los Comparte de a Instalaciones o a
préstamo _ Ellos ambas cosas estaban rotos abajo dentro los más intuitivo Compartir _
Tarta. " Esta generalización permitido los Introducción de "acciones Matemáticas," vastamente
simplificando los cálculo de Comparte en ninguna transacción, y haciendo esos calculos más
expresivo, conciso, y fácilmente conjunto.

Pero más de todos, problemas fuimos fuera porque los nuevo modelo remoto un inapropiado
restricción. Liberó las Acciones del Préstamo para apartarse de las proporciones de las
Acciones del Fondo , manteniendo en lugar los válido restricciones en totales, tarifa
distribuciones, y entonces en. los Cuota Tarta de el Préstamo se podía ajustar directamente,
por lo que el Ajuste del Préstamo ya no era necesario, y una gran cantidad de caso especial
lógica era eliminado

los Préstamo Inversión tenido desaparecido, y en esta punto nosotros dio cuenta que
"préstamo inversión" no estaba a bancario término. En hecho, los negocio expertos tenido dicho
nosotros a número de veces que ellos no lo entendí Se habían cedido a nuestro conocimiento del
software y asumieron que era útil para el diseño técnico. En realidad, lo habíamos creado
basándonos en nuestra comprensión incompleta del dominio.

De repente, sobre la base de esta nueva forma de ver el dominio, podríamos analizar todos los
escenarios nosotros tenido siempre encontrado relativamente sin esfuerzo, mucho más
simplemente que siempre antes de. Y nuestro modelo diagramas hecha Perfecto sentido para los
negocio expertos, quién tenido con frecuencia indicado que los diagramas eran "demasiado
técnicos" para ellos. Incluso dibujando en una pizarra, pudimos ver que nuestro más persistente
redondeo problemas haría ser tirado fuera por los raíces, permitiendo nosotros para chatarra
algunos de los Complicado redondeo código.

Nuestro nuevo modelo funcionó bien. Realmente, muy bien.

¡Y todos nos sentimos enfermos!


Una decisión aleccionadora

Tú puede que razonablemente asumir que nosotros haría tener estado exaltado en esta punto.
Nosotros fueron no. Estábamos bajo una fecha límite severa; el proyecto ya estaba
peligrosamente retrasado. nuestro dominante emoción era miedo.

los evangelio de refactorización es que usted siempre ir en pequeña pasos, siempre acuerdo todo
trabajando. Pero refactorizar nuestro código a este nuevo modelo requeriría cambiar una gran
cantidad de código de soporte, y habría pocos, si es que hubiera alguno, puntos de parada
estables en el medio. Podríamos ver algunas pequeñas mejoras. nosotros pudo hacer, pero
ninguna que haría llevar nosotros más cerca para los nuevo concepto. Nosotros podía ver a
secuencia de pequeña pasos para obtener allí, pero partes de los solicitud haría ser discapacitado
a lo largo de el camino. Y esto fue antes de la era en que las pruebas automatizadas se usaban
ampliamente en este tipo de proyectos. Tuvimos ninguna, entonces allí era ligado para ser
imprevisto rotura.

E iba a requerir esfuerzo. Ya estábamos agotados por meses de emp ujar.

En esta punto, nosotros tenido a reunión con nuestro proyecto gerente que I voluntad Nunca
olvidar. Nuestro el gerente era un inteligente y audaz hombre. Él pedido a serie de preguntas:


P1: ¿Cómo largo haría eso llevar para obtener espalda para Actual funcionalidad con los
nuevo ¿diseño?

A1: acerca de Tres semanas.

P2: Podría nosotros resolver los problemas sin ¿eso?

A2: Probablemente. Pero no manera para ser Por supuesto.

P3: ¿Podría nosotros ser poder para moverse hacia adelante en los próximo liberar si
nosotros no lo hizo hacer eso ¿ahora?

A3: Adelante movimiento haría ser lento sin los cambiar. Y los cambiar haría ser mucho
más difícil una vez nosotros tenido un instalado base.

P4: Hizo nosotros pensar eso era los Correcto cosa para ¿hacer?

A4: Nosotros supo los político situación era inestable, entonces casarse afrontar si
nosotros tenido para. Y nosotros estaban cansados. Pero, sí, eso era a más simple
solución que encajar los negocio mucho mejor. En los largo plazo eso era más bajo
riesgo.


Él dio nosotros los avanzar y dicho nosotros él haría encargarse de los calor. He siempre

tenido tremenda admiración por los coraje y confianza eso tomó por él para hacer que
decisión.

Nosotros Arrestado nuestro campo de tiro al blanco y tiene eso hecho en Tres semanas.
Eso era a grande trabajo, pero eso fuimos sorprendentemente suave.


la recompensa

los desconcertantemente inesperado requisito cambios detenido. los redondeo lógica, aunque
nunca exactamente sencillo, estabilizado y hecha sentido. Nosotros entregado versión una y
los manera era claro a versión dos. Mi nervioso desglose era estrechamente evitado

A medida que evolucionó la versión dos, Share Pie se convirtió en el tema unificador de
toda la aplicación. Técnico gente y negocio expertos usado eso para discutir los sistema.
Márketing gente usado eso para explicar las características a los clientes potenciales. Esos
prospectos y clientes lo captaron de inmediato y lo usaron para hablar sobre las
características. Realmente se convirtió en parte del LENGUAJE UBIC UO porque eso tiene para los
corazón de qué préstamo sindicación es sobre.

[ Equipo LiB ]

[ Equipo LiB ]


Oportunidades
Cuándo los perspectiva de a descubrimiento para a Más adentro modelo presenta sí mismo, eso
es con frecuencia aterrador. Tal un cambio tiene mayor oportunidad y mayor riesgo que la
mayoría de las refactorizaciones. Y el momento puede ser inoportuno.

Mucho como nosotros puede que me gusta eso para ser de lo contrario, Progreso no es a
suave paseo. los transición para a muy profundo modelo es a profundo cambio en tu pensando
y demandas a importante cambiar para los diseño. En muchos proyectos los más importante
Progreso en modelo y diseño venir en estas avances

[ Equipo LiB ]

[ Equipo LiB ]


Centrarse en lo básico
no volverse paralizado difícil para traer sobre a descubrimiento. los posibilidad generalmente
llega después de muchos modesto refactorizaciones. Más de los hora es gastado haciendo poco a
poco mejoras, con información del modelo emergente gradualmente durante cada sucesivo
refinamiento.

Para colocar los escenario por a descubrimiento, concentrado en conocimiento crujido y
cultivando a robusto ubicuo IDIOMA . Investigacion por importante dominio conceptos y hacer ellos
explícito en los modelo (como discutido en Capítulo 9 ). Refinar los diseño para ser proveedor
(ver Capítulo 10 ). Destilar los modelo (ver Capítulo 15 ). Presione estas palancas más
predecibles, que aumentan la claridad, generalmente un precursor de avances

no sostener espalda desde modesto mejoras, cual gradualmente profundizar los modelo, incluso si
confinado dentro los mismo general conceptual estructura. no ser paralizado por mirando también
lejos hacia adelante. Ser sólo vigilante por los oportunidad.

[ Equipo LiB ]

[ Equipo LiB ]


Epílogo: una cascada de nuevos conocimientos
Que descubrimiento tiene nosotros fuera de los bosque, pero eso era no los final de los historia.
los Más adentro modelo abierto inesperado oportunidades para hacer los solicitud mas rico y los
diseño más claro

Apenas unas semanas después del lanzamiento de la versión Share Pie del software, notamos
otra incómoda aspecto de los modelo que era complicando los diseño. Un importante ENTIDAD era
falta, es ausencia partida extra responsabilidades para ser tomado arriba por otro objetos.
Específicamente, allí Había reglas significativas que regían los retiros de préstamos, el pago de
tarifas, etc., y toda esta lógica estaba abarrotada dentro varios métodos en los Instalaciones y
préstamo _ Estas diseño problemas, cual tenido sido apenas perceptible antes del avance de
Share Pie , se hizo evidente con nuestro campo de visión más claro. Ahora nosotros notado
condiciones haciendo estallar arriba en nuestro discusiones que fueron en ningún lugar para ser
fundar en el modelo—términos tal como "transacción" (sentido a financiero transacción)—que
nosotros empezado para darse cuenta de que eran siendo implícito por todos esos Complicado
métodos.

Siguiendo un proceso similar al descrito anteriormente (aunque, afortunada mente, en mucho
menos tiempo presión) LED para aún otro ronda de perspectivas y a todavía Más adentro
modelo. Esta nuevo modelo hizo explícitos esos conceptos implícitos, como tipos de
Transacciones , y al mismo tiempo simplificó las Posiciones (un abstracción incluso los
Instalaciones y préstamo ). Eso se convirtió fácil para definir los diversas transacciones
nosotros tenido, a lo largo de con sus normas, negociando procedimientos, y aprobación
procesos, y todo en relativamente Autoexplicativo código.


Figura 8.9. Otro avance del modelo que siguió varias semanas después.
Las restricciones sobre las transacciones se pueden expresar con fácil
precisión.

Como suele ser el caso después de un verdadero avance hacia un modelo profundo, la claridad
y la simplicidad del nuevo diseño, conjunto con los mejorado comunicación establecido en los
nuevo UBIC UO LENGUA , tenía LED para aún otro modelado descubrimiento.

Nuestro ritmo de desarrollo era acelerador en a escenario donde más proyectos están
comenzando para atascar en los masa y complejidad de qué posee ya estado construido.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo Nueve. Hacer explícitos los
conceptos implícitos
Profundo modelado sonidos estupendo, pero cómo hacer usted Realmente hacer ¿eso? A
profundo modelo posee energía porque contiene los conceptos centrales y las abstracciones que
pueden expresar de manera sucinta y flexible el conocimiento esencial de los de los usuarios
ocupaciones, sus problemas, y sus soluciones los primero paso es para representan de alguna
manera los conceptos esenciales del dominio en el modelo. El refinamiento viene después,
después de sucesivas iteraciones de conocimiento crujido y refactorización Pero esta proceso De
Verdad obtiene dentro equipo cuando un importante concepto es Reconocido y hecha explícito en
los modelo y diseño.

Muchas transformaciones de los modelos de dominio y el código correspondiente
ocurren cuando los desarrolladores reconocen un concepto que se ha insinuado en
la discusión o se presenta impl ícitamente. en los diseño, y ellos luego representar
eso explícitamente en los modelo con una o más objetos o relaciones

En ocasiones, esta transformación de un concepto anteriormente implícito en uno explícito es
un gran avance. que Guías para a profundo modelo. Más con frecuencia, aunque, los
descubrimiento llega luego, después de que una serie de conceptos importantes estén explícitos
en el modelo; después de que las refactorizaciones sucesivas hayan ajustado sus
responsabilidades repetidamente, cambió sus relaciones con otro objetos, y incluso cambiado sus
nombres a pocos veces. Todo finalmente broches de presión dentro enfocar. Pero los proceso
empieza con reconocer los implícito conceptos en algunos formulario, sin embargo crudo.


[ Equipo LiB ]

[ Equipo LiB ]


Excavando conceptos
Los desarrolladores tienen que sensibilizarse a las sugerencias que revelan conceptos implícitos
ocultos y, a veces, ellos tener para proactivamente búsqueda ellos fuera. Más tal descubrimientos
venir desde escuchando al idioma de los equipo, recuento torpeza en los diseño y aparente
contradicciones en las declaraciones de los expertos, extrayendo la literatura del dominio y
haciendo mucha, mucha experimentación.


Escucha a Idioma

Tú mayo recordar un experiencia me gusta esta: los usuarios tener siempre habló sobre algunos ít
en un informe. los ít es compilado desde atributos de varios objetos y quizás incluso a directo
consulta de base de datos. los mismo datos colocar es ensamblado en otro parte de los solicitud
en pedido para regalo o informar o derivar algo. Pero usted tener Nunca visto los necesitar por un
objeto. Probablemente, usted nunca tienen De Verdad entendido qué los usuarios quiso decir por
a especial término y tenido no dio cuenta eso era importante

Luego de repente a luz llega en en tu cabeza. los nombre de los ít en que informe designa un
concepto de dominio importante. Hablas con entusiasmo con tus expertos sobre tu nueva
perspectiva. tal vez ellos show alivio que usted finalmente tiene eso. Quizás ellos bostezo porque
ellos han tomado eso por otorgado todo el tiempo. Cualquiera manera, usted comienzo para
dibujar modelo diagramas en los tablero que llenar en por algunos mano saludando que siempre
has hecho antes. Los usuarios te corrigen en los detalles de cómo se conecta el nuevo modelo,
pero usted lata decir que allí es a cambiar en los calidad de los discusión. Tú y los los usuarios
entienden cada otro más precisamente, y demostraciones de modelo interacciones para resolver
los escenarios específicos se han vuelto más naturales. El lenguaje del modelo de dominio se ha
vuelto más poderoso. Tú refactorizar los código para reflejar los nuevo modelo y encontrar usted
tener a limpiador diseño.

Escuche el lenguaje que usan los expertos del dominio. ¿Hay términos que expresan
sucintamente algo complicado? ¿Están corrigiendo su elección de palabras (tal vez
diplomáticamente)? Hacer los perplejo mira en sus caras ir fuera Cuándo usted utilizar
a frase en particular? Estas están consejos de a concepto que puede que beneficio los
modelo.

Esta no es la vieja noción de "los sustantivos son objetos". Escuchar una palabra nueva
produce una pista, que sigues arriba con conversacion y conocimiento crujir, con los meta de
tallado fuera a limpio, concepto útil. Cuándo los usuarios o dominio expertos utilizar vocabulario
que es en ningún lugar en los diseño, que es una advertencia firmar. Eso es a doblemente fuerte
advertencia Cuándo ambas cosas los desarrolladores y los dominio expertos están usando
condiciones que están no en los diseño.

O quizás eso es mejor para Mira en eso como un oportunidad. los UBIC UO IDIOMA es hecha arriba
de el vocabulario que impregna habla, documentos, modelo diagramas, y incluso código. Si a
término es ausente de los diseño, eso es un oportunidad para mejorar los modelo y diseño por
incluso eso.


Ejemplo
Escuchar un concepto faltante en el envío Modelo

los equipo tenido ya desarrollado a trabajando solicitud que pudo libro a carga. Ellos fueron
empezando a construir un "operaciones apoyo" solicitud que haría ayuda hacer juegos malabares
los trabajo pedidos por cargando y descarga cargas en los origen y destino y en transferencias

Entre buques.

los reserva solicitud usado a enrutamiento motor para plan los viaje por a carga. Cada pierna de
los el viaje se almacenó en una fila de una tabla de base de datos, indicando el ID del viaje
del barco (un viaje en particular por a especial Embarcacion) programado para llevar los carga,
los ubicación donde eso haría ser cargado, y el ubicación donde eso haría ser descargado



Figura 9.1.




Vamos escuchar a escondidas en a conversacion (fuertemente abreviado) Entre los
desarrollador y a experto en envíos .

Desarrollador: I querer para hacer Por supuesto los "carga reservaciones" mesa posee todos
los datos que los aplicación de operaciones voluntad necesitar.

Experto: Son yendo para necesitar los entero itinerario por los carga _ Qué información lo
hace eso ¿ten ahora?

Desarrollador: los carga IDENTIFICACIÓN, los embarcación viaje, los cargando Puerto, y los
descarga Puerto por cada pierna.

Experto: Qué sobre los ¿fecha? Operaciones voluntad necesitar para contrato manejo
trabajo establecido en lo esperado veces.

Desarrollador: Bien, que lata ser derivado desde los calendario de los embarcación viaje. los
mesa datos está normalizado.

Experto: Sí, eso es normal para necesitar los fecha. Operaciones gente utilizar estas tipos de
itinerarios para planificar para próximo manejo trabajo.

Desarrollador: Si . . . OK, ellos definitivamente tener acceso para los fechas. los operaciones
aplicación de gestión voluntad ser poder para proveer los entero cargando y descarga secuencia,
con los fecha de cada manejo operación. los "itinerario," I adivinar usted haría decir.

Experto: Bien. El itinerario es lo principal que necesitarán. En realidad, ya sabes, la
aplicación de reservas posee a menú ít que voluntad imprimir un itinerario o Email eso para los
cliente. Poder usted usa eso ¿de alguna manera?

Desarrollador: Eso es sólo a informe, I pensar. Nosotros no lo haré ser poder para base los
operaciones solicitud en ese.

[ El desarrollador se ve pensativo, luego emocionado. ]

Desarrollador: Entonces, este itinerario es realmente el vínculo entre la reserva y las
operaciones.

Experto: Sí, y también algunas relaciones con los clientes.

Desarrollador: [ Dibujar a diagrama en los pizarron. ] Entonces haría usted decir eso es algo me
gusta ¿esta?



Figura 9.2.




Experto: Sí, que mira básicamente Correcto. Para cada pierna tú lo harías me gusta para ver
los embarcación viaje, los cargar y descargar ubicación, y hora.

Desarrollador: Entonces, una vez que creamos el objeto Tramo , puede derivar los tiempos
del cronograma de viaje del barco. Podemos hacer del objeto Itinerario nuestro principal
punto de contacto con la aplicación de operaciones. Y nosotros lata volver a escribir que
itinerario informe para utilizar esta, entonces bien obtener los dominio lógica de nuevo en los
dominio capa.

Experto: I no lo hizo seguir todos de que, pero usted están Correcto que los dos principal usos
por los Itinerario están en el informe en reserva y en los operaciones solicitud.

Desarrollador: ¡Oye! Nosotros lata hacer los Enrutamiento Servicio interfaz regreso un
itinerario objeto en lugar de poniendo los datos en los base de datos mesa. Que manera los
enrutamiento motor no necesitar para saber acerca de nuestro mesas.

Experto: ¿Eh?

Desarrollador: I significar, voy a hacer los enrutamiento motor sólo regreso un Itinerario .
Luego eso lata ser salvado en el base de datos por los reserva solicitud Cuándo los descanso de
los reserva es salvado.

Experto: ¿Quieres decir que ahora no es así?

los desarrollador luego fuimos apagado para hablar con los otro desarrolladores involucrado en los
enrutamiento proceso. ellos hash fuera los cambios para los modelo y los trascendencia por los
diseño, vocación en los expertos en envíos Cuándo necesario. Ellos llegó arriba con los diagrama
en Figura 9.3 .



Figura 9.3.

Próximo, los desarrolladores refactorizado los código para reflejar los nuevo modelo. Ellos hizo
eso en a serie de dos o tres refactorizaciones, pero en rápida sucesión, dentro de una semana,
excepto para simplificar el informe de itinerario en los reserva solicitud, cual ellos tomó cuidado
de temprano los siguiente semana.

El desarrollador había estado escuchando lo suficientemente atentamente al experto en envíos
para darse cuenta de lo importante que era para él el concepto de un "itinerario". Es cierto que
ya se estaban recopilando todos los datos y el comportamiento era implícito en los itinerario
informe, pero los explícito Itinerario como parte de los modelo abierto _ oportunidades

Itinerario explícito :

1. Definición los interfaz de los Enrutamiento Servicio más expresivamente

2. desacoplamiento los Enrutamiento Servicio desde los reserva base de datos mesas

3. aclarando los relación Entre los reserva solicitud y los operaciones aplicación de
soporte (los intercambio de los Itinerario objeto)

4. Reduciendo duplicación, porque los Itinerario deriva cargando descargando veces por
ambas cosas la reserva informe y los operaciones apoyo solicitud

5. eliminando dominio lógica desde los reserva informe y colocación eso en los aislado dominio
capa

6. En expansión los UBIC UO IDIOMA , permitiendo a más preciso discusión de los modelo y
diseño Entre desarrolladores y dominio expertos y entre los desarrolladores ellos mismos

6.

Escudriñar Torpeza

El concepto que necesita no siempre está flotando en la superficie, emergiendo en
conversaciones o documentos. Tú mayo tener para cavar y inventar. los lugar para cavar es
los más incómodo parte de tu diseño. los lugar donde procedimientos están haciendo
Complicado cosas que están duro para explicar. El lugar donde cada nuevo requisito parece
para agregar complejidad.

A veces eso lata ser duro para reconocer que allí incluso es a desaparecido concepto. Tú mayo
tener objetos haciendo todos los trabajo pero encontrar algunos de los responsabilidades
incómodo. O, si usted hacer darse cuenta de algo Está perdido, a modelo solución mayo eludir
usted.

Ahora debe involucrar activamente a los expertos del dominio en la búsqueda. Si tiene suerte,
pueden disfrutar jugando con ideas y experimentando con el modelo. Si no tienes tanta suerte,
tú y tu compañero desarrolladores voluntad tener para venir arriba con los ideas, utilizando los
dominio experto como a validador, viendo por incomodidad o reconocimiento en su o su rostro.


Ejemplo
Ganar interés de la manera difícil

La siguiente historia se desarrolla en una empresa financiera hipotética que invierte en
préstamos comerciales y otros con intereses activos. Un solicitud que pistas esos inversiones y
los ganancias de ellos posee estado evolucionando incrementalmente, rasgo por rasgo. Cada
noche, una componente era para ejecutar como un script por lotes, calculando todos los
intereses y tarifas del día y luego registrándolos adecuadamente en los de la empresa
contabilidad software.


Figura 9.4. Un modelo incómodo

El script por lotes nocturno iteraba a través de cada activo , diciéndole a cada uno que
calculeInterestForDate() en que días fecha. los texto tomó los regreso valor (los cantidad
ganada) y pasó esta cantidad, junto con el nombre de un libro mayor específico, a un
SERVIC IO que proporcionó los público interfaz de los contabilidad programa. Que software al
corriente los Monto para el nombrado libro mayor. los texto fuimos a través de a similar
proceso para obtener los días Tarifa desde cada activo , contabilización ellos para a diferente
libro mayor.

A desarrollador tenido estado luchando con los creciente complejidad de calculador interesar. Ella
empezado a sospechar un oportunidad por a modelo mejor adecuado para los tarea. Esta
desarrollador pedido su dominio favorito experto para ayuda su cavar dentro los problema área.

Desarrollador: Nuestra calculadora de intereses se está saliendo de control.

Experto: Esa es una parte complicada. Todavía tenemos más casos que hemos estado
reteniendo.

Desarrollador: Lo sé. Podemos agregar nuevos tipos de interés sustituyendo una
calculadora de intereses diferente. Pero qué fueron teniendo los más problema con Correcto
ahora es todos estas especial casos Cuando ellos no pagar los interesar en calendario.

Experto: Esos realmente no son casos especiales. Hay mucha flexibilidad cuando la gente
paga.

Desarrollador: Atrás Cuándo nosotros factorizado fuera los Interesar Calculadora desde los
Activo , eso ayudado a lote. Nosotros mayo necesitar para descanso eso arriba más.

Experto: Bien.

Desarrollador: Estaba pensando que podría tener una forma de hablar sobre este cálculo de
intereses.

Experto: ¿Qué quieres decir?

Desarrollador: Bien, por ejemplo, fueron seguimiento los interesar vencer pero no pagado
dentro de un período contable. Hacer usted tener a nombre por ¿que?

Experto: Bien, nosotros no De Verdad hacer eso me gusta que. los interesar ganado y los
pago están bastante separado publicaciones

Desarrollador: ¿Entonces no necesitas ese número?

Experto: Bueno, a veces podemos verlo, pero no es la forma en que hacemos negocios.

Desarrollador: OK, entonces si los pago y interesar están separar, quizás nosotros deberían
modelo ellos de esa manera. Cómo lo hace esta ¿Mira? [ Dibujar en pizarra ]



Figura 9.5.




Experto: Tiene sentido, supongo. Pero lo acabas de mover de un lugar a otro.

Desarrollador: Excepto que ahora la Calculadora de intereses solo realiza un seguimiento
de los intereses ganados, y el
Pago mantiene que número por separado. Eso no tiene simplificado eso a lote, pero lo hace eso

mejor reflejar tu

¿Práctica de negocios?

Experto: Ah. Veo. ¿Podríamos tener un historial de intereses también? Como el Historial
de pagos .

Desarrollador: Sí, que posee estado solicitado como a nuevo rasgo. Pero que pudo tener estado
agregado sobre la original diseño.

Experto: Oh. Bien, Cuándo I vio interesar y Pago Historia apartado me gusta que, I
pensamiento estaba dividiendo el interés para organizarlo más como el Historial de pagos .
Sabes algo sobre devengo base ¿contabilidad?

Desarrollador: Por favor explique.

Experto: Todos los días, o cuando lo requiera el cronograma, tenemos una acumulación de
intereses que se contabiliza para a libro mayor. los pagos están al corriente a diferente
manera. Esta agregar usted tener aquí es un poquito incómodo.

Desarrollador: Estás diciendo que si nosotros mantenerse a lista de "devengos", ellos pudo
ser agregado o . . . "al corriente" como necesario.

Experto: Probablemente al corriente en los devengo fecha, pero sí, agregado cualquier
momento. Tarifa trabajo los mismo camino, al corriente para a diferente libro mayor, de curso.

Desarrollador: Realmente, los interesar cálculo haría ser más simple si eso era hecho sólo por
una día, o período. Y luego nosotros pudo sólo colgar en para ellos todos. Cómo sobre ¿esta?



Figura 9.6.




Experto: Por supuesto. Eso mira bueno. Yo soy no Por supuesto por qué esta haría ser más
fácil por usted. Pero básicamente, que hace ninguna activo valioso es qué eso lata acumularse
en interesar, Tarifa, y entonces en.

Desarrollador: Tú dijo Tarifa trabajo los mismo ¿manera? Ellos . . . qué era eso . . . correo para
diferente libros de contabilidad?

Figura 9.7.




Desarrollador: Con esta modelo, nosotros obtener los interesar cálculo, o bastante, los devengo
cálculo lógica que era en los Interesar Calculadora apartado desde seguimiento. Y I no había
notado Hasta que ahora cuánto duplicación allí es en los Tarifa calculadora _ También, ahora los
diferente tipos de Tarifa lata fácilmente agregarse _

Experto: Sí, el cálculo antes era correcto, pero ahora puedo ver todo.

Porque los Calculadora clases no había estado directamente acoplado con otro partes de los
diseño, esta fue una refactorización bastante fácil. El desarrollador pudo reescribir las
pruebas unitarias para usar el nuevo lenguaje en a pocos horas y tenido los nuevo diseño
trabajando tarde los próximo día. Ella terminado arriba con este.


Figura 9.8. Un modelo más profundo después de la
refactorización

En la aplicación refactorizada, el script por lotes nocturno le dice a cada activo que
calcularAccrualsThroughDate() . El valor de retorno es una colección de Devengos , cada
uno de los cuales

importes que contabiliza en el libro mayor indicado.

El nuevo modelo tiene varias ventajas. El cambio

1. Enriquece los UBIC UO IDIOMA con los término "devengo"

2. desacopla devengo desde pago

3. Mueve dominio conocimiento (tal como cual libro mayor para correo para) desde los
texto y dentro el dominio capa

4. trae Tarifa y interesar juntos en a manera que encaja los negocio y elimina duplicación en el
código

5. proporciona a simple sendero por agregando nuevo variaciones de Tarifa y interesar
como Cronogramas de acumulación

Esta vez, el desarrollador tuvo que buscar los nuevos conceptos que necesitaba. Ella
podía ver la incomodidad de los interesar calculos y hecha a comprometido esfuerzo para
Mira por a respuesta más profunda.

Ella era afortunado para tener un inteligente y motivado compañero en los bancario experto. Con
a más pasivo fuente de pericia, ella haría tener hecha más falso empieza y dependía más en otros
desarrolladores como lluvia de ideas socios. Progreso haría tener estado Más lento, pero todavía
posible.


contemplar las contradicciones

Diferente dominio expertos ver cosas diferente formas establecido en sus experiencia y
necesidades. Incluso lo mismo persona proporciona información que es lógicamente
inconsistente después Cuidado análisis. Tal molestas contradicciones, cual nosotros encuentro
todos los hora Cuándo excavación dentro programa requisitos, lata ser grandes pistas para
modelos más profundos. Algunas son solo variaciones en la terminología o se basan en
malentendidos. Pero hay un residuo en el que dos declaraciones fácticas de expertos parecen
contradecirse.

los astrónomo galileo una vez planteado a paradoja. los evidencia de los Sentidos claramente
indica que la Tierra es estacionaria: la gente no está siendo arrastrada y rezagada. Sin
embargo, Copérnico había hecho a convincente argumento que los tierra era Moviente alrededor
los sol bastante rápidamente. reconciliando esto puede que revelar algo profundo sobre cómo
naturaleza obras.

galileo ideado a pensamiento experimentar. Si a jinete caído a bola desde a corriendo caballo,
donde verdad ¿otoño? De curso, los bola haría moverse a lo largo de con los caballo Hasta que
eso golpear los terrestre por los los pies del caballo, como si el caballo estuviera parado. De
esto dedujo una forma temprana de la idea de inercia marcos de referencia, resolviendo los
paradoja y principal para a mucho más útil modelo de los físicos de movimiento.

está bien. Nuestro contradicciones están generalmente no entonces interesante, ni los
trascendencia entonces profundo. Incluso así que esto mismo patrón de pensamiento con
frecuencia ayuda atravesar los superficial capas de a problema dominio dentro más profundo
visión.

Eso es no práctico para conciliar todos contradicciones, y eso mayo no incluso ser deseable. (
Capítulo 14 excavaciones dentro cómo para decidir y cómo para administrar los resultado.) Sin
embargo, incluso Cuándo a contradicción es izquierda en lugar, contemplación de cómo dos
declaraciones pudo ambas cosas aplicar para los mismo externo la realidad puede ser revelador

Leer el libro

no pasar por alto los obvio Cuándo buscando modelo conceptos. En muchos campos, usted lata
encontrar libros eso explica los fundamental conceptos y convencional sabiduría. Tú todavía tener
para trabajo con tu dominio propio expertos para destilar los parte pertinente para tu problema y
para crujido eso dentro algo adecuado para orientado a objetos software. Pero usted mayo ser
poder para comienzo con a coherente, profundamente considerado vista.


Ejemplo
Ganar interés por el Libro

Vamos imagina a diferente guión por los seguimiento de inversiones solicitud discutido en los
ejemplo anterior. Al igual que antes, la historia comienza cuando el desarrollador se da cuenta
de que el diseño se está volviendo difícil de manejar. particularmente los Interesar
calculadora _ Pero en esta guión, los dominio del experto las responsabilidades principales
están en otra parte y no tiene mucho interés en ayudar en el proyecto de desarrollo de
software. En este escenario, el desarrollador no podía recurrir al experto para una sesión de
lluvia de ideas para investigar los conceptos faltantes que sospechaba que acechaban bajo la
superficie.

En lugar de, ella fuimos para los librería. Después a poco hojeada, ella fundar un introductorio
libro de contabilidad ella apreciado, y ella desnatado eso. Ella descubierto a entero sistema de
bien definido conceptos. Un experto que particularmente despedido su pensando:

devengo Base contabilidad _ Esta método reconoce ingreso Cuándo eso es ganado,
incluso si eso no es pagado. Todos gastos además show Cuándo ellos están incurrido ya
sea ellos tener estado pagado por o facturado para ser pagado en una fecha posterior.
Cualquier obligación adeudada, incluidos los impuestos, se mostrará como gasto.

— Finanzas y Contabilidad: Cómo para Mantenerse Tu Libros y Administrar Tu Finanzas
Sin un MBA, a CPA o a Doctor., por susana caplán (Adán Medios de comunicación, 2000)

los desarrollador no más extenso necesario para reinventar contabilidad. Después algunos
lluvia de ideas con otro desarrollador, ella llegó arriba con a modelo.


Figura 9.9. Un modelo algo más profundo basado en el
aprendizaje de libros.

Ella hizo no tener los visión que Activos están ingreso generadores, y entonces los
Calculadoras están aún allí. los conocimiento de libros mayores es todavía en los solicitud,
bastante que los dominio capa donde probablemente pertenece Pero ella hizo separar los asunto
de pago desde los devengo de ingreso, cual

era los más problemático área, y ella introducido los palabra "devengo" dentro los modelo y dentro
los
LENGUA UBIC UO . El refinamiento adicional podría venir con iteraciones posteriores.

Cuándo ella hizo finalmente tener los oportunidad para hablar con los dominio experto, él era
bastante sorprendido. Fue los primero hora a programador tenido mostrado a luz tenue de
interesar en qué él hizo. Vencer para los camino suyo responsabilidades fueron asignado, los
experto Nunca comprometido con su, sesión abajo para ir sobre el modelo, como sucedió en el
escenario anterior. Sin embargo, debido a que el conocimiento de este desarrollador le
permitió hacer mejores preguntas, a partir de entonces el experto la escuchó atentamente y
tomó a especial esfuerzo para responder su preguntas prontamente.

De curso, esta es no un Cualquiera o proposición. Incluso con amplio apoyo desde dominio
expertos, vale la pena para Mira en los literatura para obtener a sujetar de los teoría de los
campo. Más negocios hacer no tener modelos refinado para los nivel de contabilidad o Finanzas,
pero en muchos allí tener estado pensadores en el campo quién tener organizado y abstraído los
común prácticas de los negocio.

Otra opción más que tenía el desarrollador era leer algo escrito por otro profesional de software
con experiencia en desarrollo en este dominio. Por ejemplo, el Capítulo 6 del libro Análisis
Patrones: reutilizable Objeto Modelos ( cazador 1997 ) haría tener enviado su en bastante a
dirección diferente, no necesariamente mejor o peor. Tal leyendo haría no tener proporcionó un
solución lista para usar. Eso haría tener dado varios nuevo a partir de puntos por su propio
experimentos, a lo largo de con la experiencia destilada de personas que han recorrido el
territorio. Ella se habría ahorrado reinventar los rueda. Capítulo 11 , "Aplicando Análisis
Patrones," voluntad ahondar más dentro esta opción.


Inténtalo, inténtalo de nuevo

los ejemplos He dado no transmitir los Monto de prueba y error involucrado. I puede que seguir
medio una docena Guías en conversacion antes de hallazgo una que parece claro y útil suficiente
para tratar fuera en el modelo. voy a final arriba reemplazando que una en menos una vez luego,
como adicional experiencia y el crujido del conocimiento sirve para mejores ideas. Un
modelador/diseñador no puede darse el lujo de apegarse a sus propias ideas.

Todos estas cambios de dirección están no sólo paliza. Cada cambiar incrusta Más adentro visión
dentro el modelo. Cada refactorización sale de los diseño más flexible, más fácil para cambiar
los próximo hora, Listo para doblar en los lugares que girar fuera para necesitar para doblar.

Ahí De Verdad es no elección, de todos modos. Experimentación es los manera para aprender
qué obras y no Difícil para evitar pasos en falso en diseño voluntad resultado en a más bajo
calidad resultado porque eso voluntad ser establecido en menos experiencia. Y eso lata
fácilmente llevar más extenso que a serie de rápido experimentos


[ Equipo LiB ]

[ Equipo LiB ]


Cómo modelar tipos de conceptos menos obvios
los orientado a objetos paradigma Guías nosotros para Mira por y inventar cierto tipos de
conceptos. cosas, incluso muy resumen unos tal como "devengos", están los carne de más
objeto modelos, a lo largo de con las acciones que toman esas cosas. Estos son los
"sustantivos y verbos" que el diseño orientado a objetos introductorio libros hablar sobre.
Pero otro importante categorías de conceptos lata ser hecha explícito en un modelo como bien.

voy a discutir Tres tal categorías que fueron no obvio para me Cuándo I empezado con
objetos. mis diseños se convirtió estafador con cada una de estas I aprendió.


Explícito Restricciones

Restricciones hacer arriba a particularmente importante categoría de modelo conceptos.
Ellos con frecuencia surgen implícitamente, y expresando ellos explícitamente lata muy
mejorar a diseño.

A veces restricciones encontrar a natural casa en un objeto o método. A "Balde" objeto
debe garantizar los invariante que eso lo hace no sostener más que su capacidad.



Figura 9.10.




A sencillo invariante me gusta esta lata ser forzado utilizando caso lógica en cada operación
capaz de cambiando contenidos.

cubo de clase {
capacidad de flotaci ón
privada; carroza
privada contenido;
public void pourIn(float addedVolume) {
si (contenido + volumen agregado >
capacidad) { contenido = capacidad;
} demás {
contenido = contenido + volumen agregado;

}
}
}

Esta lógica es entonces sencillo que los regla es obvio. Pero usted lata fácilmente imagina esta
restricción perderse en a más Complicado clase. Vamos factor eso dentro a separar método,
con a nombre que clara y explícitamente expresa los significado de los restricción.

cubo de clase {
capacidad de flotaci ón
privada; carroza
privada contenido;
public void pourIn(float addedVolume) {
float volumePresent = contenido + addedVolume;
contenido = restringido a la capac idad (volumen
presente);
}
privado flotador restringida a la capacidad (flotante
volumen colocado en) { si (volumen colocado en >
capacidad) regreso capacidad;
regreso volumen colocado en;
}
}

Ambas cosas versiones de esta código hacer cumplir los restricción, pero los segundo posee a
más obvio relación con el modelo (el requisito básico del DISEÑO IMPULSADO POR MODELOS ). Esta
regla muy simple era comprensible en su forma original, pero cuando las reglas que se aplican
son más complejas, comienzan para abrumar los objeto o operación ellos aplicar para, como
ninguna implícito concepto lo hace. Factorizando el restricción dentro su propio método permite
nosotros para dar eso un revelador de intenciones nombre que hace la restricción explícito en
nuestro diseño. Eso es ahora a llamado cosa nosotros lata discutir. Esta Acercarse además da el
restricción habitación. A más complejo regla que esta puede que fácilmente Produce a método
más extenso que su llamador (los vierta en() método, en esta caso). Esta manera, los
llamador corsé sencillo y enfocado en su tarea tiempo los restricción lata crecer en complejidad si
necesitar ser.

Esta separar método da los restricción algunos habitación para crecer, pero allí están un montón
de casos Cuándo una restricción sólo hipocresía encajar cómodamente en a único método. O
incluso si los método corsé sencillo, eso puede solicitar información que el objeto no necesita
para su responsabilidad principal. La regla puede tener no bien casa en un existente objeto.

Aquí hay algunas señales de advertencia de que una restricción está distorsionando el diseño
de su objeto anfitrión.

1. evaluando a restricción requiere datos que lo hace no de lo contrario encajar los objetos
definición.

2. Relacionados normas aparecer en múltiple objetos, forzando duplicación o herencia Entre
objetos que están no de lo contrario a familia.

3. A lote de diseño y requisitos conversacion gira alrededor los restricciones, pero en la
implementación, ellos están oculto fuera en procesal código.

Cuando las restricciones ocultan la responsabilidad básica del objeto, o cuando la restricción es
prominente en el dominio pero no lo es en el modelo, puede convertirla en un objeto explícito.
o incluso modelo eso como a colocar de objetos y relaciones (Una en profundidad, semi-formal El
tratamiento de este tema se puede encontrar en The Object Constraint Language: Precise
Modeling with UML [ Warmer y Kleppe 1999 ].)

Ejemplo
Reseña: Sobreventa Política

En Capítulo 1 , nosotros trabajó con a común Envío negocio práctica: reserva 10 por ciento
más carga de la que podían manejar los transportes. (La experiencia ha enseñado a las
empresas navieras que este overbooking compensa por último minuto cancelaciones,
entonces sus buques voluntad navegar por poco completo.)

Esta restricción en los asociación Entre Viaje y Carga era hecha explícito, ambas cosas en
los diagramas y en los código, por agregando a nuevo clase que representado los restricción.


Figura 9.11. El modelo refactorizado para hacer la política
explícita

Para revisar el código y el razonamiento en el ejemplo completo, consulte la página 17.


Procesos como Objetos de Dominio

Derecha arriba parte delantera, vamos estar de acuerdo que nosotros hacer no querer para
hacer procedimientos a prominente aspecto de nuestro modelo Objetos están quiso decir
para encapsular los procedimientos y dejar nosotros pensar sobre sus objetivos o
intenciones en lugar de.

Qué I soy hablando sobre aquí están procesos que existe en los dominio, cual nosotros tener
para representar en los modelo. Cuándo estas surgir, ellos tender para hacer por incómodo
objeto diseños

El primer ejemplo de este capítulo describía un sistema de envío que encaminaba la carga.
Este proceso de enrutamiento era algo con negocio sentido. A SERVIC IO es una manera de
expresando tal a proceso explícito, tiempo todavía encapsulando los extremadamente complejo
algoritmos

Cuando hay más de una forma de llevar a cabo un proceso, otro enfoque es hacer que el
algoritmo sí mismo, o algunos llave parte de eso, un objeto en su propio Correcto. los elección
Entre los procesos se convierten a elección Entre estas objetos, cada de cual representa a
diferente ESTRATEGIA . ( Capítulo 12 voluntad Mira en más detalle en los utilizar de ESTRATEGIAS
en los dominio.)

los llave para distintivo a proceso que debería para ser hecha explícito desde una que deberían
ser oculto es sencillo: Es esta algo los dominio expertos hablar sobre, o es eso sólo parte de los
mecanismo de El computadora ¿programa?

Restricciones y procesos están dos amplio categorías de modelo conceptos que no venir saltando
a la mente Cuándo programación en un orientado a objetos idioma, aún ellos lata De Verdad
afilar arriba a diseñar una vez nosotros comienzo pensando sobre ellos como modelo elementos.

Algunos útil categorías de conceptos están mucho más estrecho voy a ronda fuera esta capítulo
con una mucho más específico, aún bastante común. ESPECIFICACIONES _ proporciona a conciso
manera de expresando cierto tipos de normas, sacando ellos desde condicional lógica y haciendo

ellos explícito en los modelo.

Desarrollé ESPEC IFIC ACIÓN en colaboración con Martin Fowler ( Evans y Fowler 1997 ). La
simplicidad de los concepto desmiente los sutileza en solicitud y implementación, entonces allí es a
lote de detalle en esta sección. Habrá aún más discusión en el Capítulo 10 , donde se amplía el
patrón. Después leyendo los inicial explicación de los patrón que sigue, usted mayo querer para
rozar el " Aplicando y Implementar ESPECIFICACIONES " _ sección, Hasta que usted están
Realmente intentando para aplica el patrón.


Especificación

En todos tipos de aplicaciones, booleano prueba métodos aparecer que están De Verdad partes de
poco normas. Como siempre que sean simples, los manejamos con métodos de prueba, como
anIterator.hasNext() o anInvoice.isOverdue() . En una clase Factura , el código en
isOverdue() es un algoritmo que evalúa a regla. Para ejemplo,

booleano público está vencido () {
Fecha fechaActual = nueva
Fecha(); regreso
fechaActual.después(fechaDeVencimie
nto);
}

Pero no todas las reglas son tan simples. En la misma clase Factura , otra regla,
anInvoice.isDelinquent() haría presumiblemente comienzo con pruebas si los Factura es
atrasado, pero eso sería solo el comienzo. Una política sobre períodos de gracia podría
depender del estado de la cuenta del cliente. cuenta. Algunos delincuente facturas voluntad ser
Listo por a segundo aviso, tiempo otros sera Listo para ser enviado para a colección agencia. los
pago historia de los cliente, empresa política sobre diferente producto líneas . . . los claridad de
Factura como a solicitud por pago voluntad pronto ser perdió en el escarpado masa de regla
evaluación código. los Factura voluntad además desarrollar todos ordena de dependencias en el
dominio clases y subsistemas que hacer no apoyo que básico sentido.

En este punto, en un intento por guardar la clase Factura , un desarrollador a menudo
refractará la evaluación de la regla. código dentro los solicitud capa (en esta caso, a cuenta
colección solicitud). Ahora los las reglas se han separado de la capa de dominio por completo,
dejando atrás un objeto de datos muerto que no no Rápido los normas inherente en los negocio
modelo. Estas normas necesitar para Quédate en los capa de dominio, pero ellos no encajar
dentro los objeto siendo evaluado (los Factura en esta caso). No solamente eso, pero evaluando
métodos hinchar con condicional código, cual hacer los regla duro para leer.

Los desarrolladores que trabajan en el paradigma de programación lógica manejarían esta
situación de manera diferente. Tal normas haría ser expresado como predicados _ predicados
están funciones que evaluar para "cierto" o falso" y lata ser conjunto utilizando operadores tal
como "Y" y "O" para Rápido más reglas complejas. Con predicados, nosotros pudo declarar
normas explícitamente y utilizar ellos con los factura _ Si solamente éramos en los lógica
paradigma.

Vidente esta, gente tener hecha intentos en implementar lógico normas en condiciones de
objetos. algunos de esos intentos fueron muy sofisticado, otros ingenuo. Algunos fueron
ambicioso, otros modesto. algunos se volvieron fuera valioso, algunos fueron arrojado aparte
como ha fallado experimentos A pocos intentos fueron permitido hacer descarrilar sus proyectos
Una cosa es claro: Como atractivo como los idea es, completo implementación de lógica en
objetos es a importante empresa. (Después todos, lógica programación es a entero modelado y
paradigma de diseño en su propio Correcto.)

Las reglas comerciales a menudo no se ajustan a la responsabilidad de ninguna de las
ENTIDADES o VALOR obvios.

OBJETOS , y sus variedad y combinaciones lata abrumar los básico sentido de el
dominio objeto. Pero Moviente los normas fuera de los dominio capa es incluso peor,
ya que el dominio código no más extenso expresa los modelo.

Lógica programación proporciona los concepto de separar, combinable, regla objetos
llamados "predicados", pero completo implementación de esta concepto con objetos
es incómodo. Eso también es tan general que no comunica la intención tanto como
los diseños más especializados.

Afortunadamente, nosotros no De Verdad necesitar para completamente implementar lógica
programación para obtener a grande beneficio. La mayoría de nuestras reglas caen en unos
pocos casos especiales. Podemos tomar prestado el concepto de predicados y crear objetos
especializados que evalúen a un valor booleano. Esos métodos de prueba que se salen de
control expandir dentro objetos de sus propio. Ellos están poco verdad pruebas que lata ser
factorizado fuera dentro una separacion VALOR OBJETO . Esta nuevo objeto lata evaluar otro objeto
para ver si los predicado es verdad por eso objeto.



Figura 9.12.




Para poner eso otro manera, los nuevo objeto es a especificación _ A ESPEC IFIC ACIÓN estados a
restricción en el estado de otro objeto, que puede o no estar presente. Tiene múltiples usos,
pero uno que transmite los más básico concepto es que a ESPEC IFIC ACIÓN lata prueba ninguna
objeto para ver si eso satisface el especificado criterios.

Por lo tanto:

Crear explícito como un predicado VALOR OBJETOS por especializado propósitos A
ESPECIFICACIÓN es un predicado que determina si un objeto lo hace o lo hace no
satisfacer algunos criterios.

Muchos ESPEC IFIC ACIONES están sencillo, proposito especial pruebas, como en los delincuente
factura ejemplo. En casos donde los normas están complejo, los concepto lata ser extendido para
permitir sencillo especificaciones combinarse, del mismo modo que los predicados se combinan
con operadores lógicos. (Esta técnica será discutida en los próximo capítulo.) los fundamental
patrón corsé los mismo y proporciona a sendero desde el más simple para más complejo modelos

los caso de los delincuente factura lata ser modelado utilizando a ESPEC IFIC ACIÓN que estados qué
eso significa que ser delincuente y que lata evaluar ninguna Factura y hacer los determinación.


Figura 9.13. Una regla de morosidad más elaborada factorizada
como un
ESPECIFICACIÓN

los ESPEC IFIC ACIÓN mantiene los regla en los dominio capa. Porque los regla es a completamente
desarrollado o establecido objeto, el diseño puede ser un reflejo más explícito del modelo. UNA
FÁBRIC A puede configurar una ESPEC IFIC ACIÓN utilizando información de otras fuentes, como la
cuenta del cliente o la base de datos de políticas corporativas. Proporcionar directo acceso para
estas fuentes desde los Factura haría Pareja los objetos en fuera que lo hace no relacionar para
los solicitud por pago (los básico responsabilidad de factura ). En en este caso, se iba a crear la
Especificación de Factura Morosa , utilizada para evaluar algunas Facturas , y luego
descartado, entonces a específico evaluación fecha era construido Correcto en un agradable
simplificación. A ESPEC IFIC ACIÓN lata ser dado los información eso voluntad necesitar para hacer
su trabajo en a sencillo, de manera directa.


El concepto básico de ESPEC IFIC ACIÓN es muy simple y nos ayuda a pensar en un problema de
modelado de dominio. Pero a IMPULSADO POR MODELO DISEÑO requiere un eficaz implementación
que además expresa el concepto. Para lograrlo, es necesario profundizar un poco más en cómo
se aplicará el patrón. Un patrón de dominio no es solo una buena idea para un diagrama UML;
es una solucion a un problema de programacion que retiene a IMPULSADO POR MODELO DISEÑO .

Cuándo usted aplicar a patrón adecuadamente, usted lata grifo dentro a entero cuerpo de
pensamiento sobre cómo acercarse a clase de dominio modelado problema, y usted lata
beneficio desde años de experiencia en busqueda eficaz implementaciones. Ahí es a lote de
detalle en los discusión de ESPEC IFIC ACIÓN que sigue: muchas opciones para características y
enfoques para la implementación. Un patrón no es un libro de cocina. Eso vamos usted
comienzo desde a base de experiencia para desarrollar tu solución, y eso da tu algo idioma
para hablar sobre qué usted están haciendo.

Tú mayo querer para desnatar los llave conceptos Cuándo primero leyendo. Luego, Cuándo usted
correr dentro los situación, tú lata venir espalda y dibujar en los experiencia capturado en los
detallado discusión. Luego usted puede ir y figura fuera a solución para tu problema.


Aplicación e implementación de la ESPECIFICACIÓN

Mucho de los valor de ESPEC IFIC ACIÓN es que eso unifica solicitud funcionalidad que mayo parecer
bastante diferente. Nosotros puede que necesitar para especificar los estado de un objeto por una
o más de estas Tres propósitos

1. Para validar un objeto para ver si eso cumple algunos necesitar o es Listo por algunos
propósito

2. Para Seleccione un objeto desde a colección (como en los caso de consultando por atrasado
facturas)

3. Para especificar los creación de a nuevo objeto para encajar algunos necesitar

Estas Tres usos—validación, selección, y edificio para orden—son los mismo en a conceptual nivel.

Sin a patrón tal como ESPEC IFIC ACION , los mismo regla mayo show arriba en diferente disfraces, y

3.

formas posiblemente contradictorias. La unidad conceptual puede perderse. Aplicar el patrón
ESPEC IFIC ACIÓN
permite usar un modelo consistente, incluso cuando la implementación tenga que divergir.


Validación

los más simple utilizar de a ESPEC IFIC ACIÓN es validación, y eso es los utilizar que demuestra los
concepto más directamente


Figura 9.14. Un modelo que aplica una ESPECIFICACIÓN para la
validación


clase especificación de factura morosa
extiende FacturaEspecificaci ón {
Fecha privada fecha actual;
// Una instancia se usa y se descarta en una sola fecha
público EspecificaciónDeFacturaDelincuente(Fecha fecha
actual) { esta.fechaActual = fecha actual;
}
público booleano está satisfecho por (Factura
candidato) { int período de gracia =
candidato.cliente().getPaymentGracePeriod();
Fecha firmeFecha l ímite =
DateUtility.addDaysToDate(candidate.dueDate(),
gracePeriod);
volver fecha actual.despu és (fecha límite firme);
}
}

Ahora, suponer nosotros necesitar para mostrar a rojo bandera cuando sea a vendedor trae
arriba a cliente con delincuente facturas. Nosotros sólo tener para escribe a método en a
cliente clase, algo me gusta esta.

público booleano la cuenta está morosa (cliente
cliente) { Fecha hoy = nuevo Fecha();
Especificación delincuenteSpec =
new DelinquentInvoiceSpecification(hoy);
iterador eso =
cliente.obtenerFacturas().iterator(); while
(it.hasNext()) {
Candidato a factura = (Factura) it.next();

if (delinquentSpec.isSatisfiedBy(candidate)) devuelve verdadero;
}
falso retorno;
}


Selección (o consulta)

Validación pruebas un individual objeto para ver si eso Satisface algunos criterios,
presumiblemente entonces que los el cliente puede Actuar en los conclusión. Otro común
necesitar es para Seleccione a subconjunto de a colección de objetos basados en algunos
criterios. El mismo concepto de ESPEC IFIC ACIÓN se puede aplicar aquí, pero la implementación
cuestiones están diferente.

Suponer allí era un solicitud requisito para lista todos clientes con delincuente Facturas. En
teoría, la Especificación de Facturas Morosas que definimos antes seguirá sirviendo, pero
en la práctica su implementación haría probablemente tener para cambiar. Para demostrar que
los concepto es el mismo, vamos asumir primero que los número de Facturas es pequeña,
quizás ya en memoria. En esto caso, los simple implementación desarrollado por validación
todavía sirve los Repositorio de facturas pudo tener a generalizado método para Seleccione
Facturas establecido en a ESPEC IFIC ACIÓN :

público Colocar selectSatisfying(FacturaEspecificaci ón
Especificaciones) { Establecer resultados = nuevo
HashSet();
Iterarlo = facturas.iterator();
while (it.hasNext()) {
Candidato a factura = (Factura) it.next();
si (spec.isSatisfiedBy(candidate)) resultados.add(candidato);
}
devolver resultados;
}

Entonces, un cliente podría obtener una colección de todas las Facturas morosas con una
sola declaración de código:

Establecer facturas morosas =
repositoriodefacturas.selectSatisfying( new
DelinquentInvoiceSpecification(currentDate));

Que línea de código establece los concepto detrás los operación. De curso, los Factura objetos
probablemente no son en memoria. Ahí mayo ser miles de ellos. En a típico negocio sistema, los
datos es probablemente en a relacional base de datos. Y, como puntiagudo fuera en más
temprano capítulos, los modelo el enfoque tiende para obtener perdió en estas intersecciones
con otro tecnologías

Relacional bases de datos tener poderoso búsqueda capacidades. Cómo lata nosotros llevar
ventaja de que poder para resolver esta problema eficientemente tiempo retener los modelo de a
ESPEC IFIC ACION ? IMPULSADO POR MODELOS Demandas de DISEÑO que los modelo Quédate en paso
a paso con los implementación, pero eso permite libertad para elige cualquiera implementación
que fielmente capturas los sentido de los modelo. Afortunado por nosotros, sql es a muy natural
manera para escribe ESPEC IFIC ACIONES .

Aquí es a sencillo ejemplo, en cual los consulta es encapsulado en los mismo clase como los regla
de validación. Se agrega un solo método a la Especificación de factura y se implementa en
Morosos. Factura Especificación subclase:

Cadena pública asSQL()
{ regreso

"SELECCIONE * DE FACTURA, CLIENTE" +
" DONDE FACTURA.CUST_ID = IDENTIFICACIÓN DEL CLIENTE" +
" Y FECHA DE VENCIMIENTO DE LA FACTURA + CLIENTE.GRACE_PERIOD" +
" < " + SQLUtility.dateAsSQL(fechaActual);
}

ESPECIFICACIONES _ malla suavemente con REPOSITORIOS , cual están los bloque de
construcción mecanismos para proporcionar consulta acceso para dominio objetos y
encapsulando los interfaz para los base de datos (ver figura 9.15 ).


Figura 9.15. La interacción entre REPOSITORIO y ESPECIFICACIÓN

Ahora esta diseño posee algunos problemas. Más importante, los detalles de los mesa estructura
tener se filtró en los DOMINIO C APA ; ellos deberían ser aislado en a cartografía capa que relaciona
los dominio objetos a los relacional mesas. Implícitamente duplicando que información aquí pudo
herir los modificabilidad y mantenibilidad de los Factura y Cliente objetos, porque ninguna
cambiar para sus asignaciones ahora tienen para ser rastreado en más que una lugar. Pero esta
ejemplo es a sencillo ilustración de cómo para mantener la regla en un solo lugar. Algunos
marcos de mapeo relacional de objetos proporcionan los medios para expresar tal a consulta en
condiciones de los modelo objetos y atributos, generando los real sql en el infraestructura capa.
Esta haría dejar nosotros tener nuestro pastel y come eso también.

Cuándo los infraestructura no venir para los rescate, nosotros lata refactorizar los sql fuera de los
objetos de dominio expresivo agregando un método de consulta especializado al Repositorio
de facturas . Para evitar la incrustación los regla dentro los REPOSITORIO , nosotros tener para
Rápido los consulta en a más genérico manera, uno que no capturar los regla pero lata ser
conjunto o metido en contexto para trabajo los regla fuera (en este ejemplo, por utilizando a
doble envío).

Repositorio de facturas de clase p ública {
public Set selectWhereGracePeriodPast(Date aDate){
//Esta es no a regla, sólo a especializado
consulta String sql =
whereGracePeriodPast_SQL(aDate); Consulta de
conjunto de resultadosCo njunto de resultados
=

SQLDatabaseInterface.instance().executeQuery(sql);
return buildInvoicesFromResultSet(queryResultSet);
}
público Cuerda whereGracePeriodPast_SQL(Fecha una
cita) { regreso
"SELECCIONE * DE FACTURA, CLIENTE" +
" DONDE FACTURA.CUST_ID = IDENTIFICACIÓN DEL CLIENTE" +
" Y FECHA DE VENCIMIENTO DE LA FACTURA + CLIENTE.GRACE_PERIOD" +
" < " + SQLUtility.dateAsSQL(aDate);
}
público Colocar selectSatisfying(FacturaEspecificaci ón
Especificaciones) { volver
spec.satisfyingElementsFro m(esto);
}
}

El método asSql() en Invoice Specification se reemplaza con
satisfacingElementsFrom(InvoiceRepository) , que implementa Delinquent Invoice
Specification como:

clase pública DelinquentInvoiceSpecification {
// Código de especificaci ón de factura morosa b ásica aquí
conjunto público elementossatisfactoriosDe(
repositorio InvoiceRepository) {
//La regla de morosidad est á definida como:
// "gracia período pasado como de Actual fecha"
regreso repositorio.selectWhereGracePeriodPast(fechaActual);
}
}

Esta pone los sql en los REPOSITORIO , tiempo los ESPEC IFIC AC IÓN control S qué consulta deberían
ser usado. los normas no son como pulcramente recogido dentro los ESPEC IFIC AC ION , pero los
esencial declaración es allí de que que constituye delincuencia (que es, pasado gracia período).

El REPOSITORIO ahora tiene una consulta muy especializada que muy probablemente se usará
solo en este caso. Que es aceptable, pero dependiente en los relativo números de Facturas que
están atrasado frente a los que son morosos, una solución intermedia que deja los métodos
REPOSITORIO más genéricos mayo todavía dar bien rendimiento, tiempo acuerdo los ESPEC IFIC ACIÓN
más Autoexplicativo.

Repositorio de facturas de clase p ública {
público Colocar selectDondeDueDateIsBefore(Fecha
una cita) { String sql =
dondeDueDateIsBefore_SQL(aDate); Consulta de
conjunto de resultadosConjunto de resultados =
SQLDatabaseInterface.instance().executeQuery(sql);
return buildInvoicesFromResultSet(queryResultSet);
}
público Cuerda dondeDueDateIsBefore_SQL(Fecha una
cita) { regreso
"SELECCIONAR * DE LA FACTURA" +
" DONDE FACTURA.FECHA_VENCIMIENTO" +
" < " + SQLUtility.dateAsSQL(aDate);
}

público Colocar selectSatisfying(FacturaEspecificaci ón
Especificaciones) { volver
spec.satisfyingElementsFrom(esto);
}
}
clase pública DelinquentInvoiceSpecification {
//Código de especificaci ón de factura morosa b ásica aquí
conjunto público elementossatisfactoriosDe(
repositorio InvoiceRepository)
{ Colección de facturas vencidas =
repository.selectwhereDueDateIsBefore(currentDate);
Establecer facturas en mora = new
HashSet(); iterador eso =
facturasVencidas.iterator(); while
(it.hasNext()) {
Factura una factura = (Factura)
es.siguiente(); si
(this.isSatisfiedBy(anInvoice))
facturasmorosas.add(unaFactura);
}
regreso facturas morosas;
}
}

Bien llevar a rendimiento golpear con esta código, porque nosotros jalar fuera más Facturas y
luego tener para seleccionar de ellos en la memoria. Si este es un costo aceptable para el
mejor factoring de responsabilidad depende completamente de las circunstancias. Hay
muchas formas de implementar las interacciones entre ESPEC IFIC ACIONES y REPOSITORIOS , para
aprovechar la plataforma de desarrollo, tiempo acuerdo los básico responsabilidades en lugar.

A veces, para mejorar el rendimiento, o más probablemente para reforzar la seguridad, se
pueden implementar consultas en los servidor como almacenado procedimientos. En que caso,
los ESPEC IFIC ACIÓN pudo llevar Solo el parámetros permitido por los almacenado procedimiento.
Para todos que, allí es no diferencia en los modelo entre estas diversas implementaciones. La
elección de la implementación es libre excepto donde específicamente constreñido por los
modelo. los precio llega en a más incómodo manera de escribiendo y manteniendo consultas

Esta discusión apenas arañazos los superficie de los retos de combinatorio ESPEC IFIC ACIONES con
bases de datos, y voy a hacer no intento para cubrir todos los consideraciones que mayo
aumentar. I sólo querer para dar una idea del tipo de elecciones que deben hacerse. Mee y
Hieatt discuten algunos de los aspectos técnicos cuestiones involucrado en diseño REPOSITORIOS
con ESPEC IFIC ACIONES en Cazador de aves 2002.


Fabricación por encargo (generación)

Cuándo los Pentágono quiere a nuevo combatiente chorro, funcionarios escribe a
especificación. Esta especificación Podría requerir que los chorro alcanzar mach 2, que eso
tener a rango de 1800 millas, que eso costo no más que
$ 50 millones, y así sucesivamente. Pero por más detallada que sea, la especificación no es un
diseño para un avión, mucho menos a plano. Un aeroespacial Ingenieria empresa voluntad llevar
los especificación y crear una o más diseños basados en él. Las empresas competidoras pueden
producir diferentes diseños, todos los cuales presumiblemente satisfacer los original
Especificaciones.

Muchos computadora programas generar cosas, y esos cosas tener para ser especificado. Cuándo
usted coloque una imagen en un documento de procesamiento de texto, el texto fluye a su

alrededor. Ha especificado la ubicación de los imagen, y quizás los estilo de texto flujo. los exacto
colocación de los palabras en la página es luego trabajó fuera por los palabra procesador en tal a
manera que eso Satisface tu especificación.

Aunque puede no ser evidente al principio, este es el mismo concepto de ESPEC IFIC ACIÓN que se
aplicó para validación y selección. Nosotros están especificando criterio por objetos que están no
aún regalo. Sin embargo, la implementación será bastante diferente. Esta ESPEC IFIC ACIÓN no es
un filtro para preexistentes objetos, como con consultando Eso es no a prueba por un existente
objeto, como con validación. Esta vez, se fabricará o reconfigurará un objeto o conjunto de
objetos completamente nuevos para satisfacer la ESPEC IFIC ACIÓN .

Sin usar ESPEC IFIC ACIÓN , se puede escribir un generador que tenga procedimientos o
un conjunto de instrucciones que crear los necesario objetos. Esta código implícitamente
define los conducta de el generador.

En cambio, una interfaz del generador que se define en términos de una ESPEC IFIC ACIÓN
descriptiva
restringe explícitamente los productos del generador. Este enfoque tiene varias ventajas.


los del generador implementación es desacoplado desde su interfaz. los ESPEC IFIC ACIÓN
declara el requisitos por los producción pero lo hace no definir cómo que resultado es
alcanzado.

los interfaz comunica su normas explícitamente, entonces desarrolladores lata saber qué
para suponer desde el generador sin comprensión todos detalles de su operación. los
solamente manera para predecir el comportamiento de a procesalmente definido
generador es para correr casos o para comprender cada línea de código

La interfaz es más flexible, o se puede mejorar con más flexibilidad, porque la instrucción
de los solicitud es en los las manos de los cliente, tiempo los generador es solamente
obligado cumplir los letra de los ESPEC IFIC ACION .

Por último, pero no menos importante, este tipo de interfaz es más fácil de probar,
porque el modelo contiene un explícito manera para definir aporte dentro los generador
que es además a validación de los salida _ Que es el mismo ESPEC IFIC ACIÓN que es aprobado
dentro los del generador interfaz para constreñir los proceso de creación lata además ser
usado, en su validación papel (si los implementación apoya eso) para confirma eso los
creado objeto es correcto. (Esta es un ejemplo de un ASERC IÓN , discutido en Capítulo 10. )

Edificio para pedido lata significar creación de un objeto desde rasguño, pero eso lata además ser
a configuración de preexistentes objetos para satisfacer los ESPEC .


Ejemplo
Almacén de productos químicos Envasador

Ahí es a depósito en cual varios productos quimicos están almacenado en pilas de grande
contenedores, similar a los vagones. Algunos productos quimicos están inerte y lata ser
almacenado sólo sobre en cualquier sitio. Algunos están volátil y tiene para ser almacenado en
especialmente ventilado contenedores Algunos están explosivo y tener para ser almacenado en
especial blindado contenedores Ahí están además normas sobre los combinaciones permitido en a
envase.

los meta es para escribe software que voluntad encontrar un eficiente y a salvo manera para
poner los productos quimicos en los contenedores


Figura 9.16. Un modelo para el almacenamiento en
almacén

Nosotros pudo comienzo por escribiendo a procedimiento para llevar a químico y lugar eso en a
envase, pero en cambio, vamos comienzo con los validación problema. Esta voluntad fuerza
nosotros para hacer los normas explícito, y eso voluntad danos a manera para prueba los final
implementación.

Cada producto químico tendrá una ESPEC IFIC AC IÓN del envase :


Contenedor químico Especificación
TNT blindado envase
Arena
Biológico Las muestras deben no Cuota envase con explosivos
Amoníaco Ventilado envase
Ahora, si nosotros escribe estas como Envase especificaciones , nosotros deberían ser poder
para llevar a configuración de empacado contenedores y prueba para ver si eso Satisface estas
restricciones


Envase Características Contenido Especificación
¿Satisfecho?
Blindado de 20 libras. TNT

500 libras arena
50 libras biológico muestras
Amoníaco
A método en Envase especificación , está satisfecho() , haría tener para ser
implementado para comprobar necesario Características del contenedor . Para ejemplo, los
ESPECIFICACIONES adjunto para un explosivo químico parecería por los "blindado" rasgo:

clase pública Especificaci ónContenedor {
privada ContenedorCaracter ística
característica requerida;
público ContainerSpecification(ContainerFeature
requerido) { característica requerida = requerido;
}
booleano está satisfecho por (contenedor un contenedor){
regreso aContainer.getFeatures().contains(requiredFeature);
}
}

Aquí hay un código de cliente de muestra para configurar un químico explosivo:

tnt.setContainerSpecification(
nueva especificación de contenedor (BLINDADA));

A método en a Envase objeto, está Embalado de forma segura(), voluntad confirmar
que Envase posee todos Las características especificado por los quimicos eso contiene:

booleano está Embalado de forma segura(){
Iterarlo = contenido.iterador();
while (it.hasNext()) {
tambor tambor = (tambor) es.siguiente();
if (!drum.containerSpecification().isSatisfiedBy(this))
devuelve false;
}
devolver verdadero;
}

En esta punto, nosotros pudo escribe a supervisión solicitud que haría llevar los inventario base
de datos e informar ninguna inseguro situaciones

Iterarlo = contenedores.iterador();
while (it.hasNext()) {
Contenedor contenedor = (Contenedor)
it.next(); si (!container.isSafelyPacked())
unsafeContainers.add(contenedor);
}

Este no es el software que nos han pedido que escribamos. Sería bueno que los empresarios
sepan sobre los oportunidad, pero nosotros tener estado cargado con diseño a envasador. Qué
nosotros tener es un prueba por a envasador. Esta comprensión de los dominio y nuestro
ESPEC IFIC ACIÓN -basado modelo poner nosotros en un posición para definir a claro y sencillo
interfaz por a SERVIC IO que voluntad llevar colecciones de Tambores y Contenedores y paquete
ellos en cumplimiento con los normas.

interfaz pública WarehousePacker {
paquete de vacío público (contenedores de colecci ón para llenar,
Collection drumsToPack) lanza NoAnswerFoundException;
/* AFIRMACIÓN: En final de paquete(), los
ContenedorEspecificaci ón de cada Tambor deberá ser
satisfecho por su Envase.
Si no completo solución lata ser fundar, un excepción
será arrojado. */
}

Ahora los tarea de diseño un optimizado restricción solucionador para realizar los
responsabilidades de los servicio de empaquetado posee estado desacoplado desde los descanso
de los solicitud, y esos mecanismos voluntad no desordenar el parte de los diseño que expresa los
modelo. (Ver "Declarativo Estilo de Diseño," Capítulo 10 , y C OHESIVO MEC ANISMO , Capítulo 15 .)
Aún los normas gobernante embalaje tener no estado tirado fuera de El dominio objetos.

Ejemplo
Un prototipo de trabajo del empacador de almacén

Escribiendo los mejoramiento lógica para hacer los depósito embalaje software trabajo es a
grande trabajo. A pequeño equipo de desarrolladores y expertos en negocios se han separado y
se han puesto a trabajar en él, pero no han incluso comenzado para código. Mientras tanto, otro
pequeña equipo es desarrollando los solicitud que permitirá usuarios para jalar inventario desde
los base de datos, alimento eso para los empacador , y interpretar los resultados Ellos están
difícil para diseño por los anticipado empacador _ Pero todos ellos lata hacer es burlarse de
arriba a interfaz de usuario y trabajar en algún código de integración de base de datos. No
pueden mostrar a los usuarios una interfaz con un comportamiento significativo para obtener
buenos comentarios. Por la misma razón, el equipo de Packer también está trabajando en el
vacío .

Con los objetos de dominio y la interfaz de SERVIC IO realizados en el ejemplo del empacador de
almacén, la aplicación equipo se da cuenta ellos pudo construir a muy sencillo implementación
de a Envasador que podría ayudar los desarrollo proceso moverse a lo largo de, permitiendo
trabajo para ir hacia adelante en paralela y clausura la retroalimentación lazo, cual solamente
alcanza completo efecto con a trabajando de extremo a extremo sistema.

Contenedor de clase
pública { privado doble
capacidad;
contenido del conjunto privado; //Batería
hasSpaceFor booleano p úblico (Tambor aTambor)
{ volver espacio restante() >=
unTambor.getSize();
}
public double espacio restante() {
double totalContentSize = 0.0;
Iterarlo = contenido.iterador();
while (it.hasNext()) {
Tambor aTambor = (Tambor) es.siguiente();
totalContentSize = totalContentSize + aDrum.getSize();
}
capacidad de retorno – totalContentSize;
}
público booleano puede acomodar (tambor un
tambor) { return
tieneEspacioPara(unTambor) &&
aDrum.getContainerSpecification().isSatisfiedBy(this);
}
}
public class PrototypePacker implementa WarehousePacker {
public vacío paquete(Colección contenedores, Colección
batería)
lanza NoAnswerFoundException {
/* Esta método cumple los AFIRMACIÓN como escrito. Sin
embargo, cuando se lanza una excepci ón, el contenido
de los contenedores puede haber cambiado. La reversi ón
debe manejarse en un nivel superior. */
Iterarlo = batería.iterator();

while (it.hasNext()) {
tambor tambor = (tambor)
es.siguiente(); contenedor
contenedor =
findContainerFor(contenedores, tambor);

container.add(tambor);
}
}
Contenedor público
buscarContenedorPara(
Contenedores de recogida, Tambor
tambor) arroja
NoAnswerFoundException {
iterador eso =
contenedores.iterador(); while
(it.hasNext()) {
Envase envase = (Envase) es.siguiente(); si
(contenedor.puedeacomodar(tambor))
contenedor de retorno;
}
tirar nuevo Sin respuesta encontrada excepci ón ();
}
}

Otorgado que esta código sale de a lote para ser deseado. Eso puede que paquete arena dentro
especialidad contenedores y luego quedarse sin espacio antes de que empaque los productos
químicos peligrosos. Ciertamente no optimiza los ingresos. Pero muchos problemas de
optimización nunca se resuelven perfectamente de todos modos. Esta implementación lo hace
seguir los normas que tener estado fijado entonces lejos.



Teniendo esta prototipo vamos los solicitud desarrolladores moverse en completo velocidad,
incluso todos integraciones con sistemas externos. El equipo de desarrollo de Packer también
recibe comentarios a medida que los expertos del dominio interactúan con los prototipo y firma
arriba sus ideas, Ayudar aclarar requisitos y prioridades el empacador equipo decide para llevar
sobre los prototipo y retocar eso para prueba ideas

Ellos además mantenerse los interfaz A hoy con sus más reciente diseño, forzando
refactorización de la aplicación, y algunos dominio objetos, de este modo abordar los
integración problemas temprano.

Como pronto como los sofisticado Envasador es Listo, integración es a brisa porque eso posee
estado escrito en una interfaz bien caracterizada: la misma interfaz y ASERC IONES de que se
escribió la aplicación por Cuándo interactuando con los prototipo.

Eso tomó especialistas en mejoramiento algoritmos meses para obtener eso Correcto. Ellos
beneficiado desde la retroalimentación ellos pudo obtener desde usuarios interactuando con
los prototipo. En los mientras tanto, todos otras partes de los sistema tener algo para
interactuar con durante desarrollo.

Aquí tenemos un ejemplo de "la cosa más simple que posiblemente podría funcionar" que en
realidad se vuelve posible porque de a más sofisticado modelo. Nosotros lata tener a marcha

Clearing Development Logjams with Working Prototypes

One team has to wait for working code from another in order to move forward. Both
teams have to wait for full integration to exercise their components or get feedback
from users. This kind of congestion can often be eased by a MODEL-DRIVEN prototype of
a key component, even if it does not satisfy all requirements. When implementation is
decoupled from interface, then having any working implementation at all allows
flexibility for project work to go in parallel. When the time is right, the prototype can be
replaced by a more effective implementation. In the meantime, all other parts of the
system have something to interact with during development.

prototipo de a componente muy complejo en un par de docenas de líneas de código fácil de
entender. Un enfoque menos IMPULSADO POR MODELOS haría ser más difícil para comprender,
haría ser más difícil para potenciar (porque los Envasador sería más acoplado para los descanso
de los diseño), y en esta caso, haría probable llevar más extenso para prototipo.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo diez. Diseño flexible

El fin último del software es servir a los usuarios. Pero primero, ese mismo software tiene que
servir a los desarrolladores. Esta es especialmente cierto en a proceso que enfatiza
refactorización Como a programa evoluciona, desarrolladores voluntad reorganizar y volver a
escribir cada parte. Ellos voluntad integrar los dominio objetos dentro la aplicación y con nuevos
objetos de dominio. Incluso años después, los programadores de mantenimiento cambiarán y
extensión los código. Gente tener para trabajo con esta cosas. Pero voluntad ellos querer ¿para?

Cuándo software con complejo conducta carece a bien diseño, eso se convierte duro para
refactorizar o combinar elementos. Duplicación empieza para aparecer como pronto como a
desarrollador no es seguro de prediciendo los implicaciones completas de a cálculo. Duplicación
es forzado Cuándo diseño elementos están monolítico, entonces que el partes no poder ser
recombinado Clases y métodos lata ser roto abajo por mejor reutilizar, pero se pone duro para
mantenerse pista de qué todos los poco partes hacer. Cuándo software no tener a limpio diseño,
los desarrolladores temen incluso mirar el desorden existente, y mucho menos hacer un
cambio que pueda agravar el enredo o romper algo a través de una dependencia imprevist a. En
cualquiera menos en el más pequeño sistemas, esta fragilidad lugares a techo en los riqueza de
conducta eso es factible para construir. Para refactorización y iterativo refinamiento.

Para tener a proyecto acelerar como desarrollo procede—más bien que obtener pesado abajo por
su propio legado—exigencias a diseño que es a Placer para trabajo con, atractivo para cambiar. A
flexible diseño.

El diseño flexible es el complemento del modelado profundo. Una vez que haya desenterrado
los conceptos implícitos y los haya hecho explícitos, tiene la materia prima. A través del ciclo
iterativo, martillas ese material dentro a útil forma, cultivando a modelo que simplemente y
claramente capturas los llave preocupaciones, y formación a diseño que permite a cliente
desarrollador para De Verdad poner que modelo para trabajo. Desarrollo de los diseño y código
Guías para visión que refina modelo conceptos. Ronda y redondo—estamos de regreso los
iterativo ciclo y refactorización hacia Más adentro visión. Pero qué tipo de diseño están usted
tratando de llegar ¿en? Qué tipo de experimentos deberían usted tratar a lo largo de los
¿manera? Que es qué esta capítulo es sobre.

Mucha sobreingeniería se ha justificado en nombre de la flexibilidad. Pero la mayoría de las
veces, el exceso capas de abstracción y indirección obtener en los manera. Mirar en los diseño
de software esto realmente empodera los gente quién encargarse de eso; usted voluntad
generalmente ver algo sencillo. Sencillo es no es fácil. Para crear elementos que se puedan
ensamblar en sistemas elaborados y aún así ser comprensibles, a Dedicación para IMPULSADO
POR MODELO DISEÑO posee para ser Unido con a moderadamente diseño riguroso estilo. Eso mayo
bien exigir relativamente sofisticado diseño habilidad para crear o para uso _

Desarrolladores jugar dos roles, cada de cual deber ser servido por los diseño. los mismo persona
bien podría desempeñar ambos roles, incluso cambiar de un lado a otro en minutos, pero la
relación con el código es diferente, no obstante. Una función es la de desarrollador de un
cliente, que entreteje los objetos del dominio en el solicitud código o otro dominio capa código,
utilizando capacidades de los diseño. A flexible El diseño revela un profundo modelo subyacente
que deja claro su potencial. El desarrollador del cliente puede usar de manera flexible a mínimo
colocar de flojamente acoplado conceptos para Rápido a rango de escenarios en los dominio.
Diseño elementos encajar juntos en a natural manera con a resultado que es
previsible, claramente caracterizado, y robusto.

Igualmente importante, el diseño debe servir al desarrollador que trabaja para cambiarlo. Para
estar abierto al cambio, un diseño debe ser fácil de entender, revelando el mismo modelo
subyacente que el cliente desarrollador es dibujo en. Eso deber seguir los contornos de a
profundo modelo de los dominio, entonces la mayoría de los cambios doblar los diseño en flexible
puntos. los efectos de su código deber ser transparentemente obvio, entonces los Consecuencias
de a cambiar voluntad ser fácil para prever.

Temprano versiones de a diseño están generalmente rígido. Muchos Nunca adquirir ninguna
flexibilidad en los hora marco o presupuesto de los proyecto. He Nunca visto a grande programa
que tenido esta calidad a lo largo de. Pero cuando la complejidad está frenando el progreso,
perfeccionando las partes más cruciales e intrincadas para obtener un diseño flexible. hace los
diferencia Entre consiguiendo aspirado abajo dentro legado mantenimiento y perforando los
complejidad techo.

Ahí es no fórmula por diseño software me gusta esta, pero I tener sacrificado a colocar de
patrones que, en mi experiencia, tienden a dar flexibilidad a un diseño cuando encajan. Estos
patrones y ejemplos deben dar a sentir por qué a flexible diseño es me gusta y los tipo de
pensando que va dentro eso.


Figura 10.1. Algunos patrones que contribuyen a un diseño
flexible

[ Equipo LiB ]

[ Equipo LiB ]


Interfaces reveladoras de intenciones
En impulsado por el dominio diseño, nosotros querer para pensar sobre significativo dominio
lógica. Código que produce el efecto de una regla sin declarar explícitamente la regla nos obliga
a pensar en procedimientos de software paso a paso. los mismo se aplica para a cálculo que sólo
resultados desde corriendo algunos código, pero no es explícito. Sin a claro conexión para los
modelo, eso es difícil para comprender los efecto de los codificar o anticipar el efecto de un
cambio. El capítulo anterior profundizó en las reglas de modelado y los cálculos de forma
explícita. La implementación de dichos objetos requiere una gran comprensión de los detalles
ásperos del cálculo o la letra pequeña de la regla. La belleza de los objetos es su capacidad
para encapsular todos que, entonces que cliente código es sencillo y lata ser interpretado en
condiciones de conceptos de nivel superior.

Pero si la interfaz no le dice al desarrollador del cliente lo que necesita saber para usar el
objeto efectivamente, él voluntad tener para cavar dentro los internos para comprender los
detalles de todos modos. A lector de los cliente código voluntad tener para hacer los mismo.
Luego más de los valor de los encapsulación es perdió. Estamos siempre luchando cognitivo
sobrecarga: Si los cliente del desarrollador mente es inundado con detalle sobre cómo a
componente lo hace su trabajo, su mente no es claro para trabajo fuera los complejidades de los
cliente diseño. Esta es cierto incluso Cuándo los mismo persona es jugando ambas cosas roles,
desarrollando y utilizando su propio código, porque incluso si él no tener para aprender esos
detalles, allí es a límite para cómo muchos factores él puede considerar en una vez.

Si a desarrollador deber considerar los implementación de a componente en pedido
para utilizar eso, el valor de encapsulación es perdió. Si alguien otro que los original
desarrollador deber inferir el propósito de un objeto o operación establecido en su
implementación, que nuevo el desarrollador puede inferir a propósito que los
operación o clase cumple solamente por oportunidad. Si que era no la intención, los
código mayo trabajo por los momento, pero los conceptual base de los voluntad de
diseño tener estado corrompido, y los dos desarrolladores voluntad ser trabajando en
propósitos cruzados.

Para obtener los valor de explícitamente modelado a concepto en los formulario de a clase o
método, nosotros deber dé a estos elementos del programa nombres que reflejen esos
conceptos. Los nombres de clases y métodos son estupendo oportunidades por mejorando
comunicación Entre desarrolladores, y por mejorando la abstracción de los sistema.

Kent Beck escribió sobre hacer que los nombres de los métodos comuniquen su propósito
con una INTENC IÓN-REVELAC IÓN SELEC TOR ( Beck 1997 ). Todos público elementos de a diseño
juntos hacer arriba su interfaz, y los nombre de cada de esos elementos presenta un
oportunidad para revelar los intención de el diseño. Escribe nombres, método nombres, y
argumento nombres todos combinar para formulario un INTENC IÓN- REVELAC IÓN INTERFAZ .

Por lo tanto:

Nombre clases y operaciones para describir sus efecto y propósito, sin referencia a los
medios por los cuales hacen lo que prometen. Esto libera al desarrollador del cliente
de la necesidad de comprender los aspectos internos. Estos nombres deben ajustarse
al LENGUAJE UBI CUO para que los miembros del equipo puedan inferir rápidamente su
significado. Escribir una prueba para un comportamiento. antes de creando eso, para
fuerza tu pensando dentro cliente desarrollador modo.

Todos los difícil mecanismo deberían ser encapsulado detrás resumen interfaces que hablar en
condiciones de intenciones, bastante que medio.

En las interfaces públicas del dominio, establece relaciones y reglas, pero no cómo se
aplican; describir eventos y comportamiento, pero no cómo ellos están transportado fuera;

formular los ecuación

pero no los numérico método para resolver eso. Pose los pregunta, pero no regalo los medio por
que la responder deberá ser fundar.


Ejemplo
Refactorización: una aplicación de mezcla de pintura

A programa por pintura historias lata show a cliente los resultado de mezclando estándar
pinturas Aquí es la inicial diseño, cual posee a único dominio clase.



Figura 10.2.




La única forma de adivinar lo que es la pintura (Pintura) método hace es leer el código.

pintura de vacío público (pintura de pintura) {
v = v + pintura.getV(); //Despu és de mezclar, se suma el volumen
// Se omitieron muchas l íneas de complicada l ógica de mezcla de colores
// terminando con la asignaci ón de nuevos valores r, b e y.
}

OK, entonces eso mira me gusta esta método combina dos pinturas juntos, los resultado
teniendo a más grande volumen y a mezclado color.

Para cambio nuestro perspectiva, vamos escribe a prueba por esta método. (Esta código es
establecido en los JUnit marco de prueba).

TestPaint de vacío público () {
// Crear a puro amarillo pintura con
volumen=100 Pintura amarillo = nuevo Pintura
(100.0, 0, 50, 0);
// Crear a puro azul pintura con
volumen=100 Pintura azul = nuevo Pintura
(100.0, 0, 0, 50);
// Mezclar el azul en el
pintura amarilla amarilla
(azul);
// Resultado deberían ser volumen de 200.0 de
verde pintar afirmarEquals(200.0,
amarillo.getV(), 0.01); afirmarEquals(25,

amarillo.getB());

afirmarEquals(25,
amarillo.getY());
afirmarEquals(0,
amarillo.getR());
}

los paso prueba es los a partir de punto. Eso es poco satisfactorio en esta punto porque los código
en los test no nos dice lo que está haciendo. Reescribamos la prueba para reflejar la forma en
que nos gustaría usar Paint objetos si nosotros fueron escribiendo a cliente solicitud.
Inicialmente, esta prueba voluntad fallar. En hecho, eso no lo haré incluso compilar. Lo estamos
escribiendo para explorar el diseño de la interfaz del objeto Paint desde el desarrollador del
cliente. punto de vista.

TestPaint de vacío público () {
// Comienzo con a puro amarillo pintura con
volumen=100 Pintura nuestra pintura = nuevo
Pintura (100.0, 0, 50, 0);
// Llevar a puro azul pintura con
volumen=100 Pintura azul = nuevo Pintura
(100.0, 0, 0, 50);
// Mezclar el azul en el
amarillo ourPaint.mixIn(azul);
// Resultado deberían ser volumen de 200.0 de
verde pintura aserciónEquals(200.0,
nuestraPaint.getVolume(), 0.01);
afirmarEquals(25, nuestraPintura.getBlue());
afirmarEquals(25,
nuestraPintura.obtenerAmarillo());
afirmarEquals(0, nuestraPintura.getRed());
}

Nosotros deberían llevar nuestro hora para escribe a prueba que refleja los manera nosotros haría
me gusta para hablar para estas objetos. Después que, nosotros refactorizar los Pintura clase
para hacer los prueba pasar.



Figura 10.3.




los nuevo método nombre mayo no decir los lector todo sobre los efecto de "mezclando en" otro
Paint (para eso necesitaremos ASSERTIONS , que aparecerán en unas pocas páginas). Pero le

dará una pista al lector en suficiente para obtener empezado utilizando los clase, especialmente
con los ejemplo los prueba proporciona. Y eso permitirá los lector de los cliente código para
interpretar los clientela intención. En los próximo pocos ejemplos en Este capítulo, bien
refactorizar esta clase otra vez para hacer eso incluso más claro

Completo subdominios lata ser tallado apagado dentro separar módulos y encapsulado detrás
INTENC IÓN- REVELAC IÓN INTERFAC ES . Utilizando tal tallando para enfocar a proyecto y
administrar los complejidad de un gran sistema voluntad ser discutido más en Capítulo 15 ,
"Destilación," con C OHESIVO MEC ANISMOS y GENÉRIC O SUBDOMINIOS .

Pero en los siguientes dos patrones, nos proponemos hacer que las consecuencias de usar un
método sean muy predecibles. Complejo lógica lata ser hecho sin peligro en SIN EFEC TOS
SEC UNDARIOS FUNC IONES . Métodos que cambio de sistema estado lata ser caracterizado con
ASERC IONES .

[ Equipo LiB ]

[ Equipo LiB ]


Funciones sin efectos secundarios
Las operaciones se pueden dividir ampliamente en dos categorías, comandos y consultas.
Consultas obtener información desde los sistema, posiblemente por simplemente accediendo
datos en a variable, posiblemente realizando un cálculo establecido en que datos. Comandos
(además conocido como modificadores) están operaciones que afectar a algunos cambiar para los
sistemas (por a sencillo ejemplo, por ajuste a variable). En estándar Inglés, el termino lado efecto
implica un involuntario consecuencia, pero en computadora ciencia, eso medio ninguna efectuar
en los estado de los sistema. Para nuestro propósitos, vamos estrecho que sentido para ninguna
cambiar en los estado de los sistema que voluntad afectar futuro operaciones.

¿Por qué se adoptó el término efecto secundario y se aplicó a cambios bastante intencionales
afectados por las operaciones? I asumir esta era establecido en experiencia con complejo
sistemas Más operaciones llamada en otras operaciones, y los llamados invocan aún otras
operaciones. Tan pronto como se involucra este anidamiento arbitrariamente profundo, se
vuelve muy difícil anticipar todas las consecuencias de invocar una operación. Es posible que el
desarrollador del cliente no pretendiera los efectos de las operaciones de segundo y tercer
nivel: se han convertido en efectos secundarios en todos los sentidos de la frase. elementos de
un complejo diseño interactuar en otro formas que están probable para Produce los mismo
imprevisibilidad los uso de los término lado efecto subraya los inevitabilidad de que Interacción.

Las interacciones de múltiples reglas o composiciones de cálculos se vuelven
extremadamente difíciles de predecir. El desarrollador que llama a una operación
debe comprender su implementación. y los implementación de todos su delegaciones
en pedido para prever el resultado. La utilidad de cualquier abstracción de interfaces
es limitada si los desarrolladores se ven obligados a rasgar el velo. Sin abstracciones
predecibles de forma segura, los desarrolladores deben limitar los combinacional
explosión, colocación a bajo techo en los riqueza de conducta que es factible de
construir.

Operaciones que regreso resultados sin productor lado efectos están llamado funciones _ A
función lata ser llamado múltiple veces y regreso los mismo valor cada hora. A función lata
llamada en otro funciones sin preocuparse por la profundidad de anidamiento. Las funciones son
mucho más fáciles de probar que las operaciones que tener lado efectos Para estas razones,
funciones más bajo riesgo.

Obviamente, usted hipocresía evitar comandos en más software sistemas, pero los problema lata
ser mitigado de dos maneras. En primer lugar, puede mantener los comandos y consultas
estrictamente segregados en diferentes operaciones. Garantizar que los métodos que porque
cambios hacer no regreso dominio datos y están mantenido lo más simple posible. Realice todas
las consultas y cálculos en métodos que no causen un lado observable efectos ( Meyer 1988 ).

Segundo, allí están con frecuencia alternativa modelos y diseños que hacer no llamada por un
existente objeto para ser modificado en todos. En lugar de, a nuevo VALOR OBJETO , representando
los resultado de los cálculo, es creado y devuelto Esta es a común técnica, cual voluntad ser
ilustrado en los ejemplo que sigue. UN OBJETO DE VALOR puede crearse en respuesta a una
consulta, entregarse y olvidarse, a diferencia de una ENTIDAD , cuya la vida ciclo es con cuidado
regulado.

V ALOR OBJETOS están inmutable, cual implica que, aparte desde inicializadores llamado solamente
durante creación, todo sus operaciones están funciones V ALOR OBJETOS , me gusta funciones,
están más seguro para utilizar y más fácil para prueba. Una operación que mezcla lógica o
cálculos con cambio de estado debe refactorizarse en dos operaciones separadas. operaciones
(Cazador de aves 1999, pags. 279). Pero por definición, esta segregación de lado efectos en
métodos de comando simples sol o se aplica a ENTIDADES . Después de completar la
refactorización para separar la modificación de la consulta, considere una segunda
refactorización para trasladar la responsabilidad de los cálculos complejos a un VALUE OBJEC T . El

efecto secundario a menudo se puede eliminar por completo derivando a VALOR OBJETO en lugar
de de cambiando existente estado, o por Moviente los completo responsabilidad

en un OBJETO DE VALOR .

Por lo tanto:

Coloque tanto de la lógica del programa como sea posible en funciones, operaciones
que devuelven resultados con no observable lado efectos Estrictamente segregar
comandos (métodos que resultado en modificaciones para observable estado) dentro
muy sencillo operaciones que hacer no devolver información de dominio. Controle aún
más los efectos secundarios moviendo la lógica compleja a VALOR OBJETOS Cuándo a
concepto adecuado los responsabilidad presenta sí mismo.

FUNCIONES SIN EFEC TOS SEC UNDARIOS , especialmente en OBJETOS DE VALOR inmutables , permiten
una combinación segura de operaciones. Cuándo a FUNC IÓN es presentado a través de un
INTENC IÓN-REVELAC IÓN INTERFAZ , a el desarrollador puede utilizar eso sin comprensión los detalle
de su implementación.


Ejemplo
Refactorización de la aplicación de mezcla de pintura nuevamente

A programa por pintura historias lata show a cliente los resultado de mezclando estándar
pinturas Cosecha hasta donde nosotros izquierda apagado en los último ejemplo, aquí es los
único dominio clase.



Figura 10.4.




public void mixIn(Pintar otro) {
volumen = volumen.plus(otro.getVolume());
// Muchas líneas de complicada l ógica de mezcla de colores
// terminando con la asignaci ón de nuevos rojo, azul,
// y amarillo valores.
}

Figura 10.5. Los efectos secundarios del método mixIn()

sucediendo muchas cosas en el método mixIn() , pero este diseño sigue la regla de separar
la modificación desde consultando Una preocupación, cual bien llevar arriba luego, es que los
volumen de los El objeto paint 2, el argumento del método mixIn() , se ha dejado en el limbo.
El volumen de Paint 2 no cambia con la operación, lo que no parece muy lógico en el contexto
de este modelo conceptual. Esta era no a problema por los original desarrolladores porque,
como cerca como nosotros lata decir, no tenían interés en el objeto de pintura 2 después de la
operación, pero es difícil anticipar las consecuencias de lado efectos o sus ausencia. Bien
regreso para esta pregunta pronto en los discusión de ASERC IONES . Para ahora, vamos Mira en
color.

El color es un concepto importante en este dominio. Probemos el experimento de convertirlo en
un objeto explícito. Qué deberían eso ser ¿llamado? "Color" llega para mente primero, pero más
temprano conocimiento crujido ya tenía cedido los importante visión que color mezclando es
diferente por pintura que eso es por los más familiar RGB luz mostrar. los nombre necesidades
para reflejar esta.



Figura 10.6.




Factorizar Pigment Color comunica más que la versión anterior, pero el cálculo es el mismo,
aún en el método mixIn() . Cuando sacamos los datos de color, deberíamos haber tomado un
comportamiento relacionado con ellos. Antes de hacerlo, tenga en cuenta que Pigment Color
es un OBJETO DE VALOR . Por lo tanto, eso deberían ser tratado como inmutable. Cuándo nosotros
mezclado pintura, los Pintura objeto mismo fue cambiado. Era una ENTIDAD con una historia de
vida en curso. Por el contrario, un color de pigmento que representa a especial sombra de
amarillo es siempre exactamente que. En lugar de, mezclando voluntad resultado en a nuevo
pigmento Color objeto representando los nuevo color.

Figura 10.7.




clase pública PigmentColor {
público PigmentColor mezclado con (PigmentColor otro,
proporción doble) {
// Muchas líneas de complicada l ógica de mezcla de colores
// terminando con la creaci ón de un nuevo objeto PigmentColor
// con los nuevos valores rojo, azul y amarillo apropiados.
}
}
Pintura de clase p ública {
public void mixIn(Pintar otro) {
volumen = volumen + otro.getVolume();
doble proporción = otro.getVolume() /
volumen; pigmentoColor =
pigmentColor.mixedWith(other.pigmentColor(), relaci ón);
}
}



Figura 10.8.

Ahora el código de modificación en Paint es lo más simple posible. La nueva clase Pigment
Color captura el conocimiento y lo comunica explícitamente, y proporciona una FUNC IÓN LIBRE
DE EFEC TOS SEC UNDARIOS cuya resultado es fácil para comprender, fácil para prueba , y a salvo
para utilizar o combinar con otro operaciones. Porque eso es entonces a salvo, los complejo lógica
de color mezclando es verdaderamente encapsulado Desarrolladores utilizando esta clase no
tener para comprender los implementación.


[ Equipo LiB ]

[ Equipo LiB ]


afirmaciones
separando complejo cálculos dentro SIN EFEC TOS SEC UNDARIOS FUNC IONES cortes los problema
abajo para tamaño, pero todavía hay un residuo de comandos en las ENTIDADES que producen
efectos secundarios, y cualquiera que use ellos deber comprender sus Consecuencias.
ASERC IONES _ hacer lado efectos explícito y más fácil de tratar con.


Es cierto que un comando que no contiene cálculos complejos puede ser bastante fácil de
interpretar mediante inspección. Pero en a diseño donde más grande partes están construido de
menor unos, a mando mayo invoca otros comandos. El desarrollador que utiliza el comando de
alto nivel debe comprender las consecuencias de cada comando subyacente. Tanto para la
encapsulación. Y debido a que las interfaces de objetos hacer no restringir lado efectos, dos
subclases que implementar los mismo interfaz lata Tiene diferente lado efectos los desarrollador
utilizando ellos voluntad querer para saber cual es cual para prever las consecuencias. Entonces
mucho por abstracción y polimorfismo.

Cuándo los lado efectos de operaciones están solamente definido implícitamente por
sus implementación, los diseños con mucha delegación se convierten en una maraña
de causa y efecto. La única forma de entender un programa es rastrear la ejecución a
través de rutas de ramificación. El valor de la encapsulación es perdió. los necesidad
de rastreo hormigón ejecución derrotas abstracción.

Necesitamos una forma de entender el significado de un elemento de diseño y las
consecuencias de ejecutar un operación sin profundizando dentro su internos I NTENC IÓN-
REVELAC IÓN INTERFAC ES llevar nosotros parte de los manera allí, pero informal sugerencias de
intenciones están no siempre suficiente. los "Diseñado por contrato" colegio va los próximo paso,
haciendo "afirmaciones" sobre clases y métodos que las garantías del desarrollador serán
ciertas. Este estilo se analiza en detalle en Meyer 1988 . Brevemente, "condiciones posteriores"
describir los lado efectos de un operación, los garantizado Salir de vocación a método.
"Condiciones previas" están me gusta los multa imprimir en los contrato, los condiciones que
deber ser satisfecho en para que se mantenga la garantía posterior a la condición. Los
invariantes de clase hacen afirmaciones sobre el estado de un objeto al final de cualquier
operación. También se pueden declarar invariantes para AGREGADOS enteros , rigurosamente
definiendo integridad normas.

Todos estas afirmaciones describir estado, no procedimientos, entonces ellos están más fácil
para analizar. Clase los invariantes ayudan a caracterizar el significado de una clase y
simplifican el trabajo del desarrollador del cliente haciendo que los objetos más previsible. Si
usted confianza los garantía de a condición posterior, usted no tener para preocuparse por cómo
funciona un método. Los efectos de las delegaciones ya deberían estar incorporados en las
afirmaciones.

Por lo tanto:

Estado post-condiciones de operaciones e invariantes de clases y AGREGADOS . Si
AFIRMACIONES no poder ser codificado directamente en tu programación idioma,
escribe unidad automatizada pruebas por ellos. Escribe ellos dentro documentación o
diagramas donde eso encaja los estilo de los del proyecto desarrollo proceso.

Buscar modelos con coherente conjuntos de conceptos, cual dirigir a desarrollador
para inferir las AFIRMACIONES previstas , acelerando la curva de aprendizaje y
reduciendo el riesgo de declaraciones contradictorias código.

Aunque muchos lenguajes orientados a objetos actualmente no soportan ASERC IONES
directamente,

AFIRMAC IONES siguen siendo una forma poderosa de pensar en un diseño. Las pruebas unitarias
automatizadas pueden parcialmente

compensar por los carecer de idioma apoyo. Porque ASERC IONES están todos en condiciones de
estados, en lugar de procedimientos, hacen que las pruebas sean fáciles de escribir. La
configuración de la prueba establece las condiciones previas; luego, después ejecución, los
prueba cheques para ver si los condiciones posteriores sostener.

Las invariantes claramente establecidas y las condiciones previas y posteriores permiten al
desarrollador comprender las consecuencias. de utilizando un operación o objeto. Teóricamente,
ninguna no contradictorio colocar de las afirmaciones funcionarían. Pero los humanos no solo
compilan predicados en sus cabezas. Estarán extrapolando y interpolando los conceptos de los
modelo, entonces eso es importante para encontrar modelos que hacer sentido A la gente como
bien como satisfactorio los necesidades de los solicitud.


Ejemplo
Volver a Mezcla de pintura

Recordar que en los anterior ejemplo I era preocupado sobre los ambigüedad de qué sucede
para el argumento de los mezclar (pintar) operación en los Pintura clase.



Figura 10.9.




El volumen del receptor aumenta en la cantidad del volumen del argumento. Basándonos en
nuestro general comprensión de físico pintura, esta mezclando proceso deberían agotar los otro
pintura por lo mismo Monto, drenaje eso para cero volumen, o eliminando eso completamente. los
Actual la implementación hace no modificar los argumento, y modificando argumentos es a
particularmente arriesgado tipo de lado efecto de todos modos.

Para comienzo en a sólido pie, vamos estado los condición posterior de los mezclar()
método como eso es : después p1.mezclar(p2):
p1.volumen es aumentado por Monto de
p2.volumen . p2.volumen es sin alterar.
El problema es que los desarrolladores van a cometer errores, porque estas propiedades no se
ajustan a los conceptos nosotros tener invitado ellos para pensar sobre. los simple reparar haría
ser cambiar los volumen de la otra pintura a cero. Cambiar un argumento es una mala práctica,
pero sería fácil e intuitivo. Nosotros pudo estado un invariante:

El volumen total de pintura no cambia al mezclar.

Pero ¡Espere! Tiempo desarrolladores fueron reflexionando esta opción, ellos hecha a
descubrimiento. Eso vueltas fuera que hay era a convincente razón los original diseñadores
hecha eso esta manera. En los final, los programa

informes los lista de sin mezclar pinturas que fueron agregado _ Después todos, los
último propósito de esta aplicación es para ayuda a usuario figura fuera cual pinturas
para poner dentro a mezcla.

Por lo tanto, hacer que el modelo de volumen sea lógicamente consistente lo haría inadecuado
para los requisitos de su aplicación. Parece que hay un dilema. ¿Estamos atascados en
documentar la extraña condición posterior y tratar de compensar con una buena comunicación?
No todo en este mundo es intuitivo, y a veces que es los mejor responder. Pero en esta caso, los
torpeza parece para apunta a desaparecido conceptos. Vamos Mira por a nuevo modelo.


Podemos ver claramente ahora

Mientras buscamos un mejor modelo, tenemos ventajas significativas sobre los diseñadores
originales, porque de los conocimiento crujido y refactorización para Más adentro visión que
posee sucedió en el interino Para ejemplo, nosotros calcular color utilizando a SIN EFEC TOS
SEC UNDARIOS FUNC IÓN en a VALOR OBJETO . Esto significa nosotros lata repetir los cálculo ninguna
hora nosotros necesitar para. Nosotros deberían llevar ventaja de que.

Parece que le estamos dando a Paint dos responsabilidades básicas diferentes. Intentemos
dividirlos.

Ahora allí es solamente una mando, mezclarEn() . Eso sólo agrega un objeto para a colección, un
efecto aparente de un intuitivo comprensión de los modelo. Todos otro operaciones están SIN
EFEC TOS SEC UNDARIOS FUNC IONES .

A prueba método confirmando una de los ASERC IONES listado en Figura 10.10 pudo Mira algo Me
gusta esto (utilizando los JUnit prueba estructura):

prueba de vacío públicoMixingVolume {
PigmentoColor amarillo = nuevo PigmentoColor(0,
50, 0); PigmentoColor azul = nuevo
PigmentoColor(0, 0, 50);
StockPaint pintura1 = nuevo StockPaint(1.0,
amarillo); StockPaint paint2 = nuevo
StockPaint(1.5, azul); MixedPaint mezcla =
nuevo Pintura Mixta();
mezclar.mezclar(pintar1);
mezclar.mezclar(pintura2);
afirmarEquals(2.5, mezclar.obtenerVolumen(), 0,01);
}



Figura 10.10.

Esta modelo capturas y comunica más de los dominio. los invariantes y las condiciones
posteriores hacen común sentido, cual voluntad hacer ellos más fácil para mantener y utilizar.


los comunicatividad de los INTENC IÓN-REVELAC IÓN INTERFAC ES , conjunto con los previsibilidad
dada por SIN EFEC TOS SEC UNDARIOS FUNC IONES y AFIRMAC IONES , deberían hacer encapsulación y
abstracción segura.

los próximo ingrediente en recombinable elementos es eficaz
descomposición. . . . [ Equipo LiB ]

[ Equipo LiB ]


Contornos conceptuales
A veces gente picar funcionalidad multa para permitir flexible combinación. A veces ellos bulto es
grande para encapsular complejidad. A veces ellos buscar a consistente granularidad, haciendo
todos clases y operaciones a una escala similar. Estas son simplificaciones excesivas que no
funcionan bien como reglas generales. Pero ellos están motivado por a básico colocar de
problemas.

Cuando los elementos de un modelo o diseño se integran en una construcción
monolítica, su funcionalidad se duplica. La interfaz externa no dice todo lo que un
cliente podría cuidado sobre. Sus sentido es duro para comprender, porque diferente
conceptos están mezclados juntos.

En los otro mano, rotura abajo clases y métodos lata inútilmente complicar el cliente,
obligando a los objetos del cliente a comprender cómo encajan las piezas pequeñas.
Peor aún, un concepto lata ser perdió completamente. Medio de a uranio átomo es no
uranio. Y de curso, no es sólo grano Talla que cuenta, pero sólo donde los grano
carreras.

libro de cocina normas no trabajo. Pero allí es a lógico consistencia profundo en más dominios, o
demás lo harían no ser viable en sus propio esfera. Esta es no para decir que dominios están
perfectamente consistente, y ciertamente los formas gente hablar sobre ellos están no
consistente. Pero allí es rima y razón en alguna parte, o demás modelado haría ser inútil. Porque
de esta subyacente consistencia, Cuándo encontramos a modelo que resuena con algunos parte
de los dominio, eso es más probable para ser consistente con otro partes que nosotros descubrir
luego. A veces los nuevo descubrimiento no es fácil por los modelo para adaptarse a, en cual
caso nosotros refactorizar para Más adentro visión, y esperar para ajustarse para los próximo
descubrimiento.

Esta es una razón por qué repetido refactorización finalmente Guías para flexibilidad. los
C ONTORNOS C ONC EPTUALES surgir como los código es adaptado para recién entendido
conceptos o requisitos

los mellizo fundamentos de elevado cohesión y bajo acoplamiento jugar a papel en diseño en
todos escamas, de individuo métodos arriba a través de clases y MÓDULOS para Gran escala
estructuras (ver Capítulo 16 ). Estas dos principios aplicar para conceptos como mucho como
para código. Para evitar corrimiento dentro a vista mecanicista de ellos, templar tu técnico
pensando por frecuentemente conmovedor base con tu intuición Para el dominio. Con cada
decisión, pedir tú mismo, "Es esta un conveniente establecido en a especial colocar de las
relaciones en el modelo y el código actual, o se hace eco de algún contorno del dominio
subyacente?"

Encontrar los conceptualmente significativo unidad de funcionalidad, y los resultante diseño
voluntad ser ambas cosas flexible y comprensible. Para ejemplo, si un "adición" de dos objetos
posee a coherente sentido en el dominio, luego implementar métodos en ese nivel. No divida el
add() en dos pasos. no procedas para los próximo paso dentro de los mismo operación. En a
levemente más grande escala, cada objeto debiera ser a único completo concepto, a " ENTERO
VALOR ." [1]

[1] El patrón TODO EL VALOR , por Ward C unningham.

Por los mismo simbólico, allí están áreas en ninguna dominio donde detalle no es interesante
para los tipo de la gente los software sirve los usuarios de nuestro hipotético pintura
mezclando solicitud no agregar pigmento rojo o azul pigmento; ellos combinar completo
pinturas, cual Contiene todos Tres pigmentos
Aglomeración cosas que no necesitar para ser disecado o reorganizado evita desorden y hace eso
más fácil ver los elementos que De Verdad están quiso decir para recombinar Si nuestro de los

usuarios físico equipo individuo permitido pigmentos para ser agregado, los dominio haría ser
alterado, y los individual pigmentos puede ser manipulado A pintura químico haría necesitar
todavía más fino control, cual haría involucrar a entero otro análisis, probablemente
produciendo un modelo mucho más detallado de la composición de la pintura que nuestro
resumen pigmento color que sirve pintura mezclando Pero eso es simplemente irrelevante para
alguien involucrado en

los pintura mezclando solicitud
proyecto. Por lo tanto:
Descomponga los elementos de diseño (operaciones, interfaces, clases y AGREGADOS )
en cohesivos unidades, tomando dentro consideración tu intuición de los importante
divisiones en el dominio. Observar los ejes de cambio y estabilida d a través de
sucesivas refactorizaciones y buscar por los subyacente CONCEPTUAL CONTORNOS que
explicar estas cizallamiento patrones. Alinear el modelo con los aspectos consistentes
del dominio que lo convierten en un área de conocimiento viable en los primero lugar.

los meta es a sencillo colocar de interfaces que combinar lógicamente para hacer sensato
declaraciones en el ubicuo IDIOMA , y sin los distracción y mantenimiento carga de irrelevante
opciones Esta es típicamente un Salir de refactorización: es duro para Produce arriba parte
delantera. Pero eso mayo Nunca Emerger de técnicamente orientado refactorización; eso surge
desde refactorización hacia Más adentro visión.

Incluso cuando el diseño sigue C ONTORNOS C ONC EPTUALES , será necesario realizar modificaciones
y refactorizaciones. Cuándo sucesivo refactorización tiende para ser localizado, no sacudida
múltiple amplio conceptos del modelo, es un indicador del ajuste del modelo. Encontrar un
requisito que fuerza cambios extensos en el desglose de los objetos y métodos es un mensaje:
nuestra comprensión del dominio necesita refinamiento. Presenta una oportunidad para
profundizar en el modelo y hacer que el diseño sea más flexible.


Ejemplo
Los CONTORNOS de las acumulaciones

En Capítulo 9 , a préstamo seguimiento sistema era refactorizado establecido en Más
adentro visión dentro conceptos contables:



Figura 10.11.

los nuevo modelo contenido solamente una más objeto que los viejo una, aún los
fraccionamiento de responsabilidad tenido estado muy cambió.

Horarios, cual tenido estado trabajó fuera a través de caso lógica en los Calculadora
clases, fueron explotados dentro discreto clases por diferente tipos de Tarifa y interesar.
En los otro mano, pagos de Tarifa y interesar, previamente conservó separar, fueron
agrupado juntos.

Porque de los resonancia de los recién explícito conceptos y los cohesión de los Calendario de
acumulación jerarquía, los desarrollador creía que esta modelo mejor sigue algunos de los
C ONC EPTUAL del dominio C ONTORNOS .


Figura 10.12. Este modelo se adapta a la adición de nuevos tipos de
cronogramas de acumulación.

El único cambio que el desarrollador podía predecir con confianza era la adición de nuevos
cronogramas de acumulación . Esos requisitos ya estaban esperando en las alas. Así que
además de hacer existente funcionalidad más claro y más simple, ella eligió a modelo que haría
hacer eso fácil para introducir nuevo horarios. Pero tenido ella fundar a C ONC EPTUAL C ONTORNO
que voluntad ayuda los dominio diseño cambiar y crecer como los solicitud y los negocio
¿evolucionar? Ahí lata ser no garantías sobre cómo un diseño voluntad encargarse de
inesperado cambiar, pero ella pensamiento eso tenido mejorado los impares.


Un cambio inesperado

Como los proyecto procedió, a requisito surgido por detallado normas por manejo temprano y
pagos atrasados. Como ella estudió los problema, los desarrollador era satisfecho para ver que
virtualmente los mismas reglas aplicado para pagos en interesar y para pagos en Tarifa. Esta
quiso decir que los nuevo elementos del modelo haría conectar naturalmente para los único
Pago clase.



Figura 10.13.

los viejo diseño haría tener forzado duplicación Entre los dos Pago Historia clases (Esta
dificultad podría haber desencadenado una idea de que la clase Pago debería compartirse,
liderada por otra sendero para a similar modelo.) Esta facilitar de extensión hizo no venir porque
ella anticipado el cambio. Tampoco vino porque ella hizo un diseño tan versátil que podía
acomodar cualquier concebible cambiar. Eso sucedió porque en los anterior refactorización, los
diseño era alineado con subyacente conceptos de los dominio.


QUE REVELAN LA INTENC IÓN permiten a los clientes presentar los objetos como unidades de
significado en lugar de simplemente mecanismos. SIN EFEC TOS SECUNDARIOS FUNC IONES y
ASERC IONES hacer eso a salvo para utilizar esos unidades y hacer complejo combinaciones los
aparición de C ONC EPTUAL C ONTORNOS estabiliza partes de los modelo y además hace los unidades
más intuitivo para utilizar y combinar.

Nosotros lata todavía correr dentro conceptual sobrecarga Cuándo interdependencias fuerza
nosotros para pensar sobre también muchos de estas cosas en a hora. . . .


[ Equipo LiB ]

[ Equipo LiB ]


Clases independientes
interdependencias hacer modelos y diseños duro para comprender. Ellos además hacer ellos
duro Probar y mantener. Y interdependencias pila arriba fácilmente.

Cada asociación es, de curso, a dependencia, y comprensión a clase requiere entender lo que eso
es adjunto para. Esos adjunto cosas voluntad ser adjunto para todavía más cosas, y ellos tener
ser entendido también. los escribe de cada argumento de cada método es además a dependencia.
Entonces es cada retorno valor.

Con una dependencia, usted tener para pensar sobre dos clases en los mismo hora, y los
naturaleza de ellos relación. Con dos dependencias, usted tener para pensar sobre cada de los
Tres clases, la naturaleza de los de clase relación para cada de ellos, y ninguna relación ellos
puede que tener para El uno al otro. Si a su vez tienen dependencias, también debe tener
cuidado con ellas. Con tres dependencias . . . eso bolas de nieve

Ambas cosas MÓDULOS y AGREGADOS están dirigido en limitando los web de interdependencias.
Cuándo a altamente cohesivo subdominio es tallado fuera dentro a MÓDULO , a colocar de objetos
están desacoplado desde los descanso de El sistema, entonces allí están a finito número de
interrelacionado conceptos. Pero incluso a MÓDULO puede ser a mucho a pensar sobre sin un casi
fanático compromiso para controlador dependencias dentro de eso.

Incluso dentro de un MÓDULO , la dificultad de interpretar un diseño aumenta
enormemente a medida que las dependencias están agregado. Esta agrega para
mental sobrecarga, limitando los diseño complejidad un desarrollador lata encargarse
de. Implícito conceptos contribuir para esta carga incluso más que referencias
explícitas.

Los modelos refinados se destilan hasta que cada conexión restante entre conceptos
representa algo fundamental para los sentido de esos conceptos. En un importante subconjunto,
los número de dependencias lata ser reducido para cero, resultante en a clase que lata ser
completamente entendido todos por mismo, junto con a pocos primitivos y básico Biblioteca
conceptos.

En cada programación ambiente, a pocos lo esencial están entonces penetrante que ellos están
siempre en mente. Por ejemplo, en el desarrollo de Java, las primitivas y algunas bibliotecas
estándar proporcionan conceptos básicos como números, instrumentos de cuerda, y colecciones
Prácticamente discurso, "enteros" no agregar para los intelectual carga. Más allá de que, cada
adicional concepto que posee para ser sostuvo en mente en pedido para comprender un el objeto
contribuye para mental sobrecarga.

Implícito conceptos, Reconocido o poco reconocido, contar sólo como mucho como explícito
referencias Aunque nosotros lata generalmente ignorar dependencias en primitivo valores tal
como enteros y instrumentos de cuerda, nosotros no puedo ignorar qué ellos representar _ Para
ejemplo, en los primero pintura mezclando ejemplos, los Pintura objeto celebró tres público
enteros representando rojo, amarillo, y azul color valores. los creación de los Color del pigmento
objeto hizo no aumento los número de conceptos involucrado o los dependencias Eso hizo hacer el
unos que fueron ya allí más explícito y más fácil para comprender. En los otro mano, la operación
Collection size() devuelve un int que es simplemente un conteo, el significado básico de un
número entero, entonces no nuevo concepto es implícito.

Cada dependencia es sospechar Hasta que probado básico para los concepto detrás los
objeto. Esta comienza el escrutinio con los factorización de los modelo conceptos ellos
mismos. Luego eso requiere atención para cada asociación y operación individual. Las
opciones de modelo y diseño pueden eliminar las dependencias, a menudo para cero.

El bajo acoplamiento es fundamental para el diseño de objetos. Cuando puedas, ve

hasta el final. Eliminar
todos los demás concept os de la imagen. Entonces la clase será completamente
autónoma.

y lata ser estudió y entendido solo. Cada tal autónomo clase alivia significativamente
los carga de comprensión a MÓDULO .

Las dependencias de otras clases dentro del mismo módulo son menos dañinas que las que
están fuera. Igualmente, Cuándo dos objetos están naturalmente estrechamente acoplado,
múltiple operaciones implicando los mismo par puede aclarar la naturaleza de la relación. El
objetivo no es eliminar todas las dependencias, pero para eliminar todos no esencial unos. Si
cada dependencia hipocresía ser eliminado, cada uno que se elimine libera al desarrollador
para concentrarse en las dependencias conceptuales restantes.

Tratar para factor los más intrincado cálculos dentro SER ÚNIC O C LASES , quizás por modelado
OBJETOS DE VALOR sostuvo por los más conectado clases

los concepto de pintura es fundamentalmente relacionados para los concepto de color. Pero
color, incluso de pigmento, se puede considerar sin pintura. Al hacer explícitos estos dos
conceptos y destilar la relación, la asociación unidireccional restante dice algo importante, y
el color del pigmento clase, donde más de los computacional complejidad mentiras, lata ser
estudió y probado solo.


Bajo acoplamiento es a básico manera para reducir conceptual sobrecarga. A SER ÚNIC O C LASE
es un extremo de bajo acoplamiento.

La eliminación de dependencias no debería significar simplificar el modelo reduciendo
arbitrariamente todo para primitivos. los final patrón de esta capítulo, C IERRE DE OPERAC IONES , es
un ejemplo de un técnica por reduciendo dependencia tiempo acuerdo a Rico interfaz. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Cierre de Operaciones
Si nosotros llevar dos verdadero números y multiplicar ellos juntos, nosotros obtener otro
verdadero número. [Los números reales son todos los números racionales y todos los
números irracionales.] Porque esto siempre es cierto, nosotros decir que los verdadero
números están "cerrado bajo los operación de multiplicación": hay es no manera para
escapar los colocar. Cuándo usted combinar ninguna dos elementos de los colocar, los el
resultado es además incluido en los colocar.

— Foro de Matemáticas, Universidad de Drexel

Por supuesto, habrá dependencias, y eso no es malo cuando la dependencia es fundamental
para el concepto. Desmontar las interfaces para lidiar con nada más que primitivos puede
empobrecer ellos. Pero a lote de innecesario dependencias, y incluso completo conceptos, obtener
introducido en interfaces

Más interesante objetos final arriba haciendo cosas que hipocresía ser caracterizado
por primitivos solos.

Otra práctica común en diseños refinados es lo que llamo " C IERRE DE OPERAC IONES ". El nombre
proviene del más refinado de los sistemas conceptuales, las matemáticas. 1 + 1 = 2. La
operación de suma se cierra bajo el conjunto de números reales. Los matemáticos son
fanáticos de no introducir extraño conceptos, y los propiedad de cierre proporciona ellos a
manera de definiendo una operación sin involucrar ningún otro concepto. Estamos tan
acostumbrados al refinamiento de las matemáticas que puede ser difícil comprender cuán
poderosos son sus pequeños trucos. Pero este se usa mucho en software diseños como bien. los
básico utilizar de XSLT es para transformar una XML documento en otro XML documento. Esta
clasificar de XSLT operación es cerrado bajo los colocar de XML documentos. los propiedad de
cierre tremendamente simplifica los interpretación de un operación, y eso es fácil pensar sobre
encadenamiento juntos o combinatorio cerrado operaciones.

Por lo tanto:

Donde corresponda, defina una operación cuyo tipo de devolución sea el mismo que
el tipo de sus argumentos. Si el implemen tador tiene un estado que se usa en el
cálculo, entonces el implementador es efectivamente un argumento de los operación,
entonces los argumento(s) y el valor de retorno debe ser del mismo tipo que el
implementador. Tal operación se cierra bajo el conjunto de instancias de ese tipo.
Una operación cerrada proporciona una interfaz de alto nivel sin introduciendo
ninguna dependencia en otro conceptos.

Esta patrón es más con frecuencia aplicado para los operaciones de a VALOR OBJETO . Porque los
la vida ciclo de una ENTIDAD posee significado en los dominio, usted hipocresía sólo conjurar
arriba a nuevo una para responder a pregunta. Ahí están operaciones que están cerrado bajo un
ENTIDAD escribe. Tú pudo pedir un Empleado objeto para su supervisor y recuperar a otro
Empleado . Pero, en general, las ENTIDADES no son el tipo de conceptos que probablemente
sean el resultado de un cálculo. Entonces, en su mayor parte, esta es una oportunidad para
Mira por en los VALOR OBJETOS .

Un operación lata ser cerrado bajo un resumen escribe, en cual caso específico argumentos
lata ser de diferente hormigón clases Después todos, adición es cerrado bajo verdadero
números, cual lata ser ya sea racional o irracional.

Como estás experimentando, mirando por formas para reducir interdependencia y aumento
cohesión, tú a veces obtener Medio camino para esta patrón. los argumento partidos los
implementador, pero los el tipo de retorno es diferente, o el tipo de retorno coincide con el
receptor y el argumento es diferente. Estas operaciones están no cerrado, pero ellos hacer dar

algunos de los ventajas de C IERRE . Cuándo los extra

type es una clase de biblioteca primitiva o básica, libera la mente casi tanto como C LOSURE .

En el ejemplo anterior, la operación Pigment Color mixedWith() se cerró en Pigment
Colors , y allí están varios otro ejemplos dispersado a través de los libro. Aquí está un ejemplo
eso demuestra cómo útil esta idea lata ser, incluso Cuándo cierto C IERRE no es alcanzado.


Ejemplo
Seleccionando de Colecciones

En Java, si usted querer para Seleccione a subconjunto de elementos desde a colección , usted
solicitud un Iterador . Luego usted iterar a través de los elementos, pruebas cada una,
probablemente acumulando los partidos en un nuevo colección _

Colocar empleados = (algunos Colocar de
Empleado objetos); Colocar empleados de bajo
salario = nuevo HashSet();
Iterarlo = empleados.iterador();
while (it.hasNext()) {
Empleado unEmpleado =
es.siguiente(); if
(unEmpleado.salario() < 40000)
LowPaidEmployees.add(unEmpleado);
}

Conceptualmente, He seleccionado a subconjunto de a colocar. Qué hacer I necesitar con esta
extra concepto, Iterator, y toda su complejidad mecánica? En Smalltalk, llamaría a la
operación "seleccionar" en la Colección , paso en los prueba como un argumento. los regreso
haría ser a nuevo Colección que contiene solo los elementos que aprobado los prueba.

empleados := (algunos Colocar de Empleado
objetos). LowPaidEmployees := empleados
Seleccione:
[:unEmpleado | un salario de empleado < 40000].

los Charla Colecciones proveer otro tal FUNC IONES que regreso derivado Colecciones , que
puede ser de varios hormigón clases los operaciones están no cerrado, porque ellos llevar a
"cuadra" como un argumento. Pero bloques están a básico Biblioteca escribe en Charla, entonces
ellos no agregar para los mental del desarrollador carga. Porque los regreso valor partidos los
implementador, ellos lata ser ensartado juntos, como una serie de filtros. Son fáciles de escribir
y fáciles de leer. No introducen conceptos extraños que están irrelevante para los problema de
seleccionando subconjuntos


los patrones presentado en esta capítulo ilustrar a general estilo de diseño y a manera de
pensando en diseño. Haciendo software obvio, previsible, y comunicativo hace abstracción y
encapsulación eficaz. Modelos lata ser factorizado entonces que objetos están sencillo para
utilizar y entender todavía todavía tener Rico, nivel alto interfaces

Estas técnicas requieren habilidades de diseño bastante avanzadas para aplicar y, a veces,
incluso para escribir un cliente. La utilidad de un DISEÑO IMPULSADO POR MODELOS es sensible a la
calidad del diseño detallado y implementación decisiones, y eso solamente toma a pocos
confundido desarrolladores para hacer descarrilar a proyecto desde el meta.

Que dijo, por los equipo dispuesto para cultivar su modelado y diseño habilidades, estas patrones
y el camino de pensando ellos reflejar producir software que desarrolladores lata trabajo y
rehacer para crear complejo

software. [
Equipo LiB ]

[ Equipo LiB ]


Diseño declarativo
Las ASSERC IONES pueden conducir a diseños mucho mejores, incluso con nuestra forma
relativamente informal de probarlos. Pero no puede haber garantías reales en el software
escrito a mano. Para nombrar sólo una forma de evadir AFIRMAC IONES , código pudo tener
adicional lado efectos que fueron no específicamente excluido. No importa cómo IMPULSADO POR
MODELO nuestro diseño es, nosotros todavía final arriba escribiendo procedimientos para Produce
los efecto de las interacciones conceptuales. Y pasamos gran parte de nuestro tiempo
escribiendo código repetitivo que no De Verdad agregar ninguna sentido o conducta. Esta es
tedioso y tenso con error, y los a granel de eso oscurece los sentido de nuestro modelo. (Algunos
idiomas están mejor que otros, pero todos exigir nosotros a hacer a lote de gruñido trabajo.) I
NTENC IÓN-REVELAC IÓN INTERFAC ES y los otro patrones en esta ayuda capitulo, pero ellos lata Nunca
dar convencional orientado a objetos programas formal rigor.

Estas son algunas de las motivaciones detrás del diseño declarativo . Este término significa
muchas cosas para muchos gente, pero generalmente eso indica a manera para escribe a
programa, o algunos parte de a programa, como una especie de especificación ejecutable. Una
descripción muy precisa de las propiedades realmente controla el software. En su varios
formularios, esta pudo ser hecho a través de a reflexión mecanismo o en tiempo de compilación
a través de la generación de código (produciendo código convencional automáticamente,
basado en la declaración). Esta Acercarse permite otro desarrollador para llevar los declaración
en rostro valor. Eso es un absoluto garantía.

generando a corriendo programa desde a declaración de modelo propiedades es a tipo de
Santo Grial de MODELO IMPULSADO DISEÑO , pero eso lo hace tener su trampas en práctica.
Para ejemplo, aquí están sólo dos particulares problemas He encontrado más que una vez.

A declaración idioma no expresivo suficiente para hacer todo necesario, pero a marco
que hace eso muy difícil para ampliar los software más allá de los automatizado parte

Codigo de GENERACION tecnicas que lisiado los iterativo ciclo por fusionando generado
código en manuscrito código en a manera que hace regeneración muy destructivo

los involuntario consecuencia de muchos intentos en declarativo diseño es los embrutecimiento
de el modelo y solicitud, como desarrolladores, atrapado por los limitaciones de los estructura,
promulgar triaje de diseño en pedido para obtener algo entregado.

basado en reglas programación con un inferencia motor y a regla base es otro prometedor
acercarse a declarativo diseño. Desafortunadamente, sutil cuestiones lata socavar esta intención.

Aunque a basado en reglas programa es declarativo en principio, más sistemas tener "control
predicados" que fueron agregado para permitir rendimiento Afinación. Esta control código
presenta lado efectos, entonces que el comportamiento es no más extenso dictado
completamente por los declarado normas. agregando, quitando, o reordenando el normas lata
porque inesperado, incorrecto resultados Por lo tanto, a lógica programador posee para ser
cuidado con mantenerse los efecto de código obvio, sólo como un objeto programador lo hace.

Muchos enfoques declarativos pueden corromperse si los desarrolladores los eluden de forma
intencionada o no. Esta es probable Cuándo los sistema es difícil para utilizar o demasiado
restrictivo. Todo el mundo tiene que seguir los normas de los estructura en pedido para obtener
los beneficios de a declarativo programa.

los mayor valor He visto entregado posee estado Cuándo a estrechamente alcance estructura
automatiza un particularmente tedioso y propenso a errores aspecto de los diseño, tal como
persistencia y mapeo objeto-relacional. Lo mejor de estos desahogar a los desarrolladores del
trabajo pesado dejándoles total libertad. para diseño.

Idiomas específicos del dominio

Un enfoque interesante que a veces es declarativo es el lenguaje específico del dominio. En
este estilo, el código del cliente se escribe en un lenguaje de programación adaptado a un
modelo particular de un dominio particular. Por ejemplo, un lenguaje para los sistemas de
envío podría incluir términos como carga y ruta , a lo largo de con sintaxis por asociando ellos.
los programa es luego compilado, con frecuencia en un convencional orientado a objetos idioma,
donde a Biblioteca de clases proporciona implementaciones Para el condiciones en los idioma.

En tal a idioma, programas lata ser extremadamente expresivo, y hacer los más fuerte
Conexión con los UBIC UO IDIOMA . Esta es un excitante concepto, pero específico del dominio
idiomas también tienen sus inconvenientes en los enfoques He visto establecido en orientado a
objetos tecnología.

Para refinar el modelo, un desarrollador debe poder modificar el lenguaje. Esto puede implicar
la modificación de declaraciones gramaticales y otras funciones de interpretación del lenguaje,
así como la modificación de clase bibliotecas Yo soy todos en favor de aprendiendo avanzado
tecnología y diseño conceptos, pero tenemos que evaluar seriamente las habilidades de un
equipo en particular, así como las habilidades probables de los futuros equipos de
mantenimiento. Además, hay valor en la fluidez de una aplicación y un modelo implementado
en los mismo idioma. Otro retirarse es que eso lata ser difícil para refactorizar código de cliente
para ajustarse a un modelo revisado y su lenguaje específico de dominio asociado. por
supuesto, alguien mayo venir arriba con a técnico reparar por los refactorización problemas.



Esta técnica puede que ser más útil por muy maduro modelos, quizás donde cliente código es
siendo escrito por un equipo diferente. En general, tales configuraciones conducen a la
distinción venenosa entre altamente técnico estructura constructores y técnicamente no
capacitado solicitud constructores, pero eso no tiene para ser que manera.

En los esquema programación idioma, algo muy similar es parte de estándar estilo de
programación, entonces que los expresividad de a específico del dominio idioma lata ser creado
sin bifurcando el sistema.


[ Equipo LiB ]

From the Ground Up

A different paradigm might handle domain-specific languages better than objects. In the
Scheme programming language, a representative of the "functional programming"
family, something very similar is part of standard programming style, so that the
expressiveness of a domain-specific language can be created without bifurcating the
system.

[ Equipo LiB ]


Un estilo declarativo de diseño
Una vez que su diseño tenga INTERFAC ES QUE REVELEN LA INTENC IÓN , FUNC IONES SIN EFEC TOS
SEC UNDARIOS y
AFIRMAC IONES , usted están cenefa dentro declarativo territorio. Muchos de los beneficios de
declarativo diseño son adquirido una vez usted tener combinable elementos que comunicar
sus sentido, y han caracterizado o obvio efectos, o no observable efectos en todos.

A flexible diseño lata hacer eso posible por los cliente código para utilizar a declarativo estilo
de diseño. Para ilustrar, los próximo sección voluntad traer juntos algunos de los patrones en
esta capítulo para hacer la ESPEC IFIC AC ION más flexible y declarativo.


Ampliación de ESPECIFICACIONES en un Declarativo Estilo

Capítulo 9 cubierto los básico concepto de ESPEC IFICACION , los papeles eso lata jugar en a
programa, y Algún sentido de qué es involucrado en implementación. Ahora vamos llevar a Mira
en a pocos campanas y silbatos eso puede ser muy útil en algunos situaciones con Complicado
normas.

ESPECIFICACIONES _ es un adaptación de un establecido formalismo, los predicado.
predicados tener otros útiles propiedades que nosotros lata dibujar en, selectivamente.


Combinación de ESPECIFICACIONES Uso de operadores lógicos

Cuándo utilizando ESPEC IFIC ACIONES , usted rápidamente venir al otro lado de situaciones en cual
usted haría me gusta para combínalos. Como se acaba de mencionar, una ESPEC IFIC ACIÓN es un
ejemplo de un predicado, y los predicados se pueden combinar y modificado con los operaciones
"Y," "O," y "NO." Estas lógico operaciones esta cerrado bajo predicados, entonces ESPEC IFIC ACIÓN
combinaciones voluntad exposición C IERRE DE OPERAC IONES .

Como significativo generalizado capacidad es construido dentro ESPEC IFIC ACIONES , eso se
convierte muy útil para crear una clase abstracta o interfaz que se puede usar para
ESPEC IFIC ACIONES de todo tipo. Esto significa escribir argumentos como algunos nivel alto
resumen clase.

Especificación de interfaz pública {
booleano isSatisfiedBy (objeto candidato);
}

Esta abstracción llamadas por a Guardia cláusula en los comenzando de los método, pero de lo
contrario eso lo hace no afectar funcionalidad. Para ejemplo, los Envase Especificación (desde
los ejemplo en Capítulo 9 , en página 236) haría ser modificado esta manera:

público clase Especificación del contenedor implementos
Especificación { privado ContenedorCaracter ística
característica requerida;
público ContainerSpecification(ContainerFeature
requerido) { característica requerida = requerido;
}

booleano está satisfecho por ( Objeto candidato ){
if (!instancia candidata de Contenedor) devuelve falso;

regreso
(Contenedor) aContainer.getFeatures().contains(requiredFeature);
}
}

Ahora, ampliemos la interfaz de Especificación agregando las tres nuevas operaciones:

Especificación de interfaz pública {
booleano isSatisfiedBy (objeto candidato);
Especificación y (Especificación otro);
Especificación o (Especificación
otra); Especificaci ón no();
}

Recordar que algunos Envase Especificaciones fueron configurado para exigir ventilado
Contenedores y otros que requieran Contenedores blindados . Una sustancia química que es a la
vez volátil y explosiva, presumiblemente, necesitar ambas cosas de estas ESPEC IFIC ACIONES .
Fácilmente hecho, utilizando los nuevo métodos.

Especificación ventilado = nuevo
EspecificaciónContenedor(VENTILADO); Especificación blindado =
nuevo EspecificaciónContenedor(BLINDADO);
Especificación ambos = ventilado y (blindado);

los declaración define a nuevo Especificación objeto con los previsto propiedades Esta
combinación habría requerido una especificación de contenedor más complicada , y aún
habría sido especial propósito.

Suponer nosotros tenido más que una tipo de ventilado contenedor _ Eso puede que no
importar por algunos artículos que tipo ellos fueron lleno dentro. Ellos pudo ser metido en
cualquiera escribe.

Especificación ventilatedType1 =
nueva especificación de contenedor (VENTILADO_TIPO_1);
Especificación ventilatedType2 =
nueva especificaci ón de contenedor
(VENTILADO_TIPO_2); Especificaci ón cualquiera =
ventilatedType1.or (ventilatedType2);

Si se considerara un despilfarro almacenar arena en contenedores especializados, podríamos
prohibirlo
ESPEC IFIC ANDO un contenedor "económico" sin características especiales.

Especificación barato = (ventilado.no()).y(blindado.no());

Esta restricción haría tener impedido algunos de los subóptimo conducta de los
almacén de prototipos envasador discutido en Capítulo 9 _

los capacidad para construir complejo especificaciones fuera de sencillo elementos aumenta los
expresividad de El código. los combinaciones están escrito en a declarativo estilo.

Dependiente en cómo ESPEC IFIC ACIONES están implementado, estas operadores mayo ser fácil o

difícil Para proveer. Lo que sigue es una implementación muy simple, que sería ineficiente en
algunas situaciones. y bastante práctico en otros. Eso es quiso decir como un explicativo
ejemplo _ Me gusta ninguna patrón, allí están muchos formas para implementar eso.

público resumen clase ResumenEspecificaci ón implementa
especificación {
público Especificación y (Especificación otro)
{ regreso nuevo YEspecificación(esto, otro);
}
público Especificación o (Especificación
otro) { regreso nuevo oEspecificación(esto,
otro);
}
especificación pública no () {
volver nuevo NotSpecification(esto);
}
}
público clase YEspecificación extiende ResumenEspecificaci ón
{ Especificación una;
Especificación otro;
público AndSpecification(Especificaci ón X, Especificación
y) { uno = X;
otro = y;
}
público booleano está satisfecho por (objeto
candidato) { regreso
one.isSatisfiedBy(candidate) &&
otro.estáSatisfechoPor(candidato);
}
}
público clase OEspecificación extiende
ResumenEspecificaci ón { Especificación una;
Especificación otro;
público OEspecificación(Especificación X, Especificación
y) { uno = X;
otro = y;
}
público booleano está satisfecho por (objeto
candidato) { regreso
one.isSatisfiedBy(candidate) ||
otro.estáSatisfechoPor(candidato);
}
}
público clase NotSpecification extiende
ResumenEspecificaci ón { Especificación envuelto;
público NotSpecification(Especificaci ón
X) { envuelto = X;
}
público booleano está satisfecho por (objeto
candidato) { volver
!envuelto.estáSatisfechoPor(candidato);
}
}

Figura 10.14. Diseño COMPUESTO de ESPECIFICACIONES

Este código fue escrito para que sea lo más fácil posible de leer en un libro. Como dije, puede
haber situaciones en las que esto sea ineficiente. Sin embargo, son posibles otras opciones de
implementación que minimizarían el número de objetos o aumentaría n la velocidad, o tal vez
serían compatibles con tecnologías idiosincrásicas presentes en algún proyecto. Lo importante
es un modelo que capture los conceptos clave de los dominio, a lo largo de con
animplementación que es fiel para que modelo. Que sale de mucho de habitación para resolver
rendimiento problemas.

También, esta completo generalidad es no necesario en muchos casos. En especial, Y tiende para
ser usado a mucho más que los otros, y eso además tiende para crear menos implementación
complejidad. no ser miedo a implementar solamente Y, si que es todos usted necesitar.

Hace mucho tiempo en el Capítulo 2 , en el diálogo de ejemplo en la página 30, los
desarrolladores aparentemente no habían implementado los "satisfecho por" conducta de sus
ESPEC IFICACION . Arriba para que punto, los La ESPEC IFIC ACIÓN se había utilizado solo para la
construcción por encargo. Aun así, la abstracción estaba intacta, y agregando funcionalidad
era relativamente fácil. Utilizando a patrón no significar edificio caracteristicas usted no
necesitar. Ellos lata ser agregado luego, como largo como los conceptos no obtener confuso


Ejemplo
Una Implementación Alternativa de la ESPECIFICACIÓN COMPUESTA

Algunos entornos de implementación no se adaptan muy bien a los obj etos de granularidad
muy fina. Una vez trabajé en un proyecto con una base de datos de objetos que insistía en dar
una identificación de objeto a cada objeto y luego seguimiento eso. Cada objeto tenido un
montón de gastos generales en memoria espacio y rendimiento, y total habla a espacio era a
limitando factor. I empleado ESPEC IFIC ACIONES en algunos importante puntos en el diseño del
dominio, que creo que fue una buena decisión. Pero usé una versión un poco más elaborada.
de los implementación descrito en esta capítulo, cual era definitivamente a error. Eso resultó en
millones de muy multa granulado objetos que contribuido para atascado los sistema abajo.

Aquí es un ejemplo de un alternativa implementación que codifica los compuesto ESPEC IFIC ACIÓN
como un cuerda o formación codificación los lógico expresión, para ser interpretado en tiempo de
ejecución

(no preocuparse si usted hacer no ver cómo usted haría implementar esta. los importante
cosa es para darse cuenta de que allí están muchos formas de implementar a ESPEC IFIC AC IÓN
con lógico operadores, y entonces si lo simple una es no práctico en tu situación, usted tener
opciones.)

S PECIFICACIÓN Contenido de pila para "Contenedor barato"
Top AndSpecificationOperator (F LY PESO )
NoEspecificaciónOperador ( VOLAR
PESO ) Blindado
NoEspecificaciónVentilado
por el operador
Cuándo usted querer para prueba a candidato, usted tener para interpretar esta estructura,
cual lata ser hecho haciendo estallar apagado cada elemento, luego evaluando eso o haciendo
estallar apagado los próximo como requerido por un operador. Tú haría final arriba con esta:

y (no (blindado), no (ventilado))

Este diseño tiene pros ( + ) y contras ( – ):

+ Recuento bajo de objetos

+ Uso eficiente de la memoria

– Requiere desarrolladores más sofisticados

Tú tener para encontrar un implementación con compensaciones que trabajo por tu
circunstancias. los mismo patrón y modelo lata estar debajo de muy diferente
implementaciones.


Subsunción

Esta final rasgo es no generalmente necesario y lata ser difícil para implementar, pero cada
ahora y Entonces eso resuelve a De Verdad duro problema. Eso además aclara los sentido de a
ESPEC IFIC ACION .

Considerar otra vez los químico depósito envasador desde los ejemplo en página 235. Recordar
que cada Químico tenía una Especificación de Contenedor, y el SERVIC IO de Envasador
garantizó que todos estos ser satisfecho Cuándo Batería están asignado para contenedores _
Todos es bien... Hasta que alguien cambia el reglamentos

Cada pocos meses a nuevo colocar de normas es emitido, y nuestro usuarios haría me gusta para
ser poder para Produce a lista de los químico tipos que ahora tener más riguroso requisitos

De curso, nosotros pudo dar a parcial responder (y una los usuarios probablemente además
querer) por corriendo una validación de cada Tambor en los inventario, con los nuevo
ESPEC IFIC ACIONES en lugar, y hallazgo todos aquellos que ya no cumplen con el SPEC . Esto les
diría a los usuarios qué tambores en el inventario existente ellos necesitar para moverse.

Pero qué ellos pedido por era a lista de productos quimicos cuyo manejo posee volverse más
riguroso. Quizás allí están ninguna interno Correcto ahora, o quizás ellos sólo sucedió para ser
lleno dentro un mas riguroso envase. En cualquiera caso, los informe sólo descrito haría no
lista ellos.

Introduzcamos una nueva operación para comparar directamente dos ESPEC IFIC ACIONES .

subsumes booleanos (Especificaci ón otro);

A más riguroso ESPEC IFIC ACIONES subsume a menos riguroso una. Eso pudo llevar su lugar sin
ninguna anterior

requisito siendo descuidado.


Figura 10.15. La ESPECIFICACIÓN para un contenedor de gasolina
se ha endurecido.

En el lenguaje de ESPEC IFIC ACIÓN , diríamos que la nueva ESPEC IFIC ACIÓN subsume la antigua
ESPEC IFIC ACION , porque ninguna candidato que haría satisfacer los nuevo ESPECIFICACIONES
haría además satisfacer los viejo.

Si cada una de estas ESPEC IFIC ACIONES se ve como un predicado, la subsunción es equivalente
a la implicación lógica. Utilizando convencional notación, B medio que declaración A implica
declaración B , así que eso si A es cierto, B es además cierto.

Vamos aplicar esta lógica para nuestro emparejamiento de contenedores necesidades. Cuándo a
ESPECIFICACIÓN es siendo cambiado, nosotros haría me gusta para saber si los propuesto
nuevo ESPECIFICACIONES Satisface todos los condiciones de los viejo una.

Nuevo Especificaciones Viejo Especificaciones
Es decir, si la nueva especificación es verdadera, la anterior también lo es. Probar una
implicación lógica en un general manera es muy difícil, pero especial casos lata ser fácil. Para
ejemplo, especial ESPEC IFIC ACIONES parametrizadas lata definir sus propio subsunción regla.

especificación de edad mínima de clase
pública { umbral int;
público booleano está satisfecho por (persona
candidato) { regreso candidato.getEdad() >=
límite;
}
público booleano subsume(MinimumAgeSpecification otro) {
regreso límite >= otro.getThreshold();
}
}

Una prueba JUnit podría contener esto:

EdadConduciendo = nueva especificaci ón de edad
mínima (16); edad de votacion = nueva
especificacion de edad minima (18);
afirmarTrue(EdadDeLaVotaci ón.subsume(EdadDeLaCon
ducción));

Otro caso especial práctico, adecuado para abordar el problema de la especificación del
contenedor , es un
ESPEC IFIC ACIÓN que combina la subsunción con el operador lógico único AND.

Especificación de interfaz pública {
booleano está satisfecho por (objeto
candidato); Especificación y
(Especificación otra); booleano subsume
(Especificación otro);
}

Probar la implicación con solo el operador AND es simple:

A Y B A
o, en un caso más complicado:

A Y B Y C A Y B
Entonces si los Compuesto Especificación es poder para recolectar todos los hoja
ESPEC IFIC ACIONES que están "Y" juntos, luego todos nosotros tener para hacer es controlar que los
subsumiendo ESPEC IFIC ACIÓN posee todos los sale de que el subsumido una posee, y quizás
algunos extra unos como bueno es sale de están a superconjunto de los otras especificaciones _
colocar de sale de.

subsumes booleanos p úblicos (especificaci ón
otra) { si (otro en vez de Especificación
compuesta) {
Colección otras Hojas =
(EspecificaciónCompuesta) other.leafSpecifications();
Iterador it = otrasHojas.iterador();
while (it.hasNext()) {
if (!leafSpecifications().contains(it.next()))
devuelve false;
}
} demás {
if (!leafSpecifications().contains(other))
devuelve false;
}
devolver verdadero;
}

Esta Interacción pudo ser mejorado para comparar con cuidado elegido parametrizado hoja
ESPEC IFIC ACIONES y algunas otras complicaciones. Desafortunadamente, cuando se incluyen OR
y NOT, estas pruebas se vuelven mucho más involucrado. En más situaciones eso es mejor para
evitar tal complejidad por haciendo una elección, ya sea renunciando a algunos de los
operadores o renunciando a la subsunción. Si ambos son necesarios, considere con cuidado si
los beneficio es estupendo suficiente para justificar los dificultad.

Todos hombres
están mortal.
Sócrates en ESPECIFICACIONES

Especificación manSpec = new ManSpecification();
Especificación mortalSpec = nueva
EspecificaciónMortal(); afirmar manSpec.subsumes
(mortalSpec);

Sócrates es a
hombre.

Hombre Sócrates = nuevo Hombre();
afirmar manSpec.isSatisfiedBy(socrates);

Por lo tanto, Sócrates es
mortal.

aseverar mortalSpec.isSatisfiedBy(socrates);


[ Equipo LiB ]

[ Equipo LiB ]


Ángulos de ataque
Este capítulo ha presentado una serie de técnicas para aclarar la intención del código, hacer
transparentes las consecuencias de su uso y desacoplar los elementos del modelo. Aun así,
este tipo de diseño es difícil. Tú hipocresía sólo Mira en un enorme sistema y decir, "Vamos
hacer esta flexible." Tú tener para escoger objetivos Aquí están a Pareja de amplio enfoques,
seguido por un ejemplo extendido demostración cómo los patrones están encajar juntos y
usado para llevar en a más grande diseño.


Tallar subdominios

Simplemente no puede abordar todo el diseño a la vez. Escójalo. Algunos aspectos del sistema
sugerirán enfoques para usted, y ellos lata ser factorizado fuera y trabajó sobre. Tú mayo ver a
parte del modelo que puede verse como matemática especializada; separa eso. Su aplicación
impone complejos normas restringiendo estado cambios; jalar esta fuera dentro a separar
modelo o sencillo marco que vamos usted declarar los normas. Con cada tal paso, no solamente
es los nuevo módulo limpio, pero además la parte que queda atrás es más pequeña y más clara.
Parte de lo que queda está escrito en estilo declarativo, una declaración en condiciones de los
especial Matemáticas o validación estructura, o lo que formulario los subdominio toma.

Eso es más útil para hacer a grande impacto en una área, haciendo a parte de los diseño De
Verdad flexible, que esparcir tus esfuerzos. El Capítulo 15 analiza con más profundidad cómo
elegir y administrar subdominios.


Recurra a formalismos establecidos, cuando Poder

Crear un marco conceptual ajustado desde cero es algo que no se puede hacer todos los días.
A veces usted descubrir y refinar una de estas sobre los curso de los la vida de a proyecto. Pero
puede con frecuencia utilizar y adaptar conceptual sistemas que están largo establecido en tu
dominio o otros, algunos de cual tener estado refinado y destilado sobre siglos. Muchos negocio
aplicaciones involucrar contabilidad, por ejemplo. Contabilidad define a bien desarrollado colocar
de ENTIDADES y normas que hacer para un fácil adaptación para a profundo modelo y a flexible
diseño.

Ahí están muchos tal formalizado conceptual marcos, pero mi personal favorito es Matemáticas.
Eso es sorprendente cómo útil eso lata ser para jalar fuera algunos giro en básico aritmética.
Muchos dominios incluir matemáticas algun lado. Mirar por eso. Cavar eso fuera. Especializado
Matemáticas es limpio, combinable por claro normas, y gente encontrar eso fácil para
comprender. Una ejemplo desde mi pasado es " Acciones Matemáticas ," cual voluntad final Este
capítulo.


Ejemplo
Integrando los patrones: Shares Math

Capítulo 8 dicho los historia de a modelo descubrimiento en a proyecto para construir a
sindicado préstamo sistema. Ahora esta ejemplo voluntad ir dentro detalle, enfoque en sólo una
rasgo de a diseño comparable para el único en que proyecto.

Un requisito de esa aplicación era que cuando el prestatario realiza un pago de capital, el

el dinero es, por defecto, prorrateado de acuerdo con la participación de los prestamistas
en el préstamo.


Diseño Inicial para Distribución de Pagos

Como nosotros refactorizar eso, esta código voluntad obtener más fácil para comprender,
entonces no obtener pegado en esta versión.



Figura 10.16.




Préstamo de clase
pública { mapa
privado Comparte;
//Se excluyen accesores, constructores y m étodos muy simples
público Mapa distribuirPagoPrincipal(doble monto del pago) {
Asignar acciones de pago = nuevo HashMap();
Asignar préstamos
compartidos =
obtenerCompartir(); total
doble = obtenerCantidad();
iterador eso =
préstamoShares.keySet().iterator();
while(it.hasNext()) {
Propietario del objeto = es.siguiente();
doble cantidad inicial del pr éstamo compartido =
getShareAmount(propietario); pago dobleShareAmount =
cantidad inicial del pr éstamo compartido /
total * monto del pago; Compartir pagoCompartir =
nueva acción (propietario, cantidad
de la participación en el pago);
pagoShares.put(propietario, pagoShare);
double newLoanShareAmount =
initialLoanShareAmount - cantidad de la
participación en el pago;
Compartir nuevo pr éstamo Compartir =
nueva acción (propietario,
nuevoImporte de participaci ón en
préstamo);
préstamoShares.put(propietario, nuevo
préstamo compartido);
}
regreso acciones de pago;
}

getAmount público doble () {
Asignar préstamos
compartidos =
obtenerCompartir(); total
doble = 0,0;
iterador eso =
préstamoShares.keySet().iterator();
while(it.hasNext()) {
Cuota préstamo compartido = (Cuota)
préstamoShares.get(it.next()); total = total +
préstamoShare.getAmount();
}

devolución total;
}
}


Separación de comandos y funciones gratuitas de efectos secundarios

Este diseño ya tiene INTERFAC ES REVELADORAS DE INTENC IÓN . Pero el
distribuirPagoPrincipal() método lo hace a peligroso cosa: Eso calcula los Comparte para
distribución y además modifica los préstamo _ Vamos refactorizar para separar los consulta
desde los modificador



Figura 10.17.




público vacío applyPrincipalPaymentShares(Mapa acciones de
pago) { Mapear préstamos compartidos =
obtenerCompartir();
iterador eso = pagoAcciones.keySet().iterator();
while(it.hasNext()) {
Prestamista de objetos = es.siguiente();
Cuota pagoCompartir = (Cuota)
pagoAcciones.get(prestamista); Compartir préstamoShare
= (Acción) préstamoShares.get(prestamista); doble
newLoanShareAmount = préstamoShare.getAmount() -
cuotaparticipación.getCantidad();
Cuota nuevoLoanShare = nuevo Compartir (prestamista,
nuevoImporte de participaci ón en préstamo);
préstamoShares.put(prestamista, newLoanShare);
}
}
público Mapa calcularPrincipalPagoAcciones(doble monto del pago) {
Asignar acciones de pago = nuevo HashMap();
Asignar préstamos
compartidos =
obtenerCompartir(); total
doble = obtenerCantidad();
iterador eso =
préstamoShares.keySet().iterator();
while(it.hasNext()) {
Prestamista de objetos = es.siguiente();
Cuota préstamo compartir = (Cuota)
préstamoShares.get(prestamista); pago
dobleShareAmount =
préstamoShare.getAmount() / total * cantidadPago;
Cuota pagoCompartir = nuevo Compartir (prestamista,
cantidad de la participaci ón en el pago);

pagoAcciones.put(prestamista, cuota de pago);
}
regreso acciones de pago;
}

El código del cliente ahora se ve así:

Distribución del mapa =
aLoan.calculatePrincipalPaymentShares(paymentAmount);
aLoan.applyPrincipalPaymentShares(distribuci ón);

No está mal. Las FUNC IONES han encapsulado mucha complejidad detrás de las INTERFAC ES QUE
REVELAN LA INTENC IÓN . Pero el código comienza a multiplicarse un poco cuando agregamos
applyDrawdown() , calculateFeePaymentShares() , y entonces en. Cada extensión complica
los código y pesa abajo. Esta puede que ser a punto donde los granularidad es también grueso.
los convencional Acercarse sería para descanso los cálculo métodos abajo dentro subrutinas Que
pudo bien ser a bien paso en el camino, pero finalmente queremos ver los límites conceptuales
subyacentes y profundizar el modelo. Los elementos de un diseño con tal grano C ONC EPTO-
C ONTORNO podrían combinarse para producir los necesario variaciones.


Hacer explícito un concepto implícito

Ahí están suficiente punteros ahora para comienzo sondeo por que nuevo modelo. los Cuota
objetos están pasivos en esta implementación, y están siendo manipulados de formas
complejas y de bajo nivel. Esto es porque más de los normas y calculos sobre Comparte no
aplicar para único Comparte, pero para grupos de ellos. Ahí es a desaparecido concepto:
Comparte están relacionados para cada otro como partes haciendo arriba a entero. Haciendo esta
concepto explícito voluntad dejar nosotros Rápido esos normas y calculos más sucintamente.



Figura 10.18.




los Cuota Tarta representa los total distribución de a específico préstamo _ Eso es un ENTIDAD
cuyo identidad es local dentro del AGREGADO del Préstamo . Los cálculos de distribución reales
se pueden delegar al Share pastel _

Figura 10.19.




Préstamo de clase
pública {
SharePie privado Comparte;
//Accesorios, constructores y m étodos directos
//se omiten
público Mapa calcularPrincipalPagoDistribucion(
Cantidad de pago
doble) { devuelve getShares(). prorrateado (cantidad de
pago);
}
público vacío applyPrincipalPayment(Mapa acciones de
pago) { acciones.disminuir(pagoAcciones);
}
}

los Préstamo es simplificado, y los Cuota calculos están centralizado en a VALOR OBJETO
enfocado en ese responsabilidad. Todavía, los calculos no he De Verdad volverse más versátil
o más fácil para utilizar.


Share Pie se convierte en un O BJETO DE V ALOR : Cascade of Insights

Con frecuencia, los las manos en experiencia de implementar a nuevo diseño voluntad
desencadenar a nuevo visión dentro el modelo sí mismo. En esta caso, los ajustado acoplamiento
de los Préstamo y Cuota Tarta parece para ser oscureciendo la relación de los Cuota Tarta y
los acciones _ Qué haría suceder si nosotros hecha Cuota Tarta a OBJETO DE VALOR ?

Esta haría significar que aumentar(mapa) y disminuir(mapa) haría no ser permitido, porque la
parte Tarta haría tener para ser inmutable. Para cambiar los Cuota tarta _ valor, los entero
Tarta tendría para ser sustituido. Entonces usted pudo tener operaciones tal como
addShares(Mapa) que haría regreso entero nuevo, más grande Cuota pastel _

Vamos hasta el C IERRE DE OPERACIONES En lugar de "aumentar" un Share Pie o agregar
Shares , simplemente agregue dos Share Pies juntos: el resultado es el Share Pie nuevo y
más grande .

Nosotros lata parcialmente cerrar los prorratear() operación sobre Cuota Tarta sólo por
cambiando los regreso escribe. Renombrar eso para prorrateado() enfatiza su carecer de lado
efectos "Comparte Matemáticas" empieza para llevar forma, inicialmente con cuatro operaciones.



Figura 10.20.




Nosotros lata hacer algunos bien definido ASERC IONES sobre nuestro nuevo VALOR OBJETOS , los
Cuota empanadas _ Cada método medio algo.

[Ver ancho completo]
clase pública SharePie
{
compartir mapas privados = nuevo HashMap();
//Se omiten los accesores y otros m étodos directos

getAmount público doble ()
{ total doble = 0.0;
Iterador it = acciones.keySet().iterator();
while(it.hasNext()) { El todo es igual a la suma de sus partes.
Cuota préstamo compartido =
getShare(es.siguient e()); total =
total + préstamoShare.getAmount();
}
devolución total;
}
público compartirpie menos(CompartirPastel
otras acciones) { Resultado de SharePie =
nuevo CompartirPastel();
Establecer propietarios =
nuevo HashSet();
propietarios.addAll(getOwne
rs());
propietarios.addAll(otherShares.getOwners()); los diferencia Entre dos
empanadas es la diferencia entre cada propietario Cuota.
Iterarlo = propietarios.iterador();
while(it.hasNext()) {
Propietario del objeto = es.siguiente();
doble resultadoCompartirCantidad =

getShareAmount(propietario) –
otherShares.getShareAmount(propietario);

result.add(propietario, resultShareAmount);
}
resultado devuelto;
}

público compartirpie más(CompartirPastel otras acciones) { los combinación de
dos empanadas es la combinación de cada dueño Cuota.
// Similar a la implementaci ón de minus()
}
público compartirpie prorrateado (doble cantidad
a prorratear) { SharePie prorrateo = nuevo
CompartirPastel();
doble base = obtenerCantidad(); Un Monto lata ser dividido proporcionalmente
entre todos los accionistas.
Iterador it = acciones.keySet().iterator();
while(it.hasNext()) {
Propietario del objeto =
it.next(); compartir
compartir =
getShare(propietario);
Cantidad de participaci ón prorrateada doble =
compartir.getAmount() / base * cantidad a
prorratear; prorrateo.add(propietario, Cantidad
de participación prorrateada);
}
prorrateo de devoluci ón;
}
}


La flexibilidad del nuevo diseño

En este punto, los métodos en la clase de préstamo de suma importancia podrían ser tan
simples como esto:

Préstamo de clase pública {
SharePie privado Comparte;
//Accesorios, constructores y m étodos directos
//se omiten
público compartirpie calcularPrincipalPagoDistribucion(
Cantidad de pago
doble) { devolver acciones. prorrateadas (cantidad de
pago);
}
público vacío applyPrincipalPayment(SharePie acciones de
pago) { setShares(shares.minus(pagoShares));
}

Cada uno de estos métodos breves establece su significado . Aplicar un pago de capital
significa que usted resta los pago desde los préstamo, Cuota por Cuota. Distribuido a principal
pago es hecho Dividiendo los Monto Pro rata entre los accionistas. los diseño de los Cuota Tarta
posee permitido nosotros a utilizar a declarativo estilo en los Préstamo código, productor código
que comienza para leer me gusta a definición conceptual de los negocio transacción, bastante que
a cálculo.

Otro transacción tipos (también Complicado para lista antes de) lata ser declarado fácilmente
ahora. Para ejemplo, préstamo detracciones están dividido entre prestamistas establecido en
sus Comparte de los instalación _ los nuevo dibujar-abajo es agregado para los sobresaliente
préstamo _ En nuestro nuevo dominio idioma:

Instalación de clase
pública { SharePie
privado Comparte;
. . .
público compartirpie calcularDrawdownDefaultDistribution(
monto de doble retiro) {
devolver acciones. prorrateadas (cantidad de extracci ón);
}
}
Préstamo de clase pública {
. . .
público vacío applyDrawdown(CompartirPastel
drawdownShares) {
setShares(shares.plus(drawdownShares));
}
}

Para ver los desviación de cada prestador desde su acordado contribución, llevar los teórico
distribución de El sobresaliente Préstamo Monto y sustraer eso desde los préstamo real
Comparte:

SharePie originalAgreement =
aFacility.getShares().prorated(aLoan.getAmount());
SharePie real = unPréstamo.getShares();
Desviación de SharePie = actual.minus(acuerdo original);

Cierto caracteristicas de los Cuota Tarta diseño hacer por esta fácil recombinación y
comunicación en los código.

Complejo lógica es encapsulado en especializado VALOR OBJETOS con SIN EFECTOS
SECUNDARIOS FUNCIONES . Más complejo lógica posee estado encapsulado en estas inmutable
objetos. Porque Cuota los pasteles son VALOR OBJETOS , los Matemáticas operaciones lata
crear nuevo instancias, cual nosotros lata utilizar libremente para reemplazar anticuado
instancias.

Ninguna de los Cuota Tarta métodos causas ninguna cambiar para ninguna existente
objeto. Esta permite nosotros usar más() , menos() , y prorrateado() libremente en
intermedio cálculos, combinatorio ellos, esperando ellos para hacer qué sus nombres
sugerir, y nada más. Eso además permite nosotros para construir analítico caracteristicas
establecido en los mismo métodos. (Antes, ellos pudo ser llamado solamente Cuándo un
real distribución era hecha, porque los datos haría cambiar después cada llamada.)

modificador de estado operaciones están sencillo y caracterizado con ASERCIONES . los
abstracciones de alto nivel de Comparte Matemáticas permitir invariantes de actas para
ser escrito concisamente en un estilo declarativo. Por ejemplo, la desviación es el
pastel real menos el monto del préstamo prorrateado establecido en los de la
instalación Cuota pastel _

Los conceptos del modelo están desacoplados; operaciones enredan un mínimo de otros
tipos . Algunos métodos en Cuota Tarta exposición C IERRE DE OPERAC IONES (las métodos
para agregar o sustraer esta cerrado bajo Cuota empanadas ). Otros llevar sencillo
montos como argumentos o regreso valores; no son cerrados, pero agregan poco a la
carga conceptual. Share Pie interactúa de cerca con solo otra clase, Share . Como
resultado, Share Pie es autónomo, fácil de entender, probar y combinar fácilmente para
formar transacciones declarativas. Estas propiedades fueron heredado desde los
Matemáticas formalismo.

El formalismo familiar hace que el protocolo sea fácil de entender . Un protocolo
totalmente original para manipular Comparte pudo tener estado ideado establecido en
financiero terminología. En principio, podria tener estado hecha flexible. Pero eso haría
tener tenido dos desventajas Primero, eso haría tengo que ser inventado, a difícil y incierto
tarea. Segundo, eso haría tener para ser aprendió por cada

persona quién tratado con eso. Gente quién ver Comparte Matemáticas reconocer a sistema
ellos ya saber, y porque los diseño posee estado conservó con cuidado consistente con los
normas de aritmética, esa gente están no engañado

Tracción fuera los parte de los problema que correspondido para los formalismo de
Matemáticas, nosotros llegado en un flexible diseño por Comparte que más destila los centro
Préstamo y Instalaciones métodos. (Ver Capítulo 15 por discusión de los C ENTRO DOMINIO .)

Flexible diseño posee a profundo efecto en los capacidad de software para afrontar con cambiar y
complejidad. Como los ejemplos en esta capítulo tener mostrado, eso con frecuencia bisagras en
bastante detallado modelado y decisiones de diseño. El impacto puede ir más allá de un
problema específico de modelado y diseño. El capítulo 15 discutirá los estratégico valor de
flexible diseño como una de varios herramientas por destilando a dominio modelo para hacer
grande y complejo proyectos más manejable.


[ Equipo LiB ]

[ Equipo LiB ]


Capítulo Once. Aplicación de patrones de
análisis
Profundo modelos y flexible diseños no venir fácilmente. Progreso llega desde un montón de
aprendiendo sobre el dominio, un montón de hablando, y un montón de prueba y error. A veces,
aunque, nosotros lata obtener a pierna arriba.

Cuándo un experimentado desarrollador mirando en a dominio problema ve a familiar clasificar
de responsabilidad o una red familiar de relaciones, él o ella puede recurrir a la memoria de
cómo se resolvió el problema antes. ¿Qué modelos se probaron y cuáles funcionaron? ¿Qué
dificultades surgieron en la implementación y cómo se resolvieron? El ensayo y error de esa
experiencia anterior de repente es relevante para la nueva situación. Algunos de estos
patrones han sido documentados y compartidos, permitiendo los descanso de nosotros para
dibujar en los acumulado experiencia.

En contraste para los fundamental edificio cuadra patrones presentado en Parte Yo , y los flexible
criterios de diseño de Capítulo 10 , estas patrones están más alto nivel y más especializado,
implicando los utilizar de un pocos objetos para representar algunos concepto. Ellos dejar
nosotros Corte a través de caro prueba y error para Empezar con a modelo que es ya expresivo y
implementable y direcciones sutilezas que puede que ser costoso para aprender. Desde que a
partir de punto, nosotros refactorizar y experimentar. Estas están no soluciones listas para usar.

En Patrones de análisis: modelos de objetos reutilizables , Martin Fowler definió sus patrones
de esta manera:

Análisis patrones están grupos de conceptos que representar a común construcción en
modelado de negocios Puede ser relevante para un solo dominio o puede abarcar
muchos dominios. [ Fowler 1997 , pág. 8]

los análisis patrones Cazador de aves presenta surgió desde experiencia en los campo, y entonces
ellos están práctico, en la situación correcta. Dichos patrones proporcionan a alguien que
enfrenta un dominio desafiante puntos de partida muy valiosos para su proceso de desarrollo
iterativo. El nombre enfatiza su concepto naturaleza. Análisis patrones están no tecnológico
soluciones; ellos están guías para ayuda tu trabajas fuera a modelo en a especial dominio.

Lo que, lamentablemente, el nombre no transmite es que existe un debate importante sobre la
implementación en estas patrones, incluso algunos código. Cazador de aves entiende los trampas
de análisis sin pensar en el diseño práctico. Aquí hay un ejemplo interesante en el que mira
incluso más allá despliegue, para los trascendencia de específico modelo elecciones en los a largo
plazo mantenimiento de El sistema en los campo:

Cuando construimos una nueva práctica [contable], creamos una red de nuevas
instancias de la publicación regla. Nosotros lata hacer esta sin ninguna recopilación o
reconstrucción de los sistema, tiempo eso todavía está en funcionamiento. Habrá
ocasiones inevitables en las que necesitemos un nuevo subtipo de publicación regla, pero
estas voluntad ser raro. [pags. 151]

En a maduro proyecto, modelo elecciones están con frecuencia informado por experiencia con los
solicitud. Múltiples implementaciones de varios componentes voluntad tener estado intentado.
Algunos de estas voluntad tener estado llevado a producción y incluso voluntad tener enfrentado
los mantenimiento fase. Muchos problemas lata ser evitado cuando tal experiencia es disponible.
Análisis patrones en sus mejor lata llevar que tipo de experiencia de otro proyectos, combinatorio
modelo perspectivas con extenso discusiones de diseño direcciones e implementación
Consecuencias. Para discutir modelo ideas fuera de que contexto hace ellos más difícil aplicar y
corre el riesgo de abrir la brecha mortal entre el análisis y el diseño, que es la antítesis de

IMPULSADO POR MODELOS DISEÑO .

los principio y solicitud de análisis patrones lata ser explicado mejor por ejemplo que a través de
resumen descripción. En esta capítulo, I voluntad dar dos ejemplos de desarrolladores haciendo
utilizar de a pequeño, representativo muestra de modelos desde los capítulo "Inventario y
Contabilidad" en Cazador de aves 1997 _ El analisis patrones voluntad ser resumido sólo
suficiente para apoyo los ejemplos Esta es obviamente no un intento para catalogar patrones de
esta tipo o incluso para completamente explicar los muestra patrones. los punto es para ilustrar
sus integración dentro los impulsado por el dominio diseño proceso.


[ Equipo LiB ]

[ Equipo LiB ]


Ejemplo
Ganar intereses con cuentas
Capítulo 10 mostró varios posible formas que a desarrollador puede que búsqueda por a Más
adentro modelo por un particular especialidad contabilidad solicitud. Aquí es aún otro guión. Esta
hora, los los desarrolladores lo harán Mia cazador de aves Análisis Patrones libro por útil ideas

Para revisar, una aplicación para el seguimiento de préstamos y otros activos que devengan
intereses calcula el interés y Tarifa generado y pistas pagos desde los prestatario. A nocturno lote
proceso toma esos cifras y pasa ellos para los legado contabilidad sistema, indicando los específico
libro mayor se debe contabilizar cada monto. El diseño funciona, pero es incómodo de usar,
difícil de cambiar y no no comunicar bien.


Figura 11.1. El diagrama de clases inicial

los desarrollador decide para leer Capítulo 6 en Análisis patrones , "Inventario y Contabilidad."
Aquí es un resumen de los parte ella fundar más pertinente.

Modelos contables en patrones de análisis

Negocio aplicaciones de todos ordena pista cuentas, cual sostener cosas de valor,
típicamente dinero. En muchas aplicaciones, no es suficiente hacer un seguimiento de la
cantidad en una cuenta. Es esencial para cuenta por y control cada cambiar para que
Monto. Que es los motivación Para el más básico de los contabilidad modelos


Figura 11.2. Un modelo contable básico.

Valor lata ser agregado por insertando un entrada _ Valor lata ser remoto por
insertando a Entrada negativa . Entradas están Nunca remoto, entonces los entero
historia es retenido. los equilibrio es El combinado efecto de todos entradas _ Esta
equilibrio pudo ser calculado en demanda o en caché, una implementación decisión que
es encapsulado por los Cuenta interfaz.

A básico principio de contabilidad es conservación _ Dinero no aparecer fuera de en
ningún lugar, ni tampoco eso desaparecer sin a rastro. Eso es solamente movido desde
una Cuenta para otro.


Figura 11.3. Un modelo de transacción


Este es el concepto bien establecido de la contabilidad por partida doble : cada crédito
tiene un débito correspondiente. Por supuesto, como otros principios de conservación, se
aplica solo a un sistema cerrado, una que incluye todos fuentes y sumideros Muchos
sencillo aplicaciones hacer no exigir este rigor.

En su libro, Cazador de aves incluye más elaborar formularios de estas modelos y
discusión considerable de los compensaciones

Esta leyendo da los desarrollador ( Desarrollador 1 ) varios nuevo ideas Ella espectáculos los
capítulo para un colega ( Desarrollador 2 ) quién posee estado trabajando en algunos de los
interesar cálculo lógica con ella y quien escribió el programa nocturno por lotes. Juntos,
esbozan un cambio en su modelo, incorporando algunos de los modelo elementos ellos han leer
sobre.


Figura 11.4. La propuesta del nuevo modelo

Luego recurren a su experto de dominio ( Experto ) para una discusión de sus nuevas ideas
de modelo.

Desarrollador 1: Con esta nuevo modelo, nosotros hacer un Entrada dentro los Interesar
Cuenta por los Interés obtenido, bastante que sólo ajustando los importe adeudado de interés.
Luego, otro Entrada por los el pago lo equilibra fuera.

Experto: Entonces ahora casarse ser poder para ver a historia de todos los interesar
acumulaciones como bien como los ¿historial de pagos? Eso es algo hemos estado falto.

Desarrollador 2: No estoy seguro de que hayamos usado " Transacción " del todo bien. La
definición habla de moverse dinero desde una Cuenta para otro, no dos entradas que equilibrio
cada otro en los misma cuenta .

Desarrollador 1: Eso es a bien punto. I era además preocupado que los libro parece para
hacer bastante a punto sobre los transacción siendo creado todos en una vez. los interesar
pagos lata ser varios días tarde.

Experto: Esos pagos no son necesariamente atrasados. Hay mucha flexibilidad a la hora de
pagar.

Desarrollador 1: Entonces esta mayo ser a ciego callejón. I era pensando nosotros puede que
tener identificado algunos conceptos implícitos. Hacer que la Calculadora de intereses cree
objetos de entrada parece comunicar mejor. Y Transacción pareció para pulcramente
Corbata juntos los calculado interesar con los pago.

Experto: Por qué hacer nosotros necesitar para Corbata juntos los devengo para los ¿pago?
Ellos están separar publicaciones en los contabilidad sistema. los equilibrio en los Cuenta es los
principal cosa. A lo largo de con los entradas individuales , nosotros De Verdad tener qué
nosotros necesitar.

Desarrollador 2: ¿Quiere decir que no realiza un seguimiento de si han realizado el pago de
intereses?

Experto: Bien, de curso nosotros hacer. Pero eso no es como sencillo como esta devengo/pago
único esquema tuyo.

Desarrollador 2: De hecho, podría simplificar muchas cosas dejar de preocuparse por esa
conexión.

Desarrollador 1: Bien, ¿qué tal esto? [ Toma una copia del diagrama de clase anterior y
comienza a dibujar modificaciones ] Por los manera, usted usado los palabra
acumulaciones a pocos veces. Pudo usted aclarar qué ¿significa?

Experto: Claro. Una acumulación es solo cuando contabiliza un gasto o ingreso en el
momento en que se incurre, Nunca mente Cuándo dinero Realmente cambios las manos.
Entonces, nosotros acumularse interesar cada día, Pero en los final de los mes (por ejemplo)
nosotros recibir a pago en contra eso.

Desarrollador 1: Sí, realmente necesitábamos una palabra como esa. Bien, ¿cómo se ve
esto?

Figura 11.5. Diagrama de clase original, devengos separados del pago

Desarrollador 1: Ahora nosotros lata obtener deshacerse de todos los complicaciones que
fueron en los calculadora desde pagos relacionados, y hemos introducido los término
acumulaciones , cual revela los intención mejor.

Experto: Entonces fueron no yendo para tener los Cuenta ¿objeto? I era mirando hacia
adelante para siendo poder para ver todo juntos allí, con los acumulaciones y los pagos y a
equilibrio.

Desarrollador 1: ¡¿En realidad?! Bien en que caso, quizás esta haría trabajo. [ tomas otro
diagrama y bocetos ]


Figura 11.6. El diagrama basado en cuenta, sin Transacción

Experto: ¡Eso se ve bastante bien!

Desarrollador 2: El script por lotes será fácil de cambiar para usar estos nuevos objetos.

Desarrollador 1: Eso voluntad llevar a pocos días para obtener los nuevo Interesar
Calculadora trabajando. Ahí son bastante a pocos pruebas para cambiar. Pero los prueba
voluntad leer más claro después.

los dos desarrolladores fuimos apagado y empezado refactorización establecido en los nuevo
modelo. Como ellos tiene sus manos en los código, apretando arriba los diseño, ellos tenido
perspectivas que refinado los modelo.

Las entradas se subclasificaron en Pago y Devengo porque una inspección más detallada
reveló responsabilidades en los solicitud por estas, y porque ellos fueron ambas cosas importante
conceptos de dominio En los otro mano, allí era no conceptual o conductual distinción Entre
Asientos basados en si fueron el resultado de honorarios o intereses. Simplemente aparecían
en la Cuenta correspondiente .

Sin embargo, desafortunadamente, los desarrolladores descubrieron que tenían que renunciar
a esta última abstracción para el

implementación. Datos era almacenado en relacional mesas, y los proyecto estándar era para
hacer esas tablas interpretables sin ejecutar el programa. Esto significaba mantener las
entradas de tasas y las entradas de intereses en separar mesas. los solamente manera por
desarrolladores para hacer esta, utilizando sus especial marco de mapeo objeto-relacional, era
hacer subclases concretas ( pagos de tarifas, pagos de intereses , etc.). Con una
infraestructura diferente, podrían haber evitado esta torpe expansión.

I lanzar esta giro dentro esta en gran parte ficticio historia para representar los frotar de
realidad que nosotros encuentro con todos los hora. Nosotros tener para hacer calculado
compromisos y luego moverse en sin dejar eso tirarnos apagado nuestro IMPULSADO POR MODELO
DISEÑO .


Figura 11.7. El diagrama de clases después de la
implementación.

los nuevo diseño era mucho más fácil para analizar y prueba porque los más complejo
funcionalidad es en FUNC IONES SIN EFEC TOS SEC UNDARIOS . El comando restante tiene un código
simple (porque llama a varias FUNC IONES ) y es caracterizado por ASERC IONES .

A veces hay partes de nuestros programas que ni siquiera sospechamos que tienen el
potencial de beneficiar desde a dominio modelo. Ellos mayo tener empezado muy simplemente
y evolucionado mecánicamente. Ellos parecer me gusta Complicado solicitud código, bastante
que dominio lógica. Análisis patrones lata ser particularmente servicial en demostración
nosotros estas ciego lugares.

En los siguiente ejemplo, a desarrollador posee a nuevo visión dentro los negro caja de los
nocturno lote, que tenido no estado considerado dominio orientado

[ Equipo LiB ]

[ Equipo LiB ]


Ejemplo
Información sobre el lote nocturno
Después a pocos semanas, los mejorado basado en cuenta modelo tenido empezado para
resolver en. Como con frecuencia sucede, la claridad del nuevo diseño hizo más visibles otros
problemas. El desarrollador ( Desarrollador 2 ) que estaba adaptando el lote nocturno para
interactuar con el nuevo diseño comenzó a ver conexiones entre el comportamiento del lote y
algunos de los conceptos en Patrones de análisis . Aquí hay un resumen de algunos de los
conceptos él fundar más pertinente.

Reglas de publicación

Contabilidad sistemas con frecuencia proveer múltiple puntos de vista de los mismo básico
financiero información. Una cuenta puede rastrear los ingresos mientras que otra puede
rastrear un impuesto estimado sobre esos ingresos. Si se espera que el sistema actualice
automáticamente la cuenta de impuestos estimados, la implementación de esos dos
cuentas se convierte muy entrelazados. Ahí están sistemas en que la mayoría de los
asientos en cuenta resulten de tales reglas; en tal sistema, la lógica de dependencia
obtiene para ser a lío. Incluso en más modesto sistemas, tal publicación cruzada lata ser
difícil. El primer paso para dominar la maraña de dependencias es hacer explícitas estas
reglas introduciendo a nuevo objeto.


Figura 11.8. El diagrama de clases de la regla básica de
contabilización


A destino regla es motivado por a nuevo Entrada en su "aporte" cuenta. Eso luego deriva a
nuevo Entrada (basada en su propio cálculo método ) y inserciones los nuevo Entrada
dentro su "producción" Cuenta . En a nómina de sueldos sistema, un Entrada en a salario
Cuenta puede que desencadenar a Destino Regla que calcularía a 30 por ciento estimado
ingreso impuesto y insertar eso como un Entrada en los impuesto Cuenta de retenciones .

Ejecución de reglas de contabilización

los Destino Regla posee establecido los conceptual dependencia Entre cuentas , pero si el
patrón detenido allí, eso pudo ser difícil para seguir. Una de los más complicado partes de
diseños de dependencia es los sincronización y control de actualizaciones Cazador de aves
discute Tres opciones

1. "Entusiasta disparo" es los más obvio, pero típicamente los menos práctico. Cuando
sea un La entrada es insertado dentro un cuenta , eso inmediatamente disparadores
los Destino Normas y todos las actualizaciones son hecha inmediatamente.

2. " Basado en cuenta disparo" permite Procesando para ser diferido. En algunos
punto, a mensaje se ha enviado para un Cuenta y eso disparadores su Destino
Normas para proceso todos Entradas insertado desde su último disparo.

3.

2.


3. Finalmente, " Basada en reglas de contabilización disparo" es iniciado por un
externo agente, cual dice la publicación Regla para fuego. los Destino Regla es
responsable por mirando arriba todos Entradas hecho para su aporte cuentas ya
que los último hora eso despedido.

Aunque los modos de disparo pueden mezclarse en un sistema, cada conjunto
particular de reglas debe tener un punto de inicio claramente definido y
responsabilidad para identificar la cuenta de entrada. entradas _ los adición de los
Tres disparo modos para los LENGUAJE UBIC UO es como importante para los éxito de los
patrón como los modelo objeto definiciones ellos mismos. Elimina la ambigüedad y
guía la toma de decisiones directamente a un conjunto de opciones claramente
definido. Estas modos identificar un fácilmente pasado por alto desafío y proveer
vocabulario apoyar claro discusión.

El desarrollador 2 necesitaba una caja de resonancia para discutir sus nuevas ideas. Conoció a
su colega ( desarrollador 1 ), el desarrollador que había sido el principal responsable de
modelar las acumulaciones.

Desarrollador 2: En algunos punto, los nocturno lote empezado siendo a lugar donde nosotros
barrido cosas bajo la alfombra. Ahí es dominio lógica implícito en qué los texto lo hace, y es
estado consiguiendo más y más complicado. Para a largo hora He querido para hacer a basado en
modelos diseño por los lote, separar fuera una capa de dominio y haga que el script en sí mismo
sea una capa simple sobre el dominio. Pero nunca pude averiguar cómo sería ese modelo de
dominio. Parecía que tal vez eran solo algunos procedimientos. que no lo hizo De Verdad hacer
sentido como objetos. Como He estado leyendo los sección en Patrones de análisis en Destino
Reglas , He estado consiguiendo algunos ideas Aquí está qué I tenido en mente. [ Manos sobre
un bosquejo ]


Figura 11.9. Una oportunidad de usar reglas de publicación en el
lote

Desarrollador 1: ¿Qué es este " Servicio de publicación "?

Desarrollador 2: Que es a FAC HADA que expone los contabilidad aplicación API y presenta eso
como un SERVIC IO . De hecho, lo hice hace un tiempo para simplificar el código del lote, y
también me dio una INTENC IÓN-REVELAC IÓN INTERFAZ por destino para los legado sistema.

Desarrollador 1: Interesante. Entonces, cual disparo estilo hacer usted plan para utilizar por estas
Destino ¿ Reglas ? Desarrollador 2: I no había De Verdad conseguido que lejos.
Desarrollador 1: Entusiasta Disparo haría trabajo por acumulaciones , ya que los lote
Realmente dice los Activo para insertar ellos, pero eso no lo haría trabajo por pagos , cual
obtener ingresó durante los día.

Desarrollador 2: No creo que queramos acoplar el método de cálculo tan estrechamente al
lote de todos modos. Si nosotros siempre decidido para desencadenar interesar calculos en a
diferente hora, eso haría desordenar las cosas arriba. Y eso sólo no parecer Correcto,
conceptualmente.

Desarrollador 1: Eso sonidos me gusta Basada en reglas de contabilización disparo. los lote
dice cada Destino Regla ejecutar, y los regla va y mira por apropiado nuevo Entradas y luego
lo hace su cosa. Éso es bonito mucho los manera tienes dibujado eso.

Desarrollador 2: Entonces luego nosotros evitar creando a lote de dependencias en los lote
diseño, y los lote se mantiene control. Que sonidos Correcto.

Desarrollador 1: Todavía estoy un poco vago sobre la interacción de estos objetos con las
Cuentas y
entradas _

Desarrollador 2: Tú y yo ambos. Los ejemplos del libro crean un vínculo directo entre las
Cuentas y los Destino reglas _ Que es tipo de lógico, pero I no pensar eso voluntad trabajo muy
bien para nosotros. Tenemos que instanciar estos objetos a partir de datos cada vez, por lo que
tendríamos que averiguar qué regla se aplica en pedido para asociar eso. Mientras tanto, los
Activo objeto es los una que sabe el contenido de cada cuenta , y por lo tanto cual regla para
aplicar. De todos modos, qué sobre los descanso de ¿esta?

Desarrollador 1: Odio ser quisquilloso, pero no creo que estemos usando el " Método "
correctamente. creo que el concepto es que los Método calcula los Monto para ser publicado—
como, decir, a 20 por ciento impuesto reteniendo en ingreso. Pero en nuestro caso, eso es
sencillo: es siempre los completo Monto siendo al corriente. I pensar en el Destino Regla sí
mismo es supuesto para saber cual Cuenta para correo para, cual corresponde para nuestro
"libro mayor nombre."

Desarrollador 2: Oh. Entonces si los Destino Regla es responsable por conocimiento los
correcto libro mayor nombre, probablemente no necesitar Método en todos.

En realidad, todo este asunto de elegir el nombre correcto para el libro mayor se está
volviendo cada vez más complicado. Eso es ya a combinación de los escribe de ingreso (tarifa o
interesar) con los "clase de activos" (a categoría los negocio se aplica para cada activo ). Que
es una lugar Yo soy esperando esta nuevo modelo voluntad ayuda.

Desarrollador 1: OK, vamos enfocar allí. los Destino Regla es responsable por eligiendo
los Basado en libro mayor en atributos de los cuenta _ Para ahora, nosotros lata hacer eso a
simple manera para manejar activo clase y los distinción Entre interesar y Tarifa. En los
futuro, lo harás tener un MODELO DE OBJETO usted lata mejorar para encargarse de más
complejo casos.

Desarrollador 2: I necesitar para pensar sobre esta algunos más. Dejar me calentar con
especias eso sobre, y releer los patrones, y luego voy a llevar otro puñalada en eso. Pudo I hablar
con usted sobre esta otra vez mañana ¿tarde?

Sobre los próximo pocos días, los dos desarrolladores trabajó fuera a modelo y refactorizado los
código entonces que el lote simplemente iterado a través de los activos , enviando a pocos
Autoexplicativo mensajes para cada uno y luego cometiendo los base de datos actas. los
complejidad era desplazado dentro los dominio capa, donde un objeto modelo hecha eso ambas
cosas más explícito y más resumen.


Figura 11.10. El diagrama de clases con reglas de
publicación

Figura 11.11. Diagrama de secuencia que muestra la
activación de reglas

Los desarrolladores se apartaron considerablemente de los detalles de los modelos presentados
en Patrones de análisis, pero sintieron que habían preservado la esencia de los conceptos.
Estaban un poco incómodos acerca de involucrar al Activo en la selección de la Regla de
Publicación . Fueron así porque el Activo tenía conocimiento de la naturaleza de cada Cuenta
(comisión o interés) y estaba además los natural acceso punto por los texto. Para tener asociado
los regla objeto directamente con la Cuenta habría requerido una colaboración con el objeto
Activo en cada instanciación de los objetos (cada hora los lote era correr). En lugar de, ellos
dejar los Activo objeto Mira arriba los dos reglas relevantes a través de sus ÚNIC O acceso y pasar
ellos los apropiado cuenta _ Eso pareció para hacer el código mucho más directo y entonces ellos
hecha a pragmático decisión.

Ellos ambas cosas sintió que conceptualmente eso haría tener estado mejor para asociar Destino
Normas solamente con cuentas , tiempo acuerdo los Activo enfocado en su trabajo de
generando acumulaciones _ Ellos esperado que posterior refactorizaciones y Más adentro
visión haría traer ellos espalda para esta y show ellos a manera para hacer esta limpio división sin
perdiendo los evidencia de los código.


[ Equipo LiB ]

[ Equipo LiB ]


Los patrones de análisis son conocimiento para
aprovechar
Cuando tiene la suerte de tener un patrón de análisis, casi nunca es la respuesta a sus
necesidades particulares. Sin embargo, ofrece pistas valiosas en su investigación y
proporciona vocabulario. Eso deberían además dar usted Guia sobre implementación
Consecuencias esa voluntad salvar usted dolor abajo los camino.

Todos esta alimenta dentro los dinamo de conocimiento crujido y refactorización hacia Más
adentro visión y estimula desarrollo. los resultado con frecuencia se parece los formulario
documentado en los análisis patrón, pero adaptado para circunstancias. A veces los resultado no
incluso obviamente relacionar para los patrón de análisis sí mismo, aún era estimulado por los
perspectivas desde los patrón.

Ahí es una tipo de cambiar usted deberían evitar. Cuándo usted utilizar a término desde a bien
conocido patrón de análisis, llevar cuidado para mantenerse los básico concepto eso designa
intacto, sin embargo mucho los forma superficial puede que cambiar. Ahí están dos razones por
esta. Primero, los patrón mayo empotrar comprensión que le ayudará a evitar problemas. En
segundo lugar, y más importante, se mejora su LENGUAJE UBIC UO Cuándo eso incluye
condiciones que están ampliamente entendido o en menos bien explicado. Si tu modelo
definiciones cambiar a través de los natural evolución de los modelo, llevar los problema para
cambiar los nombres también.

Bastante a lote de objeto modelos tener estado escrito sobre, algunos especializado por una tipo
de aplicación en una industria y algunos bastante general. Más de ellos proveer los semilla de un
idea, pero solamente a pocos tienen capturado los razonamiento detrás los elecciones y los
Consecuencias que seguir, cual están las partes más útiles de un patrón de análisis. Más de
estos patrones de análisis refinados serían valiosos, para ayuda salvar nosotros desde
reinventando los rueda otra vez y otra vez. Identificación ser sorprendido siempre para ver un
catálogo completo, pero pueden surgir catálogos específicos de la industria. Y patrones para
algunos dominios que cruzar muchos aplicaciones pudo ser ampliamente compartido.

Esta tipo de reaplicación de organizado conocimiento es completamente diferente desde intentos
para código de reutilización a través de marcos o componentes, excepto que cualquiera pudo
proveer los semilla de un idea eso no es obvio Un modelo, incluso un marco generalizado, es un
todo funcional completo, mientras que un análisis es un conjunto de fragmentos de modelo.
Los patrones de análisis se centran en las decisiones más críticas y difíciles y iluminar
alternativas y opciones Ellos prever río abajo Consecuencias que son caro si usted tener para
descubrir ellos por tú mismo.


[ Equipo LiB ]

[ Equipo LiB ]


Capítulo Doce. Relación de patrones de
diseño con el modelo
los patrones explorado en esta libro entonces lejos están destinado a específicamente por
resolviendo problemas en a modelo de dominio en los contexto de a IMPULSADO POR MODELO
DISEÑO . Realmente, aunque, más de los patrones publicado hasta la fecha tienen un enfoque
más técnico. ¿Cuál es la diferencia entre un patrón de diseño y un patrón de dominio? Para
arrancadores, los autores de los seminal libro, Diseño patrones , tenido esta para decir:

Punto de vista afecta unos interpretación de qué es y no es a patrón. Una de la persona
patrón puede ser el bloque de construcción primitivo de otra persona. Para este libro nos
hemos concentrado en patrones en un cierto nivel de abstracción. Los patrones de diseño
no se tratan de diseños como listas vinculadas y tablas hash que se pueden cod ificar en
clases y reutilizar tal cual. Tampoco son complejos, específico del dominio diseños por un
completo solicitud o subsistema. los diseño Los patrones en este libro son descripciones de
objetos comunicantes y clases que se personalizan para resolver a general diseño
problema en a especial contexto. [ Gama et Alabama. 1995 , pags. 3]

Algunos, no todos, los patrones de Patrones de diseño se pueden utilizar como patrones de
dominio. Hacerlo requiere un cambio de énfasis. Design Patterns presenta un catálogo de
elementos de diseño que han resuelto problemas comúnmente encontrado en a variedad de
contextos. los motivaciones de estas los patrones y los patrones mismos se presentan en
términos puramente técnicos. Pero un subconjunto de estos elementos se pu ede aplicar en el
contexto más amplio del modelado y diseño de dominios, porque corresponden para general
conceptos que surgir en muchos dominios

Además de los patrones de diseño, se han presentado muchos otros patrones de diseño
técnico. sobre los años. Algunos de ellos corresponder para profundo conceptos que surgir en
dominios Sería ser agradable para dibujar en esta trabajo. Para hacer utilizar de tal patrones en
impulsado por el dominio diseño, tenemos para Mira en los patrones en dos niveles
simultaneamente. En una nivel, ellos están técnico patrones de diseño en los código. En los otro
nivel, ellos están conceptual patrones en los modelo.

A muestra de específico patrones desde Diseño Patrones voluntad show cómo a patrón
concebido como a patrón de diseño lata ser aplicado en los dominio modelo, y eso voluntad
aclarar los distinción Entre a patrón de diseño técnico y un patrón de dominio. C OMPOSITE y
STRATEGY demuestran cómo algunos de los clásicos diseño patrones lata ser aplicado para
dominio problemas por pensando sobre ellos en a diferente modo. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Estrategia (AKAPolítica)

Defina una familia de algoritmos, encapsule cada uno y hágalos intercambiables. E
STRATEGIA vamos los algoritmo variar independientemente desde clientela que utilizar eso. [
Gama et Alabama. 1995 ]

Los modelos de dominio contienen procesos que no están técnicamente motivados
pero que en realidad son significativos. en los problema dominio. Cuándo alternativa
procesos deber ser proporcionó, la complejidad de eligiendo los apropiado proceso
combina con los complejidad de el multiple procesos ellos mismos, y cosas obtener
fuera de mano.

Cuándo nosotros modelo procesos, nosotros con frecuencia darse cuenta de que allí es más que
una legítimo manera de haciéndolos. A medida que comenzamos a describir estas opciones,
nuestra definición del proceso se vuelve torpe y complicada. los real conductual alternativas
nosotros están eligiendo Entre están oscurecido como ellos están mezclados en con los descanso
de los conducta.

Nosotros haría me gusta para separar esta variación desde los principal concepto de los proceso.
Luego nosotros haría ser capaz de ver tanto el proceso principal como las opciones con mayor
claridad. El patrón ESTRATEGIA , ya bien establecido en los software diseño comunidad, direcciones
esta muy asunto, aunque los enfocar es técnico. Aquí eso es siendo aplicado como a concepto en a
modelo y reflejado en los código implementación de que modelo. Ahí es los mismo necesitar para
desacoplar los muy variable parte de los proceso desde el más estable parte.

Por lo tanto:

Factorice la parte variable de un proceso en un objeto de "estrategia" separado en
el modelo. Separa una regla y el comportamiento que rige. Implementar la regla o
proceso sustituible siguiente los ESTRATEGIA diseño patrón. Múltiple versiones de los
estrategia objeto representar diferente formas los proceso lata ser hecho.

Mientras que los convencional vista de ESTRATEGIA como a diseño patrón se enfoca en los
capacidad para sustituir diferente algoritmos, su utilizar como a dominio patrón se enfoca en su
capacidad para Rápido a concepto, generalmente un proceso o a política regla.

Ejemplo
Búsqueda de ruta Políticas

Una especificación de ruta se pasa a un servicio de enrutamiento , cuyo trabajo es
construir una ruta detallada. Itinerario que satisface los ESPEC IFIC ACION . Esta SERVIC IO es un
mejoramiento motor que puede ser afinado para encontrar cualquiera los lo más rápido ruta o
los lo mas barato una.


Figura 12.1. Una interfaz de SERVICIO con opciones necesitará lógica
condicional.

Esta configuración mira OK, pero a detallado Mira en los enrutamiento código haría revelar
condicionales en cada cálculo, haciendo los decisión Entre lo más rápido o lo mas barato
aparecer todos sobre los lugar. Mas problemas voluntad venir Cuándo nuevo criterio están
agregado para hacer más sutil elecciones Entre rutas

Una Acercarse es para separar esos Afinación parámetros dentro ESTRATEGIAS . Luego
ellos lata estar representado explícitamente, aprobado dentro los Enrutamiento
Servicio como a parámetro.

los Enrutamiento Servicio ahora manejas todos peticiones en los mismo, incondicional
manera, mirando por una secuencia de Piernas con a bajo magnitud, como calculado por
los Pierna Magnitud política _

Este diseño tiene las ventajas que motivan el patrón STRATEGY en Design Patterns . En el nivel
de versatilidad y flexibilidad de la aplicación, el comportamiento del servicio de
enrutamiento ahora se puede controlar y ampliar mediante la instalación de una política de
magnitud de tramo adecuada . Las ESTRATEGIAS ilustradas en Figura 12.2 (lo más rápido o lo
mas barato) están solamente los más obvio unos. combinaciones ese equilibrio velocidad y costo
están probable. Ahí mayo ser otro factores en total, tal como a parcialidad hacia la reserva carga
en los de la empresa propio transportes bastante que subcontratación para llevar ellos en los
transportes de otras compañías navieras. Estas modificaciones se podrían haber realizado sin
recurrir a ESTRATEGIAS , pero la lógica habría atravesado las partes internas del Servicio de
enrutamiento. y hinchado su interfaz. los desacoplamiento lo hace hacer eso claro y fácilmente
comprobable


Figura 12.2. Opciones determinadas por la elección de la ESTRATEGIA
(POLÍTICA) pasada como argumento

A fundamentalmente importante regla en los dominio, los base de eligiendo una Pierna sobre
otro al construir un Itinerario , ahora es explícito y distinto. Transmite el conocimiento de
que un atributo específico (potencialmente derivado) de un individual pierna, hervido abajo para
a único número, es los base para el enrutamiento. Esta hace posible a sencillo declaración en los
idioma de los dominio que define el enrutamiento Servicios conducta: los Enrutamiento
Servicio elige un Itinerario con a mínimo magnitud total de los Piernas establecido en los
elegido ESTRATEGIA .

Nota: Esta discusión implica que los Enrutamiento Servicio es Realmente evaluando Piernas
como eso busca un Itinerario . Este enfoque es conceptualmente sencillo y podría hacer un
prototipo razonable implementación, pero eso es probablemente inaceptablemente ineficiente.
Esta solicitud voluntad ser tomado otra vez en Capítulo 14 , "Manteniendo Modelo Integridad,"
donde los mismo interfaz voluntad ser usado con completamente diferente implementación de los
Enrutamiento servicio _


Cuando usamos el patrón de diseño técnico en la capa de dominio, tenemos que agregar una
motivación adicional, otra capa de significado. Cuando la ESTRATEGIA corresponde a una
estrategia empresarial real o política, los patrón se convierte más que sólo a útil implementación
técnica (aunque eso también es valioso como lejos como eso va).

los Consecuencias de los diseño patrón completamente aplicar. Para ejemplo, en Diseño patrones
, Gama et Alabama. punto fuera que clientela deber ser consciente de diferente ESTRATEGIAS , cual
es además a modelado preocupación. Una preocupación puramente de implementación es que
las ESTRATEGIAS pueden aumentar el número de objetos en la aplicación. Si eso es un problema,
la sobrecarga se puede reducir implementando ESTRATEGIAS como sin estado objetos que
contextos lata Cuota. los extenso discusión de implementación enfoques en Diseño Patrones todos
se aplica aquí. Esta es porque nosotros están todavía utilizando a ESTRATEGIA . Nuestro las
motivaciones son parcialmente diferente, cual voluntad afectar algunos elecciones, pero los
experiencia incorporado en los patrón de diseño es en nuestro disposición.


[ Equipo LiB ]

[ Equipo LiB ]


Compuesto

Componer objetos dentro árbol estructuras para representar parte-todo jerarquías.
C OMPUESTO _ permite a los clientes tratar individual objetos y composiciones de objetos
uniformemente [ Gama et Alabama. 1995 ]

Nosotros con frecuencia encuentro, tiempo modelado complejo dominios, un importante objeto
que es compuesto de partes, cual están ellos mismos hecha arriba de partes, cual están hecha
arriba de partes—ocasionalmente incluso anidando para arbitrario profundidad. En algunos
dominios, cada de estas niveles es conceptualmente distinto, pero en otra casos, allí es a
sentido en cual los partes están los mismo tipo de cosa como los entero, solo que más pequeño.

Cuando la relación de los contenedores anidados no se refleja en el modelo, el
comportamiento común debe duplicarse en cada nivel de la jerarquía y el
anidamiento es rígido (por ejemplo, contenedores hipocresía generalmente Contiene
otro contenedores en sus propio nivel, y el número de niveles es fijo). Los clientes
deben tratar con diferentes niveles de la jerarquía a través de diferente interfaces,
incluso aunque allí mayo ser no conceptual diferencia a ellos les importa sobre.
recursividad a través de los jerarquía para Produce agregado información es muy
complicado.

Cuándo aplicar ninguna diseño patrón en los dominio, los primero preocupación deberían ser ya
sea los la idea de patrón realmente encaja bien con el concepto de dominio. Puede ser
conveniente moverse de forma recursiva a través de algunos objetos asociados, pero ¿existe
una verdadera jerarquía de partes completas? ¿Has encontrado una abstracción? bajo cual
todos los partes verdaderamente están los mismo conceptual ¿escribe? Si usted tener,
C OMPUESTO _ hacer esos aspectos de los modelo más claro, tiempo permitiendo usted para grifo
dentro los con cuidado pensado diseño y implementación consideraciones de los diseño patrón.

Por lo tanto:

Definir un resumen escribe que engloba todos miembros de los COMPUESTO . Métodos
que devuelven información se implementan en contenedores para devolver
información agregada sobre su contenido. Los nodos "hoja" implementan es os
métodos en función de sus propios valores. Clientela trato con los resumen escribe y
tener no necesitar para distinguir sale de de contenedores.

Este es un patrón relativamente obvio en el nivel estructural, pero los diseñadores a menudo
no presionan

ellos mismos para desarrollar el nivel operativo del patrón. El C OMPOSITE ofrece el mismo
comportamiento en cada estructural nivel, y significativo preguntas lata ser pedido de pequeña
o grande partes que transparentemente reflejar sus maquillaje. Que riguroso simetría es los
llave para los energía de el patrón.


Ejemplo
Envío Rutas Hecho de Rutas

A completo carga envío ruta es Complicado. Primero los envase deber ser camionero para a vía
férrea, luego llevado a un puerto, luego transportado en un barco a otro puerto, posiblemente
transferido a otros barcos, y finalmente transportado por terrestre en los otro final.


Figura 12.3. Esquema de una "ruta" formada por "tramos"

Un solicitud desarrollo equipo posee creado un objeto modelo para Rápido estas
arbitrariamente cuerdas largas de piernas que armar dentro a ruta.


Figura 12.4. Un diagrama de clases de una ruta compuesta por
tramos

Utilizando esta modelo, los desarrolladores están poder para crear Ruta objetos establecido en
reserva peticiones. Ellos están poder para proceso los Piernas dentro los Operacional plan por
los paso a paso manejo de la carga. Luego ellos descubrir algo.

Los desarrolladores siempre habían pensado en una ruta como una serie de tramos
arbitrarios e indiferenciados.


Figura 12.5. La concepción de los desarrolladores de una
ruta.

Resulta que los expertos en dominios ven la ruta como una secuencia de cinco s egmentos
lógicos.


Figura 12.6. La concepción de los expertos en negocios de
una ruta

Entre otro cosas, estas subrutas mayo ser planificado en diferente veces por diferente gente,
entonces ellos tener para ser visto como distinto. Y en más cerca inspección, los "puerta

piernas" están bastante diferente

desde los otro piernas, implicando en la zona contratado camiones o incluso cliente acarreo,
en contraste para el elaboradamente programado carril y Embarcacion transportes

Un modelo de objetos que refleje todas estas distinciones comienza a complicarse.


Figura 12.7. El elaborado diagrama de clases de Route

estructuralmente los modelo no es entonces malo, pero los uniformidad de Procesando los
Operacional plan es perdió, entonces el código, o incluso a descripción de conducta, se convierte
mucho más Complicado. Otro las complicaciones también comienzan a surgir. Cualquier
recorrido de una ruta involucra múltiples colecciones de diferentes tipos de objetos.

Ingresar C OMPUESTO . Eso haría ser agradable, por cierto clientela, para tratar los diferente
niveles en esta construir uniformemente, como rutas hecha arriba de rutas conceptualmente
esta vista es sonar. Cada nivel de Ruta es Un movimiento de a envase desde una punto para
otro, todos los manera abajo para un individual pierna. (Ver Figura 12.8 .)


Figura 12.8. Un diagrama de clases usando COMPOSITE

Ahora, los estático clase diagrama lo hace no decir nosotros como mucho sobre cómo puerta
piernas y otro segmentos conjugarse como los anterior una hizo. Pero los modelo es más que a
estático clase diagrama. Bien transmitir información de ensamblaje a través de otros diagramas
(consulte la Figura 12.9 ) y a través del (ahora mucho más simple) código. Esta modelo
capturas los profundo relación de todos estas diferente tipos de " Ruta ." Generando los
Operacional plan es sencillo otra vez, como están otro recorrido de ruta operaciones.


Figura 12.9. Instancias que representan una Ruta completa

Con a ruta hecha de otro rutas, reconstruido juntos final para final para obtener desde una
lugar para otro tu lata tener ruta implementaciones de variar detalle. Tú lata picar apagado los
final de a ruta y empalme en a nuevo finalizando, usted lata tener arbitrario anidando de
detalle, y usted lata explotar todos ordena de posiblemente útil opciones

Por supuesto, todavía no necesitamos tales opciones. Y antes de que necesitáramos esos
segmentos de ruta y distintos puerta piernas, nosotros fueron haciendo sólo multa sin
C OMPUESTO . A diseño patrón deberían ser solo aplicado Cuándo eso es necesario.


[ Equipo LiB ]

[ Equipo LiB ]


¿Por qué no F LYWEIGHT?
Porque I referido para los PESO MOSC A patrón más temprano (en Capítulo 5 ), usted puede que
tener ficticio que está un ejemplo de a patrón para ser aplicado para dominio modelos En hecho,
PESO MOSC A es a bien ejemplo de un diseño patrón que posee no correspondencia para los dominio
modelo.

Cuándo a limitado colocar de VALOR OBJETOS es usado muchos veces (como en los ejemplo de
eléctrico puntos de venta en un plan de casa), puede tener sentido implementarlos como
FLYWEIGHTS . Esta es una opción de implementación disponible para OBJETOS DE VALOR y no para
ENTIDADES . Contraste esto con C OMPOSITE , en el que conceptual objetos están compuesto de
otro conceptual objetos. En que caso, los patrón se aplica a ambos modelo y implementación, cual
es un esencial rasgo de a dominio patrón.

Yo soy no yendo para tratar para compilar a lista de los diseño patrones que lata ser usado como
dominio patrones. Aunque I hipocresía pensar de un ejemplo de utilizando un Interprete como a
dominio patrón, Yo soy no Preparado para decir que allí es no concepción de ninguna dominio que
haría encajar. los solamente requisito es que el patrón deberían decir algo sobre los conceptual
dominio, no sólo ser a técnico solución para un técnico problema.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo Trece. Refactorización hacia
una visión más profunda
refactorización hacia Más adentro visión es a multifacético proceso. Eso voluntad ser servicial
para detener por a momento a jalar juntos los importante puntos. Ahí están Tres cosas usted
tener para enfocar en.

1. Vivir en los dominio.

2. Mantenerse mirando en cosas a diferente manera.

3. Mantener un intacto diálogo con dominio expertos

Buscar información sobre el dominio crea un contexto más amplio para el proceso de
refactorización.

los clásico refactorización guión implica a desarrollador o dos sesión en los teclado,
reconociendo que algunos código lata ser mejorado, y luego cambiando eso en los mosca (con
unidad pruebas para verificar sus resultados, de curso). Esta práctica deberían suceder todos
los hora, pero eso no es los entero historia.

los anterior cinco capítulos regalo un expandido vista de refactorización, superpuesto en
la micro-refactorización convencional Acercarse.


[ Equipo LiB ]

[ Equipo LiB ]


Iniciación
refactorización hacia Más adentro visión lata empezar en muchos formas. Eso mayo ser a
respuesta para a problema en el código—algunos complejidad o torpeza. Bastante que aplicar a
estándar transformación de el código, los desarrolladores sentido que los raíz de los problema es
en los dominio modelo. Quizás a el concepto es desaparecido. Quizás algunos relación es
incorrecto.

En a salida desde los convencional vista de refactorización, esta mismo realización pudo venir
cuando el código mira ordenado, si los idioma de los modelo parece desconectado desde los
dominio expertos, o si los nuevos requisitos no se adaptan naturalmente. La refactorización
puede resultar del aprendizaje, como desarrollador quién posee ganado Más adentro
comprensión ve un oportunidad por a más lúcido o modelo útil .

Vidente los problema lugar es con frecuencia los más difícil y más incierto parte. Después que,
desarrolladores puede sistemáticamente buscar fuera los elementos de a nuevo modelo. Ellos
lata idea genial con colegas y dominio expertos Ellos lata dibujar en sistematizado conocimiento
escrito como análisis patrones o patrones de diseño.

[ Equipo LiB ]

[ Equipo LiB ]


Equipos de exploración
Lo que los fuente de insatisfacción, los próximo paso es para buscar a refinamiento que voluntad
hacer el modelo comunicar claramente y naturalmente. Esta puede que exigir solamente algunos
modesto cambiar que es inmediatamente evidente y lata ser logrado en a pocos horas. En que
caso, los cambiar se parece a la refactorización tradicional. Pero la búsqueda de un nuevo
modelo bien puede requerir más tiempo y la participación de más gente.

Los iniciadores del cambio eligen a un par de otros desarrolladores que son buenos para pensar
en ese tipo de problema, que conocen esa área del dominio o que tienen fuertes habilidades de
modelado. Sí hay están sutilezas, ellos hacer Por supuesto a dominio experto es involucrado. Esta
grupo de cuatro o cinco la gente va para a conferencia habitación o a café tienda y tormentas de
ideas por medio un hora para un hora y a medio. Ellos bosquejo UML diagramas; ellos tratar
caminando a través de escenarios utilizando los objetos. Ellos hacer Asegúrese de que el experto
en la materia comprenda el modelo y lo encuentre útil. Cuando encuentran algo que están
contento con, ellos ir espalda y código eso. O ellos decidir para calentar con especias eso sobre
por a pocos días, y ellos ir espalda y trabajo en algo demás. A Pareja de días luego, los grupo
vuelve a convocar y vuelve a hacer el ejercicio. Esta vez tienen más confianza, se han dormido
sobre sus pensamientos anteriores y llegan a algunas conclusiones. Regresan a sus
computadoras y codifican el nuevo diseño.

Hay algunas claves para mantener este proceso productivo .


Autodeterminación . A pequeña equipo lata ser ensamblado en los mosca para explorar a
diseño problema. El equipo puede operar durante unos días y luego disolverse. No hay
necesidad de procesos organizacionales elaborados a largo plazo. estructuras

Alcance y dormir _ Dos o Tres pequeño reuniones espaciado fuera sobre a pocos días
deberían Produce un diseño valor difícil. Arrastrando eso fuera no ayuda. Si usted obtener
pegado, usted mayo ser tomando en demasiado en una vez. Elegir a menor aspecto de los
diseño y enfocar en que.

Ejercicio del LENGUAJE UBICUO . Involucrar a los otros miembros del equipo,
particularmente al tema importar experto en los lluvia de ideas sesión crea un oportunidad
para ejercicio y refinar los UBIC UO IDIOMA . los final resultado de los esfuerzo es a
refinamiento de que IDIOMA que los original desarrollador(es) voluntad llevar espalda y
formalizar en código.

Los capítulos anteriores de este libro han presentado varios diálogos en los que los
desarrolladores y expertos en el dominio Investigacion por mejor modelos A en toda regla lluvia
de ideas sesión es dinámica, no estructurado, e increiblemente productivo.


[ Equipo LiB ]

[ Equipo LiB ]


Estado de la técnica
Eso no es siempre necesario para reinventar los rueda. los proceso de lluvia de ideas por
desaparecido conceptos y mejor modelos posee a estupendo capacidad para absorber ideas
desde ninguna fuente, combinar ellos con conocimiento local, y Seguir crujido para encontrar
respuestas para los Actual situación.

Tú lata obtener ideas desde libros y otro fuentes de conocimiento sobre los dominio sí mismo.
Aunque el gente en los campo mayo no tener creado a modelo apropiado por corriendo software,
ellos mayo Hemos organizado los conceptos y encontrado algunas abstracciones útiles.
Alimentar el proceso de procesamiento de conocimientos de esta manera conduce a
resultados más ricos y rápidos que probablemente también parezcan más familiares. para
dominio expertos

A veces usted lata dibujar en los experiencia de otros en los formulario de análisis patrones. Esta
tipo de entrada posee algunos de los efecto de leyendo sobre los dominio, pero en esta caso eso
es engranado específicamente hacia el desarrollo de software, y debe basarse directamente en
la experiencia de implementación de software en tu dominio. Análisis patrones lata dar usted
sutil modelo conceptos y ayuda usted evitar mucho de errores. Pero ellos no dar usted a libro de
cocina receta. Ellos alimento los proceso de procesamiento de conocimientos.

Como los piezas están encajar juntos, modelo preocupaciones y diseño preocupaciones deber
ser tratado con en paralela. Nuevamente, no siempre significa inventar todo desde cero. Los
patrones de diseño a menudo se pueden emplear en los dominio capa Cuándo ellos encajar
ambas cosas un implementación necesitar y los modelo concepto.

Asimismo, cuando un formalismo c omún, como la aritmética o la lógica de predicados, encaja
en alguna parte de un dominio, usted lata factor que parte fuera y adaptar los normas de los
formal sistema. Esta proporciona muy apretado y fácilmente entendido modelos

[ Equipo LiB ]

[ Equipo LiB ]


Un diseño para desarrolladores
Software no es sólo por usuarios Es además por desarrolladores Desarrolladores tener para
integrar código con otras partes de los sistema. En un iterativo proceso, desarrolladores cambiar
los código otra vez y otra vez.
La refactorización hacia una visión más profunda conduce y se beneficia de un diseño flexible.

Un diseño flexible comunica su intención. El diseño hace que sea fácil anticipar el efecto de
correr código—y por lo tanto eso fácil para prever los Consecuencias de cambiando eso. A flexible
el diseño ayuda límite mental sobrecarga, ante todo por reduciendo dependencias y lado efectos
Eso es establecido en una profunda modelo de los dominio que es de grano fino solamente donde
más crítico para los usuarios Esta hace para la flexibilidad donde cambiar es más común, y
sencillez en otra parte.

[ Equipo LiB ]

[ Equipo LiB ]


Sincronización
Si usted Espere Hasta que usted lata hacer a completo justificación por a cambiar, tienes
esperado también largo. Su proyecto ya está incurriendo en costos elevados y los cambios
pospuestos serán más difíciles de realizar porque los objetivo código voluntad tener estado más
elaborado y más incorporado en otro código.

Continuo refactorización posee venir para ser considerado a "mejor práctica," pero más proyecto
equipos todavía son demasiado cautelosos al respecto. Ven el riesgo de cambiar el código y el
costo del tiempo del desarrollador para hacer a cambiar; pero qué más difícil para ver es los
riesgo de acuerdo un incómodo diseño y los costo de trabajar alrededor de ese diseño. A los
desarrolladores que quieren refactorizar a menudo se les pide que justifiquen la decisión.
Aunque esta parece razonable, eso hace un ya difícil cosa imposiblemente difícil, y tiende para
aplastar refactorización (o conducir eso bajo tierra). Software desarrollo es no tal un proceso
predecible en el que los beneficios de un cambio o los costos de no hacer un cambio se pueden
calcular con precisión calculado.

refactorización hacia Más adentro visión necesidades para volverse parte de los en curso
exploración de los tema del dominio, la educación de los desarrolladores y el encuentro de las
mentes de los desarrolladores y dominio expertos Por lo tanto, refactorizar Cuándo

El diseño no expresa la comprensión actual del dominio por parte del equipo;

Importante conceptos están implícito en los diseño (y usted ver a manera para hacer ellos
explícito); o

Ves una oportunidad de hacer una parte importante del proveedor de diseño.

Esta agresivo actitud lo hace no justificar ninguna cambiar en ninguna hora. no refactorizar los día
antes de un lanzamiento no introducir "flexible diseños" que están sólo demostraciones de técnico
virtuosidad pero falla para Corte para los centro de los dominio. no introducir a "Más adentro
modelo" que usted no pude convencer un dominio experto para utilizar, no importar cómo
elegante eso parece. no ser absoluto sobre cosas, pero empujar más allá los comodidad zona en
los dirección de favoreciendo refactorización

[ Equipo LiB ]

[ Equipo LiB ]


Crisis como oportunidad
Para sobre a siglo después Charles Darwin introducido eso, los estándar modelo de evolución era
esa especie cambió gradualmente, algo continuamente, sobre hora. De repente, en los 1970,
esta modelo fue desplazado por los "puntuado equilibrio" modelo. En esta expandido vista de
evolución, largo los períodos de cambio gradual o estabilidad son interrumpidos por
explosiones relativamente cortas de cambios rápidos. Entonces las cosas se asientan en un
nuevo equilibrio. El desarrollo de software tiene una dirección intencional detrás eso que
evolución carece (aunque eso mayo no ser evidente en algunos proyectos), pero sin embargo
sigue esta tipo de ritmo.

Clásico descripciones de refactorización sonar muy firme. refactorización hacia Más adentro visión
normalmente no lo es. A período de firme refinamiento de a modelo lata de repente traer usted
para un visión que batidos sube todo. Estas avances no suceder cada día, aún a grande
proporción de los cambios que dirigir para a profundo modelo y flexible diseño surgir desde ellos.

Tal a situación con frecuencia lo hace no Mira me gusta un oportunidad; eso parece más me
gusta a crisis. de repente allí es algunos obvio insuficiencia en los modelo. Ahí es a boquiabierto
agujero en qué eso lata Rápido, o algunos crítico área donde eso es opaco. Quizás eso hace
declaraciones que están sólo incorrecto.

Esto significa que el equipo ha alcanzado un nuevo nivel de comprensión. Desde su ahora
elevado punto de vista, los viejo modelo mira pobre. Desde que punto de vista, ellos lata
concebir a lejos mejor una.

refactorización hacia Más adentro visión es a continuo proceso. Implícito conceptos están
Reconocido y hecho explícito. Partes de los diseño están hecha proveedor, quizás tomando en
a declarativo estilo.
Desarrollo de repente llega para los borde de a descubrimiento y se sumerge a través de
para a modelo profundo—y luego firme refinamiento empieza otra vez.

[ Equipo LiB ]

[ Equipo LiB ]


Parte IV: Diseño Estratégico
Como sistemas crecer también complejo para saber completamente en los nivel de
individual objetos, nosotros necesita tecnicas por manipulando y comprendiendo grande
modelos Esta parte de los libro presenta principios que permiten que el proceso de
modelado se amplíe a dominios muy complicados. La mayoría de tales decisiones deber
ser hecha en equipo nivel o incluso negociado Entre equipos Estas están Las decisiones
donde diseño y política con frecuencia intersecarse.

los meta de los más ambicioso empresa sistema es a estrechamente integrado sistema
abarcando la totalidad negocio. Aún los completo negocio modelo por casi ninguna tal
organización es también grande y complejo para administrar o incluso comprender como a
único unidad. los sistema deber ser roto en partes más pequeñas, tanto en concepto como
en implementación. El desafío es lograr esta modularidad. sin perdiendo los beneficios de
integración, permitiendo diferente partes de los sistema para interoperar para apoyar la
coordinación de varias operaciones comerciales. Un modelo de dominio monolítico que
abarque todo será difícil de manejar y estará cargado de duplicaciones y contradicciones
sutiles. A colocar de pequeña, distinto subsistemas pegado juntos con anuncio hoc interfaces
faltará los energía para resolver en toda la empresa problemas y permite consistencia
problemas para aumentar en cada punto de integración. Los escollos de ambos extremos
se pueden evitar con un enfoque sistemático y evolutivo. diseño estrategia.

Incluso a esta escala, el diseño dirigido por el dominio no produce modelos
desconectados de la implementación. Cada decisión deber tener a directo impacto en
sistema desarrollo, o demás es irrelevante Los principios de diseño estratégico deben guiar
las decisiones de diseño para reducir la interdependencia de las partes y mejorar la
claridad sin perder la interoperabilidad y la sinergia críticas. Deben enfocar el modelo
para capturar el núcleo conceptual del sistema, la "visión" de los sistema. Y ellos deber
hacer todos esta sin atascado los proyecto abajo. Para ayudar a lograr estas objetivos,
Parte IV explora Tres amplio temas: contexto, destilación, y Gran escala estructura.

Contexto, los menos obvio de los principios, es Realmente los más fundamental. A modelo
exitoso, grande o pequeña, posee para ser lógicamente consistente a lo largo de, sin
contradictorio o superpuestos definiciones Empresa sistemas a veces integrar
subsistemas con diversos orígenes o tener aplicaciones entonces distinto que muy poco
en los dominio es visto en los misma luz. Eso mayo ser pidiendo también mucho para
unificar los modelos implícito en estas dispar partes. Al definir explícitamente un
C ONTEXTO LÍMITE dentro del cual se aplica un modelo y luego, cuando sea necesario,
definiendo su relación con otro contextos, los modelador lata evitar bastardizando el
modelo.

La destilación reduce el desorden y enfoca la atención apropiadamente. A menudo, un
gran esfuerzo es gastado en periférico cuestiones en los dominio. los en general dominio
modelo necesidades para hacer prominente los más agregando valor y especial aspectos
de tu sistema y ser estructurado dar que parte como mucho energía como posible. Tiempo
algunos secundario componentes están críticas, deben ser puestas en su perspectiva
apropiada. Este enfoque no solo ayuda a dirigir los esfuerzos hacia vital partes de los
sistema, pero eso mantiene los visión de los sistema desde siendo perdió.
Estratégico destilación lata traer claridad para a grande modelo. Y con a más claro vista, los
diseño de la C ENTRO DOMINIO lata ser hecha más útil.

Gran escala estructura completa los imagen. En a muy complejo modelo, usted mayo no ver
el bosque por los árboles. Destilación ayuda, por enfoque los atención en los centro y
presentando el otro elementos en sus secundario roles, pero los relaciones lata todavía ser
también confuso sin un general tema, aplicar algunos en todo el sistema diseño elementos y
patrones. daré un visión de conjunto de a pocos enfoques para Gran escala estructura y

luego ir dentro profundidad en una

tal patrón, RESPONSABILIDAD C APAS , para explorar los trascendencia de utilizando tal a
estructura. los específico estructuras discutido están solamente ejemplos; ellos están no a
exhaustivo catalogar. Nuevo unos deberían ser inventado como necesario, o estas
deberían ser modificado, a través de a proceso de EVOLUC IONAR ORDEN . Algunos tal
estructura lata traer a uniformidad para los diseño que acelera el desarrollo y mejora
integración.

Estas Tres principios, útil por separado pero particularmente poderoso tomado juntos,
ayuda para producir bien diseños, incluso en a desmadejado sistema que no una
completamente entiende Gran escala estructura trae consistencia para dispar partes
para ayuda esos partes malla.
La estructura y la destilación hacen que las complejas relaciones entre las partes sean
comprensibles mientras acuerdo los grande imagen en vista. LÍMITE _ CONTEXTOS permitir
trabajo para Continuar en partes diferentes sin corrompiendo los modelo o sin querer
fragmentando eso. agregando estas conceptos a los del equipo UBIC UO IDIOMA ayuda
desarrolladores trabajo fuera sus propio soluciones


[ Equipo LiB ]

[ Equipo LiB ]


Capítulo catorce. Mantenimiento de
la integridad del modelo
I una vez trabajó en a proyecto donde varios equipos fueron trabajando en paralela en a
importante nuevo sistema. Una día, los equipo trabajando en los facturación al cliente módulo
era Listo para implementar un objeto al que llamaron Charge , cuando descubrieron que otro
equipo ya había construido uno. Diligentemente, se dispusieron a reutilizar el objeto existente.
Descubrieron que no tenía un "código de gastos", por lo que agregaron uno. Ya tenía el
atributo "cantidad publicada" que necesitaban. Habían planeado llamarlo "cantidad adeudada",
pero, ¿qué hay en un nombre? Lo cambiaron. Al agregar algunos métodos y asociaciones más,
obtuvieron algo que se parecía a lo que querían, sin perturbar lo que había allí. Tuvieron que
ignorar muchas asociaciones que no necesitaban, pero su aplicación módulo corrió.

A pocos días luego, misterioso problemas salió a la superficie en los pago de la factura solicitud
módulo por que el Cargo había sido escrito originalmente. Aparecieron Cargos Extraños que
nadie recordaba haber entrado y que no lo hizo hacer ninguna sentido. los programa comenzó
para choque Cuándo algunos funciones se utilizaron, en particular, el informe de impuestos
mes a la fecha. La investigación reveló que el bloqueo se produjo cuando se utilizó una
función que resumía el monto deducible de todos los pagos del mes en curso. Los registros
misteriosos no tenían valor en el campo "porcentaje deducible", aunque la validación de los
entrada de datos solicitud requerido eso y incluso poner en a por defecto valor.

los problema era que estas dos grupos tenido diferente modelos , pero ellos hizo no darse cuenta
de eso, y había no procesos en lugar para detectar eso. Cada hecha suposiciones sobre los
naturaleza de a cargar que fueron útiles en su contexto (facturar a los clientes versus pagar a
los proveedores). Cuando su código fue combinado sin resolviendo estas contradicciones, los
resultado era no fidedigno software.

Si solamente ellos tenido estado más consciente de esta realidad, ellos pudo tener
conscientemente decidido cómo para tratar con él. Eso podría haber significado trabajar juntos
para elaborar un modelo común y luego escribir un conjunto de pruebas automatizado para
evitar sorpresas futuras. O simplemente podría haber significado un acuerdo para desarrollar
separar modelos y mantenerse las manos apagado cada otros código. Cualquiera manera, eso
comienza con un explícito convenio en los límites dentro de cual cada modelo se aplica.

Qué hizo ellos hacer una vez ellos supo sobre los ¿problema? Ellos creado separar Cliente Carga
y Proveedor Cargar clases y definido cada según para los necesidades de los correspondiente
equipo. Una vez resuelto el problema inmediato, volvieron a hacer las cosas como antes. Oh
bien.

Aunque nosotros raramente pensar sobre eso explícitamente, los más fundamental requisito de a
modelo es que sea internamente consistente; que sus términos tengan siempre el mismo
significado, y que no contenga nada contradictorio normas. los interno consistencia de a modelo,
tal que cada término es inequívoco y no normas contradecir, es llamado unificación _ A modelo es
sin sentido a no ser que eso es lógicamente consistente. en un ideal mundo, nosotros haría tener
a único modelo abarcando los entero dominio de los empresa. Este modelo haría ser unificado, sin
ninguna contradictorio o superposición definiciones de condiciones. Cada declaración lógica sobre
los dominio haría ser consistente.

Pero el mundo del desarrollo de grandes sistemas no es el mundo ideal. Para mantener ese
nivel de unificación en un completo empresa sistema es más problema que eso es valor. Eso es
necesario para permitir múltiples modelos para desarrollar en diferente partes de los sistema,
pero nosotros necesitar para hacer Cuidado opciones sobre qué partes del sistema se permitirá
que diverjan y cuál es su relación entre sí voluntad ser. Nosotros necesitar formas de acuerdo
crucial partes de los modelo estrechamente unificado Ninguna de esta

sucede por sí mismo o a través de bien intenciones Eso sucede solamente a través de
consciente diseño decisiones e institución de procesos específicos. Unificación total del
modelo de dominio para un sistema grande voluntad no ser factible o económico.

A veces gente pelear esta hecho. Más gente ver los precio que múltiple modelos exacto por
limitando la integración y haciendo comunicación incómodo. En cima de que, teniendo más que
una modelo de alguna manera parece poco elegante. Esta resistencia para múltiple modelos a
veces Guías para muy intentos ambiciosos para unificar todos los software en a grande proyecto
bajo a único modelo. I saber He estado culpable de esta tipo de extralimitarse Pero considerar los
riesgos

1. También muchos legado reemplazos mayo ser intentó en una vez.

2. Grande proyectos mayo pantano abajo porque los coordinación gastos generales excede sus
habilidades.

3. Aplicaciones con especializado requisitos mayo tener para utilizar modelos que no
completamente satisfacer su necesidades, forzando ellos para poner conducta en otra
parte.

4. Por el contrario, intentando para satisfacer todo el mundo con a único modelo mayo dirigir
para complejo opciones que hacer los modelo difícil para utilizar.

Es más, es probable que las divergencias en los modelos provengan de la fragmentación
política y la gestión diferente prioridades como desde técnico preocupaciones. Y los aparición de
diferente modelos lata ser un resultado de equipo organización y desarrollo proceso. Entonces
incluso Cuándo no técnico factor previene completo integración, los proyecto mayo todavía rostro
múltiple modelos

Dado que no es factible mantener un modelo unificado para toda una empresa, no tenemos
que dejar Nosotros mismos en los misericordia de eventos. A través de a combinación de
proactivo decisiones sobre que debería ser unificado y pragmático reconocimiento de qué es no
unificado, nosotros lata crear a claro, foto compartida de los situación. Con que en mano,
nosotros lata colocar sobre haciendo Por supuesto que los partes nosotros querer para unificar
Quédate que manera, y los partes que están no unificado no porque Confusión o corrupción.

Nosotros necesitar a manera para marca los límites y relaciones Entre diferente modelos
Nosotros necesitar elegir nuestro estrategia conscientemente y luego seguir nuestro estrategia
consecuentemente.

Este capítulo presenta técnicas para reconocer, comunicar y elegir los límites de un modelo. y
su relaciones para otros. Eso todos empieza con cartografía los Actual terreno de los proyecto. UN
C ONTEXTO ALIMITADO define el rango de aplicabilidad de cada modelo, mientras que un MAPA DE
C ONTEXTO brinda una visión global de los contextos del proyecto y las relaciones entre ellos.
Esta reducción de la ambigüedad voluntad, en y de sí mismo, cambiar los manera cosas suceder
en los proyecto, pero eso no es necesariamente suficiente. Una vez que tengamos un C ONTEXTO
LIMITADO , un proceso de INTEGRAC IÓN C ONTINUA mantendrá el modelo unificado

Luego, a partir de desde esta estable situación, nosotros lata comienzo para emigrar hacia más
eficaz estrategias para C ONTEXTOS LÍMITES y relacionarlos, que van desde contextos
estrechamente relacionados con NÚC LEO C OMPARTIDO para flojamente acoplado modelos que ir
sus SEPARAR MANERAS .


Figura 14.1. Un mapa de navegación para patrones de
integridad del modelo.

[ Equipo LiB ]

[ Equipo LiB ]


Contexto acotado

Células lata existe porque sus membranas definir qué es en y fuera y determinar que
puede pasar.



Múltiple modelos coexistir en grande proyectos, y esta obras multa en muchos casos. Diferente
modelos Aplicar en diferente contextos. Para ejemplo, usted mayo tener para integrar tu nuevo
software con un sistema externo sobre cual tu equipo posee no control. A situación me gusta
esta es probablemente claro para todo el mundo como un distinto contexto donde los modelo
bajo desarrollo no aplicar, pero otro situaciones lata ser más vago y confuso. En la historia que
abrió este capítulo, dos equipos estaban trabajando en diferentes funcionalidades para el
mismo sistema nuevo. ¿Estaban trabajando en el mismo modelo? su intención era para Cuota
en menos parte de qué ellos hizo, pero allí era no demarcación para decir ellos que ellos hizo o
hizo no Cuota. Y ellos tenido no proceso en lugar para sostener a compartido modelo juntos o
rápidamente detectar divergencias Ellos dio cuenta ellos tenido divergió solamente después sus
del sistema comportamiento de repente se convirtió impredecible.

Incluso a único equipo lata final arriba con múltiple modelos Comunicación lata lapso, principal
para interpretaciones sutilmente contradictorias del modelo. El código antiguo a menudo
refleja una concepción anterior del modelo. que es sutilmente diferente desde los Actual
modelo.

Todos saben que el formato de datos de otro sistema es diferente y requiere una conversión
de datos, pero esta es solo la dimensión mecánica del problema. Más fundamental es la
diferencia en los modelos implícito en los dos sistemas Cuándo los discrepancia es no con un
sistema externo, pero dentro de los mismo código base, eso es incluso menos probable para ser
Reconocido. Aún esta sucede en todos grande equipo proyectos

Múltiples modelos están en juego en cualquier proyecto grande. Sin embargo,
cuando el código se basa en modelos distintos es conjunto, software se convierte
calesa, no fidedigno, y difícil para comprender. Comunicación entre equipo miembros
se convierte confundido. Eso es con frecuencia poco claro en que contexto a modelo
deberían no ser aplicado.

Falla para mantenerse cosas derecho es por último revelado Cuándo los corriendo código no
trabajo Correcto, pero el problema comienza en la forma en que se organizan los equipos y la
forma en que interactúan las personas. Por lo tanto, para aclarar el contexto de un modelo,
tenemos que mirar tanto el proyecto como sus productos finales (código, base de datos
esquemas, y entonces en).

Un modelo se aplica en un contexto. El contexto puede ser una determinada parte del código, o
el trabajo de un determinado equipo. Para a modelo inventado en a lluvia de ideas sesión, los
contexto pudo ser limitado a esa conversación en particular. El contexto de un modelo utilizado
en un ejemplo en este libro es esa sección de ejemplo en particular y cualquier discusión
posterior al respecto. El contexto del modelo es cualquier conjunto de condiciones deber aplicar
en pedido para ser poder para decir que los condiciones en a modelo tener a específico sentido.

Para comenzar a resolver los problemas de múltiples modelos, necesitamos definir
explícitamente el alcance de un modelo particular. modelo como a encerrado parte de a software
sistema dentro de cual a único modelo voluntad aplicar y la voluntad ser conservó como unificado
como posible. Esta definición posee para ser reconciliado con los equipo organización.

Por lo tanto:

Explícitamente definir los contexto dentro de cual a modelo se aplica. Explícitamente
colocar límites En términos de equipo organización, uso dentro de específico partes de
los solicitud, y manifestaciones físicas tales como bases de código y esquemas de
bases de datos. Mantenga el modelo estrictamente consistente dentro de estas
límites, pero no ser distraído o confundido por cuestiones fuera de.

A ENC ERRADO C ONTEXTO delimita los aplicabilidad de a especial modelo entonces que equipo
miembros tener una limpieza y compartido comprensión de qué posee para ser consistente y
cómo eso relaciona para otro C ONTEXTOS . Dentro de que C ONTEXTO , trabajo para mantenerse los
modelo lógicamente unificado, pero hacer no preocuparse sobre aplicabilidad fuera esos límites.
En otro C ONTEXTOS , otro modelos aplicar, con diferencias en terminología, en conceptos y normas,
y en dialectos de los UBIC UO IDIOMA . Por dibujo un explícito límite, tú lata mantenerse los modelo
puro, y por lo tanto potente, donde eso es aplicable. En los mismo hora, tu evitas Confusión
Cuándo cambiando tu atención para otro C ONTEXTOS . Integración al otro lado de los límites
necesariamente voluntad involucrar algunos traducción, cual usted lata analizar explícitamente.



Reserva de
ejemplo
Contexto

A Envío empresa posee un interno proyecto para desarrollar a nuevo solicitud por reserva carga.
Esta aplicación debe ser impulsada por un modelo de objetos. ¿Cuál es el C ONTEXTO LÍMITE
dentro del cual se desarrolla este modelo ? se aplica? Para responder esta pregunta, nosotros
tener para Mira en qué es sucediendo en los proyecto. Mantener dentro mente, esta es a Mira en

BOUNDED CONTEXTS Are Not MODULES

The issues are confused sometimes, but these are different patterns with different
motivations. True, when two sets of objects are recognized as making up different
models, they are almost always placed in separate MODULES. Doing so does provide
different name spaces (essential for different C ONTEXTS) and some demarcation.

But MODULES also organize the elements within one model; they don't necessarily
communicate an intention to separate C ONTEXTS. The separate name spaces that
MODULES create within a BOUNDED C ONTEXT actually make it harder to spot accidental
model fragmentation.

los proyecto como eso es , no como eso idealmente deberían ser.

Una proyecto equipo es trabajando en los reserva solicitud sí mismo. Ellos están no previsto para
modificar los

modelo objetos, pero los solicitud ellos están edificio posee para mostrar y manipular esos
objetos. Este equipo es un consumidor del modelo. El modelo es válido dentro de la
aplicación (su consumidor principal), y por lo tanto los reserva solicitud es en límites.

Las reservas completadas deben pasarse al sistema de seguimiento de carga heredado. Se
tomó la decisión por adelantado de que el nuevo modelo se apartaría del anterior, por lo que
el seguimiento de carga heredado sistema es fuera de los Perímetro. Necesario traducción Entre
los nuevo modelo y el legado es para ser los responsabilidad de los legado mantenimiento equipo.
los traducción El mecanismo no es impulsado por el modelo. No está en el C ONTEXTO LÍMITE . (Es
parte del límite mismo, que voluntad ser discutido en C ONTEXTO MAPA .) Eso es bien que
traducción es fuera de C ONTEXTO (no establecido en el modelo). Sería poco realista pedirle al
equipo heredado que haga un uso real del modelo porque sus primario trabajo es fuera de
C ONTEXTO .

El equipo responsable del modelo se ocupa de todo el ciclo de vida de cada objeto, incluida la
persistencia. Debido a que este equipo tiene el control del esquema de la base de datos, han
estado manteniendo deliberadamente los objeto-relacional cartografía simple. En otro palabras,
los esquema es siendo conducido por los modelo y por lo tanto es en límites.

Aún otro equipo es trabajando en a modelo y solicitud por Planificación los viajes de los barcos de
carga. los Planificación y reserva equipos fueron iniciado juntos, y ambas cosas equipos tenido
destinado a para producir a único, unificado sistema. los dos equipos tener por casualidad
coordinado con cada otro, y ellos de vez en cuando Cuota objetos, pero ellos están no sistemático
sobre eso. Ellos están no trabajando en el mismo C ONTEXTO LIMITADO . Esto es un riesgo, porque
no se consideran trabajando en modelos separados. En la medida en que se integren, habrá
problemas a menos que establezcan procesos para administrar los situación. (Los C OMPARTIDO
NÚC LEO , discutido luego en esta capítulo, puede que ser un bien elección.) los primero paso,
aunque, es para reconocer los situación como eso es _ Ellos están no en los mismo C ONTEXTO y
deberían detener difícil para Cuota código Hasta que algunos cambios están hecha.

Este C ONTEXTO LÍMITE se compone de todos aquellos aspectos del sistema que son impulsados
por este particular modelo: los modelo objetos, los base de datos esquema que persiste los
modelo objetos, y la aplicación de reserva. Dos equipos trabajan principalmente en este
C ONTEXTO : el equipo de modelado y el equipo de aplicación. La información tiene que ser
intercambiada con el sistema de seguimiento heredado, y el heredado equipo posee primario
responsabilidad por los traducción en esta Perímetro, con cooperación del equipo de modelaje. No
existe una relación claramente definida entre el modelo de reserva y el viaje. calendario
modelo, y definiendo que relación deberían ser una de esos equipos' primero comportamiento. En
los mientras tanto, ellos deberían ser muy Cuidado sobre intercambio código o datos.

Entonces, qué posee estado ganado por definiendo esta ENC ERRADO ¿ C ONTEXTO ? Para los equipos
trabajando en C ONTEXTO : claridad. Esos dos equipos saben que deben ser consistentes con un
modelo. Toman decisiones de diseño. en que conocimiento y reloj por fracturas Para los equipos
fuera de: libertad. Ellos no tengo para andar en los gris zona, no utilizando los mismo modelo,
aún de alguna manera sentimiento ellos deberían. Pero el más hormigón ganar en esta especial
caso es probablemente darse cuenta los riesgo de los informal compartir entre los reserva
modelo equipo y los viaje calendario equipo. Para evitar problemas, ellos realmente necesito
para decidir en los coste-beneficio compensaciones de intercambio y poner en procesos para
hacer eso trabajo. esto no suceder a no ser que todo el mundo entiende donde los límites de los
modelo contextos están.


De curso, límites están especial lugares. los relaciones Entre a ENC ERRADO C ONTEXTO y sus
vecinos exigir cuidado y atención. los C ONTEXTO MAPA gráficos los territorio, donación los grande
imagen de los C ONTEXTOS y sus conexiones, mientras que varios patrones definen la
naturaleza de las diversas relaciones Entre C ONTEXTOS . Y a proceso de C ONTINUO INTEGRAC IÓN
conservas unidad de el modelo dentro de a ENC ERRADO C ONTEXTO .

Pero antes de proceder para todos que, qué lo hace eso Mira me gusta Cuándo unificación de a
modelo es rompiendo? Cómo hacer usted reconocer conceptual astillas?

Reconocimiento de astillas dentro de un CONTEXTO LÍMITE

Muchos síntomas pueden indicar diferencias de modelo no reconocidas . Algunos de los más
obvios son cuando las interfaces codificadas no coinciden. Más sutilmente, el comportamiento
inesperado es un signo probable. El C ONTINUO INTEGRAC IÓN proceso con automatizado pruebas
lata ayuda atrapar estas tipos de problemas. Pero el temprano advertencia es generalmente a
Confusión de idioma.

Combinatorio elementos de distinto modelos causas dos categorías de problemas: duplicar
conceptos y falso cognados _ Duplicación de conceptos medio que allí están dos modelo
elementos (y implementaciones asociadas) que Realmente representar los mismo concepto.
Cada hora esta información cambia, lo posee para ser actualizado en dos lugares con
conversiones Cada hora nuevo conocimiento Guías para a cambio en uno de los objetos, el otro
tiene que ser reanalizado y cambiado también. Excepto que el reanálisis no suceder en
realidad, entonces los resultado es dos versiones de los mismo concepto que seguir reglas
diferentes y incluso tener diferente datos. En cima de que, los equipo miembros deber aprender
no una pero dos caminos de haciendo los mismo cosa, a lo largo de con todos los formas ellos
están siendo sincronizado

Falso cognados mayo ser levemente menos común, pero más insidiosamente dañino. Esta es los
caso cuando dos gente quién están utilizando los mismo término (o implementado objeto) pensar
ellos están hablando sobre lo mismo, pero en realidad no lo son. El ejemplo al comienzo de este
capítulo (dos negocios diferentes) ocupaciones ambas cosas llamado cargo ) es típico, pero
conflictos lata ser incluso más sutil Cuándo los dos definiciones están Realmente relacionados
para los mismo aspecto en los dominio, pero tener estado conceptualizado en un poco diferente
formas. Falso cognados dirigir para desarrollo equipos que paso en cada otros código, bases de
datos que tener extraño contradicciones, y Confusión en comunicación dentro de los equipo. El
término cognado falso se aplica normalmente a los lenguajes naturales. Por ejemplo, los
angloparlantes aprenden español con frecuencia mal uso los palabra embarazada _ Esta palabra
lo hace no significar "avergonzado"; significa "embarazada." UPS.

Cuándo usted detectar estas problemas, tu equipo voluntad tener para hacer a decisión. Tú
mayo querer para jale la modelo espalda juntos y refinar los procesos para evitar fragmentación.
O los la fragmentación puede ser a resultado de grupos quién querer para jalar los modelo en
diferente direcciones por bien razones, y tu mayo decidir para dejar ellos desarrollar
independientemente. Relación comercial con estas cuestiones es los tema de el restante
patrones en esta capítulo.

[ Equipo LiB ]

[ Equipo LiB ]


Integración continua

Habiendo definido un C ONTEXTO LÍMITE , debemos mantenerlo sólido.


Cuándo a número de gente están trabajando en los mismo ENCERRADO CONTEXTO , allí
es a fuerte tendencia por los modelo para fragmento. los más grande los equipo, los
más grande los problema, pero como pocos como Tres o cuatro gente lata encuentro
grave problemas. Aún rotura abajo el sistema dentro cada vez más pequeño
CONTEXTOS finalmente pierde a valioso nivel de integración y coherencia.

A veces desarrolladores hacer no completamente comprender los intención de algunos objeto o
Interacción modelado por alguien demás, y ellos cambiar eso en a manera que hace eso
inutilizable por su original propósito.
A veces no se dan cuenta de que los conceptos en los que están trabajando ya están
plasmados en otro parte de los modelo y ellos duplicar (exactamente) esos conceptos y conducta.
A veces son conscientes de esas otras expresiones, pero tienen miedo de manipularlas, por
miedo a corromperlas. los existente funcionalidad, y entonces ellos Continuar para duplicar
conceptos y funcionalidad.

Eso es muy duro para mantener los nivel de comunicación necesario para desarrollar a unificado
sistema de cualquier tamaño. Necesitamos formas de aumentar la comunicación y reducir la
complejidad. También necesitamos redes de seguridad que evitar demasiado cauteloso
conducta, tal como desarrolladores duplicando funcionalidad porque ellos son temeroso ellos
voluntad descanso existente código.

Es en este entorno donde la Programación Extrema (XP) realmente se destaca. Muchas
prácticas de XP están dirigidas a este problema específico de mantener un diseño coherente
que muchas personas cambian constantemente. XP en su forma más pura es una buena opción
para mantener la integridad del modelo dentro de a único ENC ERRADO C ONTEXTO . Sin embargo, ya
sea o no XP es siendo usado, eso es esencial para tener algunos proceso de C ONTINUO INTEGRAC IÓN
.

INTEGRACIÓN C ONTINUA significa que todo el trabajo dentro del contexto se fusiona y se hace
consistente frecuentemente suficiente que Cuándo astillas suceder ellos están atrapó y corregido
rápidamente. C ONTINUO _ INTEGRAC IÓN , me gusta todo demás en impulsado por el dominio

diseño, opera en dos niveles: (1)

la integración de los conceptos del modelo y (2) la integración de la implementación.

Los conceptos se integran mediante la comunicación constante entre los miembros del
equipo. El equipo debe cultivar a compartido comprensión de los siempre cambiante modelo.
Muchos prácticas ayuda, pero los lo más fundamental es forjar constantemente el LENGUAJE
UBIC UO . Mientras tanto, los artefactos de implementación se están integrando mediante un
proceso sistemático de fusión/construcción/prueba que expone modelo astillas temprano.
Muchos procesos por integración están usado, pero más de los los efectivos Cuota estas
caracteristicas:

Una técnica de combinación/construcción reproducible paso a paso;

conjuntos de pruebas automatizadas; y

Reglas que establecen un límite superior razonablemente pequeño en la vida útil de los
cambios no integrados.

La otra cara de la moneda en los procesos efectivos, aunque pocas veces se incluye
formalmente, es
integración conceptual .


Ejercicio constante del LENGUAJE UBIC UO en las discusiones del modelo y aplicación

Más Ágil proyectos tener en menos a diario fusiona de cada del desarrollador código cambios.
los la frecuencia puede ser equilibrado para los ritmo de cambiar, como largo como ninguna
no integrado cambiar haría ser fusionado antes a significativo Monto de incompatible trabajo
pudo ser hecho por otro equipo miembros

En a DISEÑO IMPULSADO POR MODELOS , los integración de conceptos suaviza los manera por los
integración de la implementación, tiempo los integración de los implementación prueba los
validez y consistencia de El modelo y expone astillas

Por lo tanto:

Instituto a proceso de fusionando todos código y otro implementación artefactos con
frecuencia, con pruebas aut omatizadas para señalar la fragmentación rápidamente.
Ejercer implacablemente lo UBICUO IDIOMA para martillo fuera a compartido vista de
los modelo como los conceptos evolucionar en diferente de la gente cabezas _

Finalmente, hacer no hacer los trabajo ninguna más grande que eso posee para ser.
INTEGRACIÓN C ONTINUA es esencial sólo dentro de un C ONTEXTO LÍMITE . Los problemas de
diseño relacionados con C ONTEXTOS vecinos , incluida la traducción, no tener para ser tratado con
en los mismo ritmo.


INTEGRACIÓN C ONTINUA se aplicaría dentro de cualquier C ONTEXTO LIMITADO individual que sea
más grande que a dos personas tarea. Eso mantiene los integridad de que único modelo.
Cuándo múltiple C ONTEXTOS LÍMITES coexistir, usted tener para decidir en sus relaciones y diseño
ninguna necesario interfaces .
. .

[ Equipo LiB ]

[ Equipo LiB ]


Mapa de contexto

Un individual ENCERRADO CONTEXTO todavía lo hace no proveer a global vista. los contexto de
otro los modelos pueden todavía ser vago y en flujo.


Las personas de otros equipos no serán muy conscientes de los límites del
CONTEXTO y, sin saberlo, hacer cambios que difuminar los bordes o complicar los
interconexiones Cuándo conexiones deber ser hecha Entre diferente contextos,
ellos tender para sangrar en cada otro.

Código reutilizar Entre ENC ERRADO C ONTEXTOS es a peligro para ser evitado Integración de
funcionalidad y datos deber ir a través de a traducción. Tú lata reducir Confusión por definiendo
los relación Entre los diferente contextos y creando a global vista de todos los modelo contextos
en los proyecto.

A C ONTEXTO MAPA es en los superposición Entre proyecto administración y software diseño. los El
curso natural de los acontecimientos es que los límites sigan los contornos de la organización
del equipo. gente que trabaja cercanamente voluntad naturalmente Cuota a modelo contexto.
Gente en diferente equipos, o esos que no hables, incluso si ellos están en los mismo equipo,
voluntad separar apagado dentro diferente contextos. Físico oficina el espacio también puede
tener un impacto, ya que los miembros del equipo en los extremos opuestos de un edificio,
sin mencionar las diferentes ciudades, probablemente divergirán sin un esfuerzo de
integración adicional. La mayoría de los gerentes de proyecto reconocen intuitivamente estos
factores y organizan ampliamente los equipos en torno a subsistemas. Pero la interrelación
Entre equipo organización y software modelo y diseño es todavía no suficientemente
prominente. Tanto los gerentes como los miembros del equipo necesitan una visión clara de
la subdivisión conceptual en curso. de los software modelo y diseño.

Por lo tanto:

Identificar cada modelo en jugar en los proyecto y definir su ENCERRADO CONTEXTO . Esta
incluye los modelos implícitos de subsistemas no orientados a objetos. Nombre cada
CONTEXTO LÍMITE , y hacer los nombres parte de los UBICUO IDIOMA .

Describir los puntos de contacto Entre los modelos, esbozando explícito traducción por
cualquier comunicación y destacando ninguna intercambio.

Mapea el terreno existente . Retoma las transformaciones más tarde.

Dentro de cada ENC ERRADO C ONTEXTO , usted voluntad tener a coherente dialecto de los UBIC UO
IDIOMA . Los nombres de los C ONTEXTOS LIMITADOS entrarán ellos mismos en ese IDIOMA para
que pueda hablar sin ambigüedades sobre los modelo de ninguna parte de los diseño por
haciendo tu C ONTEXTO claro.

los MAPA lo hace no tener para ser documentado en ninguna especial formulario. I encontrar
diagramas me gusta los unos en esto capítulo para ser servicial en visualizante y comunicado
los mapa. Otros mayo preferir a más textual descripción o a diferente gráfico representación. En
algunos situaciones, discusión entre compañeros mayo ser suficiente. los nivel de detalle lata
variar según para necesitar. Lo que formulario el MAPA toma, eso deber ser compartido y
entendido por todo el mundo en los proyecto. Eso deber proveer a nombre claro por cada
ENC ERRADO C ONTEXTO , y eso deber hacer los puntos de contacto y sus naturalezas claro.


los relaciones Entre ENC ERRADO C ONTEXTOS llevar muchos formularios dependiente en ambas
cosas diseño problemas y proyecto organizativo cuestiones. Luego, esta capítulo voluntad poner
fuera varios patrones de relaciones entre C ONTEXTOS que están eficaz en diferente situaciones, y
que lata proveer condiciones para describe las relaciones que encuentres en tu propio MAP .
Teniendo en cuenta que el MAPA DE C ONTEXTO siempre representa los situación como eso
soportes , los relaciones usted encontrar mayo no encajar estas patrones inicialmente. Si se
acercan, es posible que desee utilizar el nombre del patrón, pero no lo fuerce. Solo describe
las relaciones. usted encontrar. Luego usted lata empezar para emigrar hacia más estandarizado
relaciones

Entonces, ¿qué haces si descubres una astilla, un modelo que está completamente enredado
pero que contiene inconsistencias? Poner a continuar en los mapa y finalizar describiendo todo.
Luego, con una visión global precisa, abordar los puntos de confusión. Una pequeña astilla se
puede reparar y procesar lata ser poner en lugar para orilla eso arriba. Si a relación es vago,
usted lata escoger los patrón más cercano y muévase hacia él. Su primera orden del día es
llegar a un MAPA DE C ONTEXTO claro , y esto puede significar solucionar problemas reales que
haya encontrado. Pero no dejes que esta reparación necesaria lleve a la venta al por mayor.
reorganización. Hasta que usted tener un inequívoco C ONTEXTO MAPA que lugares todos tu trabajar
en algunos ENC ERRADO C ONTEXTO , con explícito relaciones Entre todos conectado modelos, cambiar
Solo el total contradicciones

MAPA DE C ONTEXTO coherente , verá las cosas que desea cambiar. Puedes hacer considerado
cambios para los organización de equipos o para los diseño. Recordar, no cambiar el mapa Hasta
que los cambiar en realidad es hecho _


Ejemplo
Dos C ONTEXTOS en un Envío Solicitud

Nosotros regreso otra vez para los Envío sistema. Una de los aplicación importante
caracteristicas era para ser el automatico enrutamiento de cargas en reserva hora. los modelo
era algo me gusta esta:



Figura 14.2.

los Enrutamiento Servicio es a SERVIC IO que encapsula a mecanismo detrás un INTERFAZ QUE
REVELA LA INTENC IÓN hecha arriba de SIN EFEC TOS SEC UNDARIOS FUNC IONES . los resultados de esos
funciones están caracterizado con ASERC IONES .

1. los interfaz declara que Cuándo a Ruta Especificación es aprobado en, un Itinerario
voluntad ser devuelto.

2. los AFIRMACIÓN estados que los devuelto Itinerario voluntad satisfacer los Ruta
Especificación eso fue pasado en.

Nada es fijado sobre cómo esta muy difícil tarea es realizado. Ahora vamos ir detrás los cortina
para ver los mecanismo.

Inicialmente en los proyecto en cual esta ejemplo es establecido, I era también dogmático sobre
los internos de la Enrutamiento servicio _ I querido los real enrutamiento operación para ser
hecho con un extendido modelo de dominio que haría representar embarcación viajes y
directamente relacionar ellos para los Piernas en los Itinerario . Pero el equipo que trabajaba
en el problema de enrutamiento señaló que, para que funcionara bien y se basara en
algoritmos bien establecidos, la solución debía implementarse como una red optimizada, con
cada tramo de un viaje representado como un elemento en una matriz. . Insistían en una
diferenciación modelo de Envío operaciones por esta propósito.

Ellos fueron claramente Correcto sobre los computacional demandas de los enrutamiento proceso
como luego diseñado, y entonces, carente ninguna mejor idea, I cedido En efecto, nosotros
creado dos separar ENC ERRADO C ONTEXTOS , cada uno de cual tenido su propio conceptual
organización de Envío operaciones. (Ver Figura 14.3 .)


Figura 14.3. Dos CONTEXTOS LÍMITES formados para permitir la
aplicación de algoritmos de enrutamiento
eficientes

Nuestro requisito era para llevar a Enrutamiento Servicio solicitud, traducir eso dentro
condiciones los Network Traversal Service podría entender, luego tomar el resultado y
traducirlo en la forma de un enrutamiento Servicio es previsto para dar.

Esta medio eso era no necesario para mapa todo en estas dos modelos, pero solamente para ser
poder para hacer dos específico traducciones:

Especificación de ruta Lista de códigos de
ubicación Lista de Nodo identificaciones
Itinerario
Para hacer esta, nosotros tener para Mira en los sentido de un elemento de una modelo y
figura fuera cómo para expresar eso en condiciones de los otro.

A partir de con los primero traducción ( Ruta Especificación Lista de ubicación códigos),
nosotros tener pensar sobre los sentido de los secuencia de ubicaciones en los lista. los primero
en los lista voluntad ser el comienzo del camino, que luego se verá obligado a pasar por cada
lugar a su vez hasta llegar a los último ubicación en los lista. Entonces los origen y destino están
los primero y último en los lista, con los costumbres autorización ubicación (si allí es una) en los
medio.


Figura 14.4. Traducción de una consulta al Servicio transversal de
red

(Piadosamente, los dos equipos usado los mismo ubicación códigos, entonces nosotros no tener
para trato con que nivel de traducción.)

Aviso que los contrarrestar traducción haría ser ambiguo, porque los la red el recorrido la
entrada permite cualquier número de puntos intermedios, no solo uno designado
específicamente como despacho de aduana punto. Afortunadamente, esta es no problema
porque nosotros no necesitar para traducir en esa dirección, pero eso da a vistazo de por
qué algunos traducciones están imposible.

Ahora, vamos traducir los resultado ( Lista de Nodo identificaciones itinerario ). Bien
asumir que nosotros lata utilizar un REPOSITORIO para buscar los objetos Nodo y Operación
de envío en función de los ID de nodo que recibimos. Entonces, cómo hacer esos Nodos
mapa para ¿ Piernas ? Establecido en los código de tipo de operaci ón , nosotros lata romper
el lista de Nodos dentro llegada Salida pares Cada par luego relaciona para una pierna _


Figura 14.5. Traducción de una ruta encontrada por Network
Traversal Service

Los atributos de cada par de nodos se asignarían de la siguiente manera:

nododesalida.shippingOperation.vesselVoyageId tramo.vesselVoyageId
salidaNodo.envíoOperación.fecha leg.loadDate salidaNodo.ubicaciónCódigo
tramo.cargaLocalizaci ónCódigo llegadaNodo.envíoOperación.fecha
tramo.descargaDate llegadaNodo.ubicaciónCódigo leg.unloadLocationCode

Este es el mapa de traducción conceptual entre estos dos modelos. Ahora tenemos que
implementar algo. que lata hacer los traducción por nosotros. En a sencillo caso me gusta esta, I
típicamente crear un objeto para el propósito, y luego encontrar o crear otro objeto para
proporcionar el servicio al resto de nuestro subsistema.


Figura 14.6. Un traductor bidireccional

Esta es los una objeto que ambas cosas equipos tener para trabajo juntos para mantener. los
diseño deberían hazlo muy fácil para prueba de unidad, y eso haría ser a particularmente bien
idea por los equipos para colaborar en una prueba suite por eso. Otro que que, ellos lata ir sus
separar formas.



Figura 14.7.




los Enrutamiento Servicio implementación ahora se convierte a importar de delegar para los
Traductor y el La red El recorrido Servicio. Su único operación haría Mira algo me gusta esta:

ruta de itinerario p úblico (especificaci ón de
ruta) { Booking_TransportNetwork_Transla tor
traductor =
nuevo Booking_TransportNetwork_Translator();]
Lista de ubicaciones de restricciones =
traductor.convertConstraints(spec);

// Obtener acceso para los Nodos de ruta de
la lista NetworkTraversalService =
traversalService.findPath(constraintLocations);
Itinerario resultado =
traductor.convert(pathNodes); regreso resultado;
}

No malo. los ENC ERRADO C ONTEXTOS servido para mantenerse cada de los modelos relativamente
limpio, dejar los los equipos trabajan en gran medida de forma independiente, y si las
suposiciones iniciales hubieran sido correctas, probablemente habrían servido bien. (Bien
regreso para que luego en esta capítulo.)

La interfaz entre los dos contextos es bastante pequeña. La interfaz del Servicio de
enrutamiento aísla el resto del diseño de Booking C ONTEXT de los eventos en el mundo de la
búsqueda de rutas. La interfaz es fácil para prueba porque eso es hecha arriba de SIN EFEC TOS
SEC UNDARIOS FUNC IONES . Una de los misterios a una coexistencia cómoda con otros C ONTEXTOS
es tener conjuntos efectivos de pruebas para las interfaces. "Confianza, pero verificar," dijo
presidente reagan Cuándo negociando brazos reducciones [1]

[1] reagan traducido un viejo ruso diciendo que resumido arriba los corazón de los importar por ambas
cosas lados—otra metáfora por puente contextos.

Eso deberían ser fácil para idear a colocar de automatizado pruebas que haría alimento Ruta
Especificaciones en el Enrutamiento Servicio y controlar los devuelto Itinerario .

Modelo contextos siempre existe, pero sin consciente atención ellos mayo superposición y
fluctuar. por explícitamente definiendo ENC ERRADO C ONTEXTOS y a C ONTEXTO MAPA , tu equipo lata
empezar para directo los proceso de unificando modelos y conectando distinto unos.


Pruebas en los límites del C ONTEXTO

Los puntos de contacto con otros C ONTEXTOS LÍMITES son particularmente importantes para
probar. Las pruebas ayudan a compensar por los sutilezas de traducción y los más bajo nivel
de comunicación que típicamente existen en límites. Ellos lata Actuar como a valioso
temprano advertencia sistema, especialmente tranquilizador en casos donde usted depender
en los detalles de a modelo usted no control.


Organización y documentación de mapas de contexto

Aquí solo hay dos puntos importantes:

1. los ENC ERRADO C ONTEXTOS deberían tener nombres entonces que usted lata hablar sobre
ellos. Esos los nombres deben ingresar los UBIC UO IDIOMA de los equipo.

2. Todo el mundo posee para saber donde los límites mentir, y ser poder para reconocer los
CONTEXTO de cualquier pedazo de código o ninguna situación.

los segundo requisito pudo ser reunió en muchos formas dependiente en los cultura de los
equipo. Una vez que el ENC ERRADO C ONTEXTOS tener estado definido, eso llega naturalmente
para segregar los código de diferentes C ONTEXTOS dentro diferente MÓDULOS , cual sale de los
pregunta de cómo para mantenerse pista de cual MÓDULO en el que pertenece C ONTEXT . Se
puede utilizar una convención de nomenclatura para indicar este o cualquier otro mecanismo.
que es fácil y evita Confusión.

Igualmente importante es comunicado los conceptual límites en tal a manera que todo el mundo
en el equipo entiende ellos los mismo manera. Para esta comunicación propósito, I me gusta
informal diagramas

me gusta los unos en los ejemplo. Más riguroso diagramas o textual liza pudo ser hecha,
demostración todos los paquetes en cada C ONTEXTO , a lo largo de con los puntos de contacto y
los mecanismos responsable para conectar y traductorio. Algunos equipos voluntad ser más
cómodo con esta Acercarse, tiempo otros lo harán obtener por multa establecido en hablado
convenio y un montón de discusión.

En cualquier caso, trabajar el MAPA DE C ONTEXTO en las discusiones es fundamental para que los
nombres entren en el LENGUAJE UBIC UO . No diga: "Las cosas del equipo de George están
cambiando, así que vamos a tener que cambiar nuestro cosas que negociaciones para eso."
Decir en lugar de, "Los Transporte La red modelo es cambiando, entonces iban para tener para
cambiar los traductor por los Reserva contexto ".

[ Equipo LiB ]

[ Equipo LiB ]


Relaciones entre B OUNDED C ONTEXTOS
los siguiente patrones cubrir a rango de estrategias por relativo dos modelos que lata ser
compuesto para abarcar toda una empresa. Estos patrones tienen el doble propósito de
proporcionar objetivos para organizar con éxito el trabajo de desarrollo y proporcionar
vocabulario para describir la organización existente.

Un existente relación mayo, por oportunidad o por diseño, otoño cerca una de estas patrones, en
cual caso de que lata describir eso utilizando que término, variaciones debidamente señalado.
Luego, con cada pequeña diseño cambiar el relación lata ser dibujado más cerca para los elegido
patrón.

Por otro lado, es posible que encuentre que una relación existente es confusa o demasiado
complicada. Algunos reorganización puede que ser necesario sólo para hacer un inequívoco
C ONTEXTO MAPA posible. En esto situación, o ninguna situación en cual usted están considerando
reorganización, estas patrones presentan una gama de opciones que se favorecen en diferentes
circunstancias. Las variables prominentes incluyen el nivel de control usted tener sobre los otro
modelo, los nivel y escribe de cooperación Entre equipos, y los la licenciatura de integración de
caracteristicas y datos.

los siguiente colocar de patrones cubre algunos de los más común y importante casos, cual debe
darle una buena idea de cómo abordar otros casos. Un equipo de primera que trabaja en
estrecha colaboración en un producto lata desplegar a grande unificado modelo. los necesitar
para atender diferente usuario comunidades o una limitación en las habilidades de coordinación
del equipo puede conducir a un NÚC LEO C OMPARTIDO o relaciones C LIENTE/PROVEEDOR . A veces,
una buena mirada a los requisitos revela que la integración no es esencial y que es mejor que
los sistemas sigan caminos separados . Y, por supuesto, la mayoría proyectos tener para integrar
para algunos la licenciatura con legado y externo sistemas, cual lata llevar a ABIERTO ANFITRIÓN
SERVIC IOS o ANTI C ORRUPCION C APAS .


[ Equipo LiB ]

[ Equipo LiB ]


Núcleo compartido

Cuándo funcional integración es limitado, los gastos generales de C ONTINUO INTEGRAC IÓN mayo
ser considerado demasiado alto. Esto puede ser especialmente cierto cuando los equipos no
tienen la habilidad o la organización política para mantener una integración continua, o
cuando un solo equipo es simplemente demasiado grande y difícil de manejar. Entonces
separar ENC ERRADO C ONTEXTOS puede que ser definido y múltiple equipos formado.


descoordinado equipos trabajando en cercanamente relacionados aplicaciones lata ir
carreras hacia adelante para tiempo, pero qué ellos Produce mayo no encajar juntos.
Ellos lata final arriba gasto más en capas de traducción y retroadaptación de lo que
tendrían en INTEGRACIÓN CONTINUA en primer lugar, mientras tanto se duplican
esfuerzos y se pierden los beneficios de una UBICUIDAD común IDIOMA .

En muchos proyectos, he visto la capa de infraestructura compartida entre equipos que
trabajaban en gran medida de forma independiente. Un analogía para esta lata trabajo bien
dentro de los dominio como bien. Eso mayo ser también muchos gastos generales para
completamente sincronizar los completo modelo y código base, pero a con cuidado seleccionado
subconjunto puede proporcionar mucho de los beneficio por menos costo.

Por lo tanto:

Designe algún subconjunto del modelo de dominio que los dos equipos acuerden
compartir. por supuesto esta incluye, a lo largo de con esta subconjunto de los
modelo, los subconjunto de código o de la base de datos diseño asociado con que
parte de los modelo. Esta explícitamente compartido cosas tiene especial estado, y no
debería ser cambió sin consulta con los otro equipo.

Integrar un sistema funcional con frecuencia, pero algo menos que el ritmo de
CONTINUO INTEGRACIÓN dentro de los equipos En estas integraciones, correr los
pruebas de ambos equipos.

Eso es a Cuidado equilibrio. los C OMPARTIDO NÚC LEO no poder ser cambió como libremente
como otro partes de el diseño. Decisiones involucrar consulta con otro equipo.
automatizado prueba suites deber ser

integrado porque todas las pruebas de ambos equipos deben pasar cuando se realizan
cambios. Por lo general, los equipos hacen cambios en separar copias de los NÚC LEO , integrando
con los otro equipo en intervalos (Por ejemplo, en un equipo que se INTEGRA C ONTINUAMENTE
diariamente o mejor, la fusión de KERNEL podría ser semanal). Independientemente de Cuándo
código integración es programado, los cuanto antes ambas cosas equipos hablar sobre los
cambios, los mejor.


El NÚCLEO C OMPARTIDO es a menudo el DOMINIO PRINC IPAL , algún conjunto de SUBDOMINIOS
GENÉRIC OS , o ambos (consulte el Capítulo 15 ), pero eso lata ser ninguna parte de los modelo
que es necesario por ambas cosas equipos los meta es para reducir duplicación (pero no para
eliminar eso, como haría ser los caso si allí fueron sólo una C ONTEXTO LÍMITE ) y hacer
integración Entre los dos subsistemas relativamente fácil.


[ Equipo LiB ]

[ Equipo LiB ]


Equipos de desarrollo de clientes/proveedores

Con frecuencia una subsistema esencialmente alimenta otro; los "río abajo" componente realiza
análisis u otro funciones que alimento espalda muy poco dentro los "río arriba" componente, y
todos dependencias ir un manera. los dos subsistemas comúnmente atender muy diferente
usuario comunidades, quién hacer diferentes trabajos, donde diferentes modelos pueden ser
útiles. El conjunto de herramientas también puede ser diferente, por lo que el código del
programa no poder ser compartido.


Los subsistemas aguas arriba y aguas abajo se separan naturalmente en dos C ONTEXTOS
LÍMITES . esto es especialmente cierto Cuándo los dos componentes exigir diferente habilidades o
emplear a diferente herramienta colocar para la implementación. Traducción es más fácil por
teniendo para funcionar en una dirección solamente. Pero problemas puede emerger,
dependiente en los político relación de los dos equipos

El desarrollo libre del equipo ascendente puede verse obstaculizado si el equipo
descendente tiene poder de veto sobre los cambios, o si los procedimientos para
solicitar cambios están también incómodo. los río arriba equipo mayo incluso ser
inhibido, preocupado por rotura los río abajo sistema. Mientras tanto, los río
abajo equipo lata estar indefenso, en los misericordia de río arriba prioridades

Downstream necesita cosas de upstream, pero upstream no es responsable de los entregables
de downstream. Eso toma a lote de extra esfuerzo para prever qué voluntad afectar los otro
equipo, y la naturaleza humana siendo qué eso es, y hora presiones siendo qué ellos están, bien .
. . . Eso hace de todos vida más fácil para formalizar los relación Entre los equipos los proceso lata
ser organizado para equilibrar el necesidades de los dos usuario comunidades y calendario trabajo
en caracteristicas necesario río abajo.

En un proyecto de Programación Extrema, ya existe un mecanismo para hacer precisamente
eso: el iteración planificación proceso. Todos nosotros tener para hacer es definir los relación
Entre los dos equipos en condiciones de los planificación proceso. Representantes de los río abajo
equipo lata función mucho como los representantes de los usuarios, uniéndose a ellos en las
sesiones de planificación, discutiendo directamente con sus compañeros "clientes" los
compensaciones por los Tareas ellos querer. los resultado es un iteración plan por los equipo de
proveedores que incluye Tareas los río abajo equipo necesidades más o aplaza Tareas por
convenio, entonces hay no expectativa de entrega.

Si a proceso otro que XP es usado, lo que análogo método sirve para equilibrio los
preocupaciones de diferente usuarios lata ser expandido para incluir los río abajo aplicación
necesidades.

Por lo tanto:

Establecer a claro cliente/proveedor relación Entre los dos equipos En sesiones de
planificación, hacer los río abajo equipo jugar los cliente papel para los río arriba
equipo. Negociar y presupuestar tareas para requisitos posteriores para que todos
entiendan los compromiso y calendario.

Conjuntamente desarrollar automatizado aceptación pruebas que voluntad validar
los interfaz previsto. Agregar estas pruebas para los río arriba del equipo prueba
suite, para ser correr como parte de su integración continua. Esta pruebas voluntad
gratis los río arriba equipo para hacer cambios sin miedo de lado efectos río abajo.

Durante la iteración, los miembros del equipo aguas abajo deben estar disponibles para los
desarrolladores aguas arriba. sólo como convencional clientes están, para responder
preguntas y ayuda resolver problemas.

La automatización de las pruebas de aceptación es una parte vital de esta relación con el
cliente. Incluso en los más cooperativos proyecto, aunque los cliente lata identificar y comunicar
su dependencias, y el proveedor lata diligentemente tratar para comunicar cambios, sin pruebas,
sorpresas voluntad suceder. Interrumpirán el trabajo del equipo de aguas abajo y obligarán al
equipo de aguas arriba a realizar arreglos de emergencia no programados. En su lugar, haga
que el equipo del cliente, en colaboración con el equipo del proveedor, desarrolle automatizado
aceptación pruebas que voluntad validar los interfaz eso espera los río arriba El equipo ejecutará
estas pruebas como parte de su conjunto de pruebas estándar. Cualquier cambio en estas
pruebas requiere comunicación. con los otro equipo, porque cambiando los pruebas implica
cambiando los interfaz.

Cliente/proveedor relaciones además surgir Entre proyectos en separar empresas, en situaciones
en las que un solo cliente es muy importante para el negocio del proveedor. La cola puede
mover al perro: un cliente influyente puede hacer demandas que son importantes para el éxito
del proyecto aguas arriba. pero esos demandas lata además ser disruptivo para los río arriba del
proyecto desarrollo. Ambas fiestas beneficio desde los formalización de los proceso de
respondiendo para requisitos, porque el costo/beneficio compensaciones están incluso más difícil
para ver en externo relaciones que ellos están en los TI interna situación.

Hay dos elementos cruciales en este patrón.

1. La relación debe ser la de cliente y proveedor, con la implicación de que el cliente
necesidades están supremo. Porque los río abajo equipo es no los solamente cliente, las
demandas de los diferentes clientes tienen que equilibrarse en la negociación, pero
siguen siendo prioridades. Esta situación es en contraste para los primo pobre relación
que con frecuencia emerge, en el cual los río abajo equipo posee para venir mendicidad
para los río arriba equipo por su necesidades.

2. Ahí deber ser un automatizado prueba suite que permite los río arriba equipo para
cambiar su código sin miedo de rotura los río abajo, y vamos los río abajo equipo
concentrado en su propio trabajo sin constantemente supervisión los río arriba equipo.

En a relé raza, los hacia adelante corredor hipocresía ser mirando hacia atrás todos los hora,
comprobación. Él o ella tiene que ser capaz de confiar en el portador del bastón para hacer el
traspaso con precisión, o de lo contrario el equipo estará desesperadamente ralentizado abajo.


Ejemplo
Análisis de rendimiento versus Reserva

Atrás para nuestro fiel Envío ejemplo. A muy especializado equipo posee estado colocar arriba
para analizar todos las reservas que flujo a través de los firma, para ver cómo para maximizar
ingreso. Equipo miembros puede que encuentra eso buques tener vacío espacio y puede que
recomendar más sobreventa Ellos puede que encontrar que los barcos se están llenando
temprano con carga a granel, lo que obliga a la empresa a rechazar especialidades más
lucrativas cargamentos En que caso ellos puede que recomendar reservando espacio por estas
tipos de carga o levantando precios en los a granel transporte.

Para hacer esta análisis, ellos utilizar sus propio complejo modelos Para implementación, ellos
utilizar a almacén de datos con herramientas por edificio analítico modelos Y ellos necesitar un
montón de información desde la reserva solicitud.

Desde el principio, está claro que se trata de dos C ONTEXTOS LÍMITES , porque utilizan una
implementación diferente herramientas y, más importante, diferente dominio modelos Qué
deberían los relación entre ellos ¿ser?

UN KERNEL C OMPARTIDO puede parecer lógico, porque el análisis de rendimiento está interesado
en un subconjunto de Booking modelo, y sus propio modelo posee algunos superposición
conceptos de cargas, precios, y entonces en. Pero SHARED KERNEL es difícil en un caso en el que
se utilizan diferentes tecnologías de implementación. Además, las necesidades de modelado del
equipo de análisis de rendimiento son bastante especializadas y continuamente juegan con sus
modelos y prueban otros alternativos. Es mejor que traduzcan qué ellos necesitar desde los
Reserva C ONTEXTO en sus propio. (En los otro mano, si pueden usar un NÚC LEO C OMPARTIDO , su
carga de traducción será mucho más ligera. Todavía tendrán que volver a implementar los
modelo y traducir los datos para los nuevo implementación, pero si los modelo es lo mismo, los
transferir deberían ser sencillo.)

los Reserva solicitud posee no dependencia en los producir análisis, porque allí es no intención de
forma automática ajustando políticas Humano especialistas voluntad hacer los decisiones y
transmitir ellos para el necesario gente y sistemas Entonces nosotros tener un río arriba Río abajo
relación. Qué necesidades aguas abajo es esta:

1. Algunos datos no necesario por ninguna reserva operación

2. Algunos estabilidad en base de datos esquema (o en menos de confianza notificación de
cambiar) o un utilidad de exportación

Afortunadamente, el jefe de proyecto del equipo de desarrollo de la aplicación de reservas
está motivado para ayudar los producir análisis equipo. Esta pudo tener estado a problema,
porque los operaciones departamento que Realmente lo hace día a día reserva informes para a
diferente vicio presidente que los gente quien en realidad hacer producir análisis. Pero los
superior administración se preocupa profundamente sobre producir administración y, habiendo
visto problemas de cooperación anteriores entre los dos departamentos, estructuró el
desarrollo de software proyecto entonces que los proyecto gerentes de ambas cosas equipos
informe para los mismo persona.

Por lo tanto, se cumplen todos los requisitos para aplicar a los EQUIPOS DE DESARROLLO DE
C LIENTES/PROVEEDORES.

He visto evolucionar este escenario en varios lugares, donde los desarrolladores de software de
análisis y los desarrolladores de software de operaciones tenían una relación cliente/proveedor.
Cuando los miembros del equipo aguas arriba pensamiento de sus papel como servicio a cliente,
cosas trabajó fuera bonito bien. Eso era casi siempre organizado de manera informal, y en cada
caso funcionó tan bien como la relación personal de los dos proyecto gerentes

En un proyecto de XP, vi esta relación formalizada en el sentido de que, para cada iteración,
los representantes del equipo descendente jugaron el "juego de planificación" en el rol de
clientes, reuniéndose con los representantes de clientes más convencion ales (de la
funcionalidad de la aplicación) para negociar cual Tareas hecha eso dentro los iteración plan.
Esta proyecto era en a pequeña empresa, y entonces el más cercano compartido patrón era no
lejos arriba los cadena. Eso trabajó muy bien.

Los EQUIPOS DE C LIENTES/PROVEEDORES tienen más probabilidades de éxito si los dos equipos
trabajan bajo la misma dirección, de modo que, en última instancia, compartan objetivos o
dónde se encuentran en diferentes empresas que Realmente tener esos papeles Cuándo allí es
nada para motivar los río arriba equipo, los la situación es muy diferente. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Conformista

Cuando dos equipos con una relación upstream/downstream no están siendo dirigidos
efectivamente desde la misma fuente, un patrón cooperativo como EQUIPOS C LIENTE/PROVEEDOR
no va a funcionar. Ingenuamente difícil para aplicar eso voluntad obtener los río abajo equipo
dentro problema. Esta lata ser los caso en un grande empresa en cual los dos equipos están lejos
aparte en los administración jerarquía o donde el compartido supervisor es indiferente para los
relación de los dos equipos Eso además surge Entre equipos en diferente empresas Cuándo los
clientes negocio es no individualmente importante para los proveedor. Quizás el proveedor tiene
muchos clientes pequeños, o quizás el proveedor está cambiando la dirección del mercado y ya
no valora a los antiguos clientes. El proveedor puede estar mal administrado. puede tener
desaparecido fuera de negocio. Lo que los razón, los realidad es que los río abajo es en su propio.

Cuándo dos desarrollo equipos tener un río arriba Río abajo relación en cual el
upstream no tiene motivación para satisfacer las necesidades del equipo
downstream, el equipo downstream está indefenso. El altruismo puede motivar a los
desarrolladores upstream a hacer promesas, pero ellos están improbable para ser
cumplido. Creencia en esos bien intenciones Guías el equipo de aguas abajo para
hacer planes basados en funciones que nunca estarán disponibles. el río abajo
proyecto voluntad ser demorado Hasta que los equipo por último aprende para En Vivo
con qué está dado. Un interfaz adaptado para los necesidades de los río abajo equipo
es no en los tarjetas

En esta situación, allí están Tres posible caminos. Una es para abandonar utilizar de los río arriba
en total. Esta opción debe evaluarse de manera realista, sin asumir que el flujo ascendente se
adaptará a las necesidades del flujo descendente. A veces sobreestimamos el valor o
subestimamos el costo de tal a dependencia. Si los río abajo equipo decide para Corte los
instrumentos de cuerda, ellos están yendo su SEPARADO FORMAS (ver los patrón descripción luego
en esta capítulo).

A veces, el valor de usar el software anterior es tan grande que la dependencia tiene que ser

mantenido (o a político decisión posee estado hecha que los equipo no poder cambiar). En esta
caso, dos caminos permanecer abierto; los elección depende en los calidad y estilo de los río
arriba diseño. Si el diseño es muy difícil para trabajo con, quizás por carecer de encapsulación,
incómodo abstracciones, o modelado en a paradigma los equipo no poder utilizar, luego los río
abajo equipo voluntad todavía necesitar para desarrollar su propio modelo. Ellos voluntad tener
para llevar completo responsabilidad por a traducción capa que es probable para ser complejo
(Ver ANTI C ORRUPC ION C APA , luego en esta capítulo.).



En los otro mano, si los calidad es no entonces malo, y los estilo es razonablemente compatible,
luego eso quizás mejor para dar arriba en un independiente modelo en total. Esta es los
circunstancia que llamadas por un C ONFORMISTA .

Por lo tanto:

Elimine la complejidad de la traducción entre CONTEXTOS LIMITADOS adhiriéndose
servilmente al modelo del equipo ascendente. Aunque esto entorpece el estilo del
downstream diseñadores y probablemente lo hace no producir los ideal modelo por
los aplicación, elegir CONFORMITY simplifica enormemente la integración. Además,
compartirás un UBIQUITOUS IDIOMA con tu proveedor equipo. los proveedor es en los
del conductor asiento, entonces está bien para hacer comunicación fácil por ellos.
Altruismo mayo ser suficiente para obtener a ellos Cuota información con usted.

Esta decisión profundiza su dependencia del upstream y limita su aplicación a las
capacidades de los río arriba modelo- más puramente aditivo mejoras Eso es muy poco
atractivo emocionalmente, cual es por qué nosotros escoger eso menos con frecuencia que
nosotros probablemente deberían.

Si estas compensaciones están no aceptable, pero los río arriba dependencia es indispensable, los
segunda opción todavía restos: Aislar tú mismo como mucho como posible por creando un ANTI
C ORRUPC ION C APA , un agresivo Acercarse para implementar a traducción mapa que voluntad ser
discutido luego.


C ONFORMISTA se parece C OMPARTIDO NÚC LEO en que ambas cosas tener un superposición área
donde los modelo es el mismo, áreas donde tu modelo posee estado extendido por adición, y
áreas donde los otro modelo lo hace no afectar usted. los diferencia Entre los patrones es en
los Toma de decisiones y procesos de desarrollo. Donde el NÚC LEO C OMPARTIDO es una
colaboración entre dos equipos que coordinan estrechamente, C ONFORMISTA ofertas con
integración con a equipo que es no interesado en

Following Isn't Always Bad

When using an off-the-shelf component that has a large interface, you should typically
C ONFORM to the model implicit in that component. Because the component and the
application are clearly different BOUNDED C ONTEXTS , based on team organization and
control, adapters may be needed for minor format changes, but the model should be
equivalent. Otherwise, you should question the value of having the component. If it is
good enough to give you value, there is probably knowledge crunched into its design.
Within its narrow sphere, it may well be much more advanced than your own
understanding. Your model presumably extends beyond the scope of this component,
and your own concepts will evolve for those other parts. But where they connect, your
model is a C ONFORMIST, following the lead of the component's model. In effect, you
could be dragged into a better design.

When your interface with a component is small, sharing a unified model is less
essential, and translation is a viable option. But when the interface is large and
integration is more significant, it usually makes sense to follow the leader.

colaboración.

Hemos estado avanzando en un espectro de cooperación en la integración entre C ONTEXTOS
LÍMITES , desde NÚC LEO C OMPARTIDO altamente cooperativo o EQUIPOS DE DESARROLLADORES DE
C LIENTES/PROVEEDORES hasta la unilateralidad. de los C ONFORMISTA . Ahora bien llevar los final paso
para un incluso más pesimista vista de El relación, asumiendo ninguno de los dos cooperación ni a
usable diseño en los otro lado. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Capa Anticorrupción

Nuevo sistemas casi siempre tener para ser integrado con legado o otro sistemas, cual tener los
suyos modelos Traducción capas lata ser sencillo, incluso elegante, Cuándo puente bien diseñado
C ONTEXTOS LÍMITES con cooperativa equipos Pero Cuándo los otro lado de los Perímetro empieza
para fuga a través de traducción capa mayo llevar en a más defensivo tono.


Cuando se construye un nue vo sistema que debe tener una gran interfaz con otro, la
dificultad de relacionar los dos modelos puede eventualmente abrumar la intención
del nuevo modelo. en total, causando eso para ser modificado para asemejarse a los
otro del sistema modelo, en un anuncio hoc Moda. los modelos de legado sistemas
están generalmente débil, y incluso los excepción de que es bien desarrollado mayo no
encajar los necesidades de los Actual proyecto. Aún allí mayo ser mucho de valor en los
integración, y a veces eso es un absoluto requisito.

los responder es no para evitar todos integración con otro sistemas He estado en proyectos
donde gente con entusiasmo colocar fuera para reemplazar todos los legado, pero esta es sólo
también mucho para llevar en en una vez.
Además, la integración con los sistemas existentes es una forma valiosa de reutilización. En
un proyecto grande, un subsistema voluntad con frecuencia tener para interfaz con varios otro,
independientemente desarrollado subsistemas. Estas voluntad reflejar los problema dominio
diferentemente. Cuándo sistemas establecido en diferente modelos están combinados, los
necesitar por los nuevo sistema para adaptar para los semántica de los otro sistema lata dirigir a
un corrupción de los nuevo del sistema propio modelo. Incluso Cuándo los otro sistema es bien
diseñado, eso no es establecido en los mismo modelo como los cliente. Y con frecuencia los otro
sistema es no bien diseñado.

Hay muchos obstáculos en la interfaz con un sistema externo. Por ejemplo, la capa de
infraestructura deber proveer los medio para comunicar con otro sistema que puede que ser en a
plataforma diferente o usar protocolos diferentes. Los tipos de datos del otro sistema deben
traducirse a aquellos de tu sistema. Pero con frecuencia pasado por alto es los certeza que los
otro sistema lo hace no utilizar lo mismo conceptual dominio modelo.

Parece bastante claro que se producirán errores si toma algunos datos de un sistema y los
malinterpreta. eso en otro. Tú mayo incluso corrupto los base de datos. Pero incluso entonces,
esta problema tiende para acercarse sigilosamente a nosotros porque pensamos que lo que
estamos transportando entre sistemas son datos primitivos, cuyo sentido es inequívoco y deber
ser los mismo en ambas cosas lados Esta suposición es

generalmente mal. Las diferencias de significado sutiles pero importantes surgen de la forma
en que se asocian los datos en cada sistema. E incluso si los elementos de datos primitivos
tienen exactamente el mismo significado, eso es generalmente a error para hacer los interfaz
para los otro sistema funcionar en tal a nivel bajo. A nivel bajo interfaz toma fuera los energía
de los otro del sistema modelo para explicar los datos y restringen sus valores y relaciones,
mientras cargan al nuevo sistema con la carga de interpretar primitivo datos que es no en
condiciones de su propio modelo.

Nosotros necesitar para proveer a traducción Entre los partes que adherirse para diferente
modelos, entonces que los modelos están no corrompido con sin digerir elementos de
extranjero modelos

Por lo tanto:

Cree una capa de aislamiento para proporcionar a los clientes funcionalidad en
términos de su propio modelo de dominio. La capa se comunica con el otro sistema a
través de su interfaz existente, lo que requiere poco o no modificación para los otro
sistema. Internamente, los capa traduce en ambos direcciones como necesario Entre
los dos modelos


Esta discusión de a mecanismo para Enlace dos sistemas puede que traer para mente cuestiones
de transportando los datos desde una programa para otro o desde una servidor para otro. voy a
discutir los incorporación de El técnico comunicaciones mecanismo dentro de poco. Pero tal
detalles no debería ser confundido con una ANTIC ORRUPC IÓN C APA , cual es no a mecanismo por
enviando mensajes para otro sistema. Más bien, es a mecanismo que traduce conceptual objetos
y comportamiento desde una modelo y protocolo a otro.

Un ANTI C ORRUPC ION C APA lata volverse a complejo pedazo de software en su propio Correcto.
Próximo voy a esbozar algunos de los diseño consideraciones por creando una.


Diseño de la Interfaz de la CAPA A NTICORRUPCIÓN

La interfaz pública de la C APA ANTIC ORRUPCIÓN suele presentarse como un conjunto de SERVIC IOS
, aunque ocasionalmente puede adoptar la forma de una ENTIDAD . Construir una capa
completamente nueva responsable de la traducción entre la semántica de los dos sistemas nos
da la oportunidad de reabstraer el otro del sistema conducta y oferta su servicios y información
para nuestro sistema consecuentemente con nuestro modelo Puede que ni siquiera tenga
sentido, en nuestro modelo, representar el sistema externo como un solo componente. Eso
mayo ser mejor para utilizar múltiple SERVIC IOS (o de vez en cuando ENTIDADES ), cada de cual
posee un coherente responsabilidad en condiciones de nuestro modelo.


Implementando la A NTICORRUPCIÓN CAPA _

Una manera de organizando los diseño de los ANTI C ORRUPC ION C APA es como a combinación
de FAC HADAS , ADAPTADORES (ambas cosas desde Gama et Alabama. 1995 ), y traductores, a
lo largo de con los comunicación y transporte mecanismos generalmente necesario para
hablar Entre sistemas

Nosotros con frecuencia tener para integrar con sistemas que tener grande, Complicado, sucio
interfaces Esta es un problema de implementación, no un problema de diferencias de modelo
conceptual que motivó el uso de ANTIC ORRUPCIÓN C APAS , pero eso es a problema lo harás
encuentro difícil para crear ellos. Traductorio de un modelo a otro (especialmente si un modelo
es borroso) es un trabajo bastante difícil sin que simultáneamente relación comercial con a
subsistema interfaz que es duro para hablar para. Afortunadamente, que es que son las FAC HADAS
por.

A FAC HADA es un alternativa interfaz por a subsistema que simplifica acceso por los cliente y hace

los subsistema más fácil para utilizar. Porque nosotros saber exactamente qué funcionalidad de
los otro sistema queremos para utilizar, nosotros lata crear a FAC HADA que facilita y
aerodinamiza acceso para esos caracteristicas y esconde el resto. La FAC HADA no cambia el
modelo del sistema subyacente. debería estar escrito estrictamente en conformidad con los
otro del sistema modelo. De lo contrario, usted voluntad en mejor responsabilidad difusa por
traducción dentro múltiple objetos y sobrecarga los FAC HADA y en peor final creando aún otro
modelo, una que no pertenecer para los otro sistema o tu propio C ONTEXTO LÍMITE . La FAC HADA
pertenece al C ONTEXTO ALIMITADO del otro sistema. Simplemente presenta una forma más
amigable. rostro especializado por tu necesidades.

Un ADAPTADOR es a envoltura que permite a cliente para utilizar a diferente protocolo que que
entendido por el ejecutor de la conducta. Cuando un cliente envía un mensaje a un ADAPTADOR ,
se convierte en un mensaje semánticamente equivalente y se envía al "adaptado". La respuesta
se convierte y se pasa. espalda. Yo soy utilizando los término adaptador a poco flojamente,
porque los énfasis en Gama et Alabama.
1995 es en haciendo a envuelto objeto ajustarse para a estándar interfaz que clientela suponer,
mientras que podemos elegir la interfaz adaptada, y el adaptado probablemente ni siquiera
sea un objeto. nuestro énfasis es en traducción Entre dos modelos, pero I pensar esta es
consistente con los intención de ADAPTADOR .

Para cada SERVIC IO nosotros definir, nosotros necesitar un ADAPTADOR que apoya los SERVIC IOS
interfaz y Sabe cómo para hacer equivalente peticiones de los otro sistema o su FAC HADA .

los restante elemento es los traductor. los ADAPTADOR trabajo es para saber cómo para hacer a
solicitud. El actual conversión de conceptual objetos o datos es a distinto, complejo tarea que lata
ser metido en su propio objeto, haciendo ellos ambas cosas mucho más fácil para comprender. A
traductor lata ser a ligero objetar que es instanciado Cuándo necesario. Eso necesidades no
estado y lo hace no necesitar para ser repartido, porque Pertenece con los ADAPTADOR(ES) eso
sirve

Esos están los básico elementos I utilizar para crear un ANTI C ORRUPC ION C APA . Ahí están a
pocos Otras Consideraciones.

Típicamente, los sistema bajo diseño (tu subsistema) voluntad ser iniciando acción, como
implícito por la figura 14.8 . Sin embargo, hay casos en los que el otro subsistema puede
necesitar solicitar algo de su subsistema o notificarle algún evento. Una C APA
ANTIC ORRUPC IÓN puede ser bidireccional, definiendo SERVIC IOS en ambas cosas interfaces
con sus propio ADAPTADORES , potencialmente utilizando los mismos traductores con
traducciones simétricas. Si bien la implementación de la ANTIC ORRUPC IÓN C APA no
generalmente exigir ninguna cambiar para los otro subsistema, eso puede que ser necesario
en pedido para hacer los otro sistema llamada en SERVIC IOS de los ANTI C ORRUPC ION C APA .


Figura 14.8. La estructura de una CAPA ANTICORRUPCIÓN

Por lo general, necesitará algún mecanismo de comunicación para conectar los dos
subsistemas, y pudo bien ser en separar servidores. En esta caso, usted tener para decidir
donde para lugar estas comunicaciones Enlaces. Si usted tener no acceso para los otro
subsistema, usted mayo tener para poner los

enlaces entre la FAC HADA y el otro subsistema. Sin embargo, si la FAC HADA se puede integrar
directamente con el otro subsistema, entonces una buena opción es poner el enlace de
comunicación entre los ADAPTADOR y FAC HADA , porque los protocolo de los FAC HADA es
presumiblemente más simple que qué eso cubre Ahí además voluntad ser casos donde los
completo ANTI C ORRUPC ION C APA lata vivir con los otro subsistema, colocación comunicación
Enlaces o distribución mecanismos entre tu subsistema y los SERVIC IOS que hacer arriba los
ANTI C ORRUPC ION C APA _ interfaz. Estas son decisiones de implementación y despliegue
que deben tomarse pragmáticamente. no tienen ninguna influencia en los conceptual
papel de los ANTI C ORRUPC ION C APA .

Si usted hacer tener acceso para los otro subsistema, usted mayo encontrar que a poco
refactorización Por ahí lata hacer tu trabajo más fácil. En especial, tratar para escribe
más explícito interfaces por la funcionalidad lo harás ser utilizando, a partir de con
automatizado pruebas, si posible.

Donde integración requisitos están extenso, los costo de traducción va manera arriba. Eso
mayo ser necesario para hacer elecciones en los modelo de los sistema bajo diseño que
mantenerse eso más cerca para el sistema externo, para facilitar la traducción. Hágalo con
mucho cuidado, sin comprometer la integridad del modelo. Solo es algo que se puede
hacer selectivamente cuando la dificultad de traducción se sale de control. Si este enfoque
parece la solución más natural para muchas de los importante parte de los problema,
considerar haciendo tu subsistema a patrón C ONFORMISTA , eliminando traducción.

Si el otro subsistema es simple o tiene una interfaz limpia, es posible que no necesite el
FAC ADE .

Funcionalidad lata ser agregado para los ANTI C ORRUPC ION C APA si eso es específico para los
relación de El dos subsistemas _ Un auditoría rastro por utilizar de los externo sistema o
rastro lógica por depurando el llamadas para los otro interfaz están dos útil caracteristicas
que venir para mente.

Recordar, un ANTI C ORRUPC ION C APA es a medio de enlace dos ENC ERRADO C ONTEXTOS .
Ordinariamente, estamos pensando en un sistema creado por otra persona; tenemos una
comprensión incompleta del sistema y poco control sobre eso. Pero que es no los solamente
situación donde usted necesitar a poco relleno entre subsistemas. Incluso hay situaciones en las
que tiene sentido conectar dos subsistemas de diseño propio con una C APA ANTIC ORRUPCIÓN , si
se basan en modelos diferentes. Presumiblemente, en tal a caso, usted voluntad tener completo
control sobre ambas cosas lados y típicamente lata use una capa de traducción simple. Sin
embargo, si dos C ONTEXTOS LÍMITES se han ido POR C AMINOS SEPARADOS pero todavía tienen
alguna necesidad de integración funcional, una C APA ANTIC ORRUPCIÓN puede reducir la fricción
entre ellos.


Ejemplo
La reserva del legado Solicitud

En pedido para tener a pequeña, rápido primero liberar, nosotros voluntad escribe a mínimo
solicitud que lata colocar arriba un envío y luego pasarlo al sistema heredado a través de una capa
de traducción para reserva y soporte operaciones. Porque nosotros construido los traducción capa
específicamente para proteger nuestro modelo en desarrollo desde los influencia de los legado
diseño, esta traducción es un ANTI C ORRUPC ION C APA .

Inicialmente, los ANTI C ORRUPC ION C APA voluntad aceptar los objetos representando a envío,
convertir páselos al sistema heredado y solicite una reserva, y luego capture la confirmación y
vuelva a traducirla al objeto de confirmación del nuevo diseño. Este aislamiento nos permitirá
desarrollar nuestro nuevo solicitud principalmente independientemente de los viejo una, aunque
bien tener para invertir bastante poco en traducción.

Con cada sucesivo liberar, los nuevo sistema lata cualquiera llevar sobre más funciones de los
legado o simplemente agregue un nuevo valor sin reemplazar las capacidades existentes,
dependiendo de las decisiones posteriores. Esta flexibilidad y la capacidad de operar

continuamente el sistema combinado mientras se realiza una transición gradual, probablemente
hace eso valor los gastos para construir los ANTI C ORRUPC ION C APA .

Un cuento de advertencia

Para proteger sus fronteras desde redadas por vecino nómada guerrero tribus, los temprano
chino construyó la Gran Muralla. No era una barrera impenetrable, pero permitía un comercio
regulado con los vecinos al mismo tiempo que impedía la invasión y otras influencias no
deseadas. Durante dos mil años definió un límite que ayudó a la civilización agrícola china a
definirse con menos ruptura desde los caos fuera de.

Aunque China podría no haberse convertido en una cultura tan distinta sin la Gran Muralla, la
construcción del Muro era inmensamente caro y arruinado en menos una dinastía, probablemente
contribuyendo a su otoño. los beneficios de aislamiento estrategias deber ser equilibrado en
contra sus costos Ahí es a hora de ser pragmático y hacer Medido revisiones para los modelo,
entonces que eso lata encajar más suavemente con extranjero unos.

Ahí es gastos generales involucrado en ninguna integración, desde en el pleno C ONTINUO
INTEGRAC IÓN en el interior a C ONTEXTO LÍMITE único , a través de los compromisos menores de
NÚC LEO C OMPARTIDO o EQUIPOS DE DESARROLLADORES DE C LIENTE/PROVEEDOR , a la unilateralidad del
C ONFORMISTA y la postura defensiva del ANTIC ORRUPCIÓN C APA . Integración lata ser muy valioso,
pero eso es siempre caro. Nosotros deberían estar seguro eso es De Verdad necesario. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Caminos separados

Nosotros deber sin piedad alcance requisitos Dos conjuntos de funcionalidad con no
relación indispensable lata ser Corte suelto desde cada otro.


La integración siempre es costosa. A veces el beneficio es pequeño.

Además del gasto habitual de coordinar equipos, la integración obliga a compromisos. Lo
simple especializado modelo que lata satisfacer a especial necesitar deber dar manera para los
más modelo abstracto que lata encargarse de todos situaciones Quizás algunos completamente
diferente tecnología pudo proporcionar ciertos caracteristicas muy fácilmente, pero eso es difícil
para integrar. Quizás algunos equipo es sólo entonces duro para llevarse bien con que nada
obras muy bien Cuándo otro equipos tratar para colaborar con ellos.

En muchos circunstancias, integración proporciona no significativo beneficio. Si dos funcional
partes hacer no llamar sobre cada otros funcionalidad, o exigir interacciones Entre objetos que
están tocado Por ambos, o Cuota datos durante sus operaciones, luego integración, incluso a
través de a traducción capa, mayo no ser necesario. Sólo porque caracteristicas están
relacionados en a utilizar caso lo hace no significar ellos debe ser integrado.

Por lo tanto:

Declarar a ENCERRADO CONTEXTO para tener no conexión para los otros en
todos, permitiendo a los desarrolladores para encontrar sencillo,
especializado soluciones dentro de esta pequeña alcance.

los caracteristicas lata todavía ser organizado en software intermedio o los interfaz de usuario
capa, pero allí voluntad ser no intercambio de lógica, y un absoluto mínimo de datos transferir
a través de traducción capas—preferiblemente ninguna.


Ejemplo
Un proyecto de seguros adelgaza Abajo

Una proyecto equipo tenido colocar fuera para desarrollar nuevo software por seguro
reclamación (es que haría integrar en una sistema todo a cliente Servicio agente o a
reclamación (es ajustador necesario. Después a año de esfuerzo, los miembros del equipo
estaban atascados. Una combinación de parálisis de análisis y una gran inversión inicial en
infraestructura los había dejado sin nada que mostrar una gerencia cada vez más impaciente.
Más seriamente, los alcance de qué ellos fueron difícil para hacer era agobiante ellos.

Un nuevo gerente de proyecto obligó a todos a estar en una habitación durante una semana
para formar un nuevo plan. Primero hicieron listas de requisitos y trataron de estimar su
dificultad y asignarles importancia. Cortaron sin piedad los difíciles y sin importancia. Luego
comenzaron a poner orden en el resto lista. Muchos inteligente decisiones fueron hecha en que
habitación que semana, pero en los final, solamente uno se volvió fuera para ser importante. En
algunos punto eso era Reconocido que allí fueron algunos caracteristicas para los cuales la
integración proporcionó poco valor agregado. Por ejemplo, los ajustadores necesitaban
acceso a algunas bases de datos existentes y su acceso actual era muy inconveniente. Pero,
aunque los usuarios necesitaban para tener esta datos, ninguna de los otro caracteristicas de
los propuesto software sistema haría úsalo _

Equipo miembros propuesto varios formas de Proporcionar fácil acceso. En una caso, a llave
informe podría ser exportado como HTML y metido en los intranet. En otro caso, ajustadores pudo
ser proporcionó con una consulta especializada escrita utilizando un paquete de software
estándar. Todas estas funciones se pueden integrar por organizando Enlaces en un intranet
página o por colocación botones en los del usuario escritorio.

los equipo lanzado a colocar de pequeña proyectos que intentó no más integración que
lanzamiento del mismo menú. Varias capacidades valiosas se entregaron ca si de la noche a la
mañana. Dejar el equipaje de estas extraño caracteristicas izquierda a destilado colocar de
requisitos que pareció por a tiempo dar esperar por entrega de los principal solicitud.

Podría haber sido así, pero desafortunadamente el equipo volvió a caer en viejos hábitos. ellos
paralizaron ellos mismos otra vez. En los final, sus solamente legado convertido fuera para ser
esos pequeña aplicaciones que tenido desaparecido sus SEPARAR MANERAS .


Tomando SEPARAR FORMAS excluye algunos opciones Aunque continuo refactorización lata
eventualmente deshacer cualquier decisión, es difícil fusionar modelos que se han
desarrollado en completo aislamiento. Si la integración resulta necesaria después de todo,
las capas de traducción serán necesarias y pueden ser complejas. De curso, esta es algo
usted voluntad rostro de todos modos.

Ahora, torneado espalda para más cooperativa relaciones, vamos Mira en formas para escala
arriba integración. . . . [ Equipo LiB ]

[ Equipo LiB ]


Servicio de anfitrión abierto
Típicamente por cada ENC ERRADO C ONTEXTO , usted voluntad definir a traducción capa por cada
componente fuera del C ONTEXTO con el que te tienes que integrar. Cuando la integración es
única, este enfoque de insertar una capa de traducción para cada sistema externo evita la
corrupción de los modelos con un costo mínimo. Pero cuando encuentre que su subsistema
tiene una gran demanda, es posible que necesite un sistema más flexible Acercarse.


Cuándo a subsistema posee para ser integrado con muchos otros, personalizando a
traductor para cada lata pantano abajo los equipo. Ahí es más y más para mantener, y
más y Mas a preocuparse sobre Cuándo cambios están hecha.

El equipo puede estar haciendo lo mismo una y otra vez. Si hay alguna coherencia en el
subsistema, eso es probablemente posible para describir eso como a colocar de SERVIC IOS que
cubrir los común Necesidad de otro subsistemas.

Eso es a lote más difícil para diseño a protocolo limpio suficiente para ser entendido y usado por
múltiple equipos, entonces eso paga apagado solamente Cuándo los subsistema recursos lata
ser descrito como a cohesivo colocar de SERVIC IOS y Cuándo allí están a significativo número de
integraciones. Bajo esos circunstancias, eso lata hacer el diferencia Entre mantenimiento modo y
continuo desarrollo.

Por lo tanto:

Defina un protocolo que dé acceso a su subsistema como un conjunto de SERVICIOS .
Abre el protocolo entonces que todos quién necesitar para integrar con usted lata
utilizar eso. Mejorar y expandir el protocolo para manejar nuevos requisitos de
integración, excepto cuando un solo equipo tiene necesidades idiosincrásicas. Luego,
use un traductor único para aumentar el protocolo para ese especial caso entonces
que los compartido protocolo lata Quédate sencillo y coherente.


Esta formalización de la comunicación implica algún modelo de vocabulario compartido, la
base del SERVIC IO interfaces Como a resultado, los otro subsistemas volverse acoplado para los
modelo de los ANFITRIÓN ABIERTO , y otro equipos están forzado para aprender los especial
dialecto usado por los ANFITRIÓN equipo. En algunas situaciones, utilizando a bien conocido
PUBLIC ADO IDIOMA como los intercambio modelo lata reducir acoplamiento y facilitar
comprensión. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Idioma publicado
La traducción entre los modelos de dos C ONTEXTOS LÍMITES requiere un lenguaje común.


Cuándo dos dominio modelos deber coexistir y información deber pasar Entre ellos, los traducción proceso
en sí lata volverse complejo y duro para documento y comprender. Si nosotros están edificio a nuevo
sistema, nosotros normalmente creerá que nuestro nuevo modelo es el mejor disponible, por lo que
pensaremos en términos de traducir directamente dentro eso. Pero a veces nosotros están mejorando a
colocar de más viejo sistemas y difícil para integrar ellos.
Elegir un modelo desordenado sobre otro puede ser elegir el menor de dos males.

Otro situación: Cuándo negocios querer para intercambio información con una otro, cómo hacer ellos
hacer ¿eso? No solamente es eso poco realista para suponer una para adoptar los dominio modelo de los
otro, eso mayo ser indeseable para ambas partes. Se desarrolla un modelo de dominio para resolver
problemas para sus usuarios; tal modelo puede contener características que innecesariamente
complicar comunicación con otro sistema. También, si los modelo subyacente una de las aplicaciones se
utiliza como medio de comunicación, no se puede cambiar libremente para satisfacer nuevas
necesidades, pero deber ser muy estable para apoyo los en curso comunicación papel.

Directo traducción para y desde los existente dominio modelos mayo no ser a bien solución.
esos modelos mayo ser demasiado complejo o mal factorizado. Ellos están probablemente
indocumentado Si una se usa como a datos intercambio idioma, eso esencialmente se
convierte congelado y no poder responder para nuevo desarrollo necesidades.

los ABIERTO ANFITRIÓN SERVIC IO usos a estandarizado protocolo por multipartidario integración. Eso emplea
a modelo de el dominio por intercambio Entre sistemas, incluso aunque que modelo mayo no ser usado
internamente por esos sistemas. Aquí nosotros ir a paso más y publicar que idioma, o encontrar una que
es ya publicado. por publicar I simplemente significar que los idioma es fácilmente disponible para los
comunidad que puede que ser interesado en usar eso, y es suficientemente documentado para permitir
independiente interpretaciones para ser compatible.

Hace poco, los mundo de comercio electrónico posee volverse muy emocionado sobre a nuevo
tecnología: Extensible Markup Language (XML) promete hacer que el intercambio de datos sea mucho
más fácil. Una característica muy valiosa de XML es que, a través de la definición de tipo de
documento (DTD) o a través de esquemas XML, XML permite la definición formal de a especializado
dominio idioma dentro cual datos lata ser traducido. Industria grupos tener comenzado a formulario por
los propósito de definiendo a único estándar DTD por sus industria entonces que, decir, químico
información de la fórmula o genético codificación lata ser comunicado Entre muchos fiestas.
Esencialmente estas grupos están creando a compartido dominio modelo en los formulario de a idioma
definición.

Por lo tanto:

Utilizar a bien documentada compartido idioma que lata Rápido los necesario dominio
información como un común medio de comunicación, traductorio como necesario dentro y
fuera de que idioma.

los idioma no tener para ser creado desde rasguño. Muchos años atrás, I era contratado por a empresa
que tenido a software producto escrito en Charla que usado DB2 para Tienda su datos. los empresa
querido la flexibilidad para distribuir los software para usuarios sin a DB2 licencia y contratado me para
construir un interfaz para recuperar, a peso más ligero base de datos motor que tenido a gratis tiempo de
ejecución distribución licencia. btrieve es no completamente relacional, pero mi cliente estaba usando
solo una pequeña parte del poder de DB2 y estaba dentro del mínimo común denominador de los dos
bases de datos los de la empresa desarrolladores tenido construido en cima de DB2 algunos
abstracciones que eran en términos de almacenamiento de objetos. Decidí usar este trabajo como

interfaz para mi componente Btrieve.

.E
Esta Acercarse hizo trabajo. los software suavemente integrado con mi clientela sistema. Sin embargo, los
carecer de formal especificación o documentación de los abstracciones de persistente objetos en los
clientela diseño significó mucho trabajo para mí averiguar los requisitos del nuevo componente.
Además, no había muchas oportunidades para reutilizar los componente para emigrar algunos otro
solicitud desde DB2 para Btrieve Y los nuevo software más profundamente atrincherado los de la
empresa modelo de persistencia, entonces que refactorización que modelo de persistente objetos haría
tener estado incluso más difícil.

A mejor manera puede que tener estado para identificar los subconjunto de los DB2 interfaz que los
empresa era utilizando y luego apoyo que. los interfaz de DB2 es hecha arriba de sql y a número de
propiedad protocolos
Aunque eso es muy complejo, los interfaz es estrechamente especificado y minuciosamente
documentado. los la complejidad sería tener estado mitigado porque solamente a pequeña subconjunto
de los interfaz era siendo usado. Si a desarrollado un componente que emulaba el subconjunto necesario
de la interfaz de DB2, podría haber sido muy eficaz documentado por desarrolladores simplemente por
identificando los subconjunto. los solicitud eso era integrado en ya supo cómo para hablar para DB2,
entonces poco adicional trabajo haría tener estado necesario. Futuro rediseñar de El persistencia capa
haría tener estado constreñido solamente para los utilizar de los DB2 subconjunto, sólo como antes de la
mejora

La interfaz de DB2 es un ejemplo de un IDIOMA PUBLIC ADO . En este caso, los dos modelos no están en
el negocio. dominio, pero todos los principios aplicar sólo los mismo. Porque una de los modelos en los la
colaboración es ya a PUBLIC ADO IDIOMA , allí es no necesitar para introducir a tercera idioma.


Ejemplo
L ENGUAJE AP UBLIZADO para Química

Innumerable programas están usado para catalogar, analizar, y manipular químico fórmulas en industria
y academia. El intercambio de datos siempre ha sido difícil, porque casi todos los programas usan un
dominio diferente modelo para representar químico estructuras Y de curso, más de ellos están escrito en
idiomas, tales como FORTRAN, que hacer no Rápido los dominio modelo muy completamente de todos
modos. Cuando sea alguien querido para compartir datos, tenían que desentrañar los detalles de la
base de datos del otro sistema y elaborar algún tipo de traducción esquema.

Ingresar los Químico Margen Idioma (LMC), a dialecto de XML destinado a como a común intercambio
lenguaje para esta dominio, desarrollado y administrado por a grupo representando académica y industria
( Murray-Rust et al. 1995 ).

Químico información es muy complejo y diverso, y eso cambios todos los hora con nuevo
descubrimientos Entonces ellos desarrollado a idioma que pudo describir los lo esencial, tal como los
químico fórmulas de orgánico e inorgánicos moléculas, proteína secuencias, espectros, o físico
cantidades.

Ahora que los idioma posee estado publicado, herramientas lata ser desarrollado que haría Nunca tener
estado valor el problema para escribe antes de, Cuándo ellos haría tener solamente estado usable por
una base de datos. Para ejemplo, a aplicación java, llamado los JUMBO Navegador, era desarrollado que
crea gráfico puntos de vista de químico estructuras almacenadas en LMC. Entonces si usted poner tu
datos en los LMC formato, lo harás tener acceso para tal visualización herramientas.

En hecho, LMC ganado a doble ventaja por utilizando xml, a clasificar de "publicado metalenguaje." los
curva de aprendizaje de LMC es aplanado por de la gente familiaridad con XML; los implementación es
aliviado por varios herramientas estándar, como analizadores; y la documentación es ayudad a por los
muchos libros escritos sobre todos los aspectos del manejo XML.

Aquí es a diminuto muestra de LMC. Eso es solamente vagamente inteligible para no especialistas me
gusta yo mismo, pero los principio es claro.

[Ver ancho completo]
<CML.ARR ID="matriz3" EL.TIPO=FLOTANTE NOMBRE="ATÓMICO ORBITAL ELECTRÓN POBLACIONES"

TAMAÑO=30 GLO NT=CML.EL.AOEPOPS>

1.17947 0.95091 0.97175 1.00000 1.17947 0.95090 0.97174 1.00000
1.17946 0.98215 0.94049 1.00000 1.17946 0.95091 0.97174 1.00000
1.17946 0.95091 0.97174 1.00000 1.17946 0.98215 0.94049 1.00000
0.89789 0.89790 0.89789 0.89789 0.89790 0.89788

</CML.ARR>




[ Equipo LiB ]

[ Equipo LiB ]


unificando un
elefante

Fueron seis hombres de
Indostán muy inclinados a
aprender,
Quien fue a ver al Elefante
(Aunque todos de ellos fueron
ciego), que cada por
observación
Podría satisfacer su mente.

los Primero se acercó los elefante,
y sucediendo para otoño
En contra su amplio y robusto
lado, en una vez comenzó para
gritar:
"Dios bendecir ¡me! pero los
elefante es muy me gusta a
¡muro!"
. . .

los Tercera se acercó los
animales, y sucediendo para
llevar
los retorciéndose maletero dentro de
su manos, así valientemente arriba y
habló:
"I ver," dicho de una cosa él,
"los elefante es muy me gusta
a serpiente."

los Cuatro alcanzado fuera su
entusiasta mano y sintió sobre los
rodilla.
"Qué más esta maravilloso bestia es
como es poderoso simple," dicho de
una cosa él;
"Es claro suficiente los elefante
es muy me gusta a ¡árbol!"
. . .

los Sexto no cuanto antes
tenido comenzado Acerca de
los bestia para ir a tientas,
Que, apoderarse en los balanceo
cola que cayó dentro de su
alcance,
"I ver," dicho de una cosa él,
"los elefante es muy me gusta
a ¡cuerda!"

Y entonces estas hombres de
Indostán en disputa ruidoso

y largo,
Cada uno en su propia opinión
Excediendo rígido y fuerte,
Aunque cada era parcialmente en
los Derecha y todos fueron en los
¡incorrecto!
. . .

— Desde "Los Ciego Hombres y los Elefante," por Juan Godofredo Sajonia (1816–1887),
establecido en una historia en los udana , a hindú texto

Dependiendo de sus objetivos al interactuar con el elefante, es posible que los distintos ciegos
aún puedan

para hacer Progreso, incluso si ellos no completamente estar de acuerdo en los naturaleza de
los elefante. Si no integración es requerido, luego eso no importar que los modelos están no
unificado Si ellos exigir algunos integración, ellos mayo no Realmente tener para estar de
acuerdo en qué un elefante es, pero ellos voluntad obtener a lote de valor de simplemente
reconociendo que ellos no estar de acuerdo. Esta manera, en menos ellos no sin saberlo hablar
en propósitos cruzados.

los diagramas en Figura 14.9 están UML representaciones de los modelos los ciego hombres tener
formado del elefante Habiendo establecido C ONTEXTOS LÍMITES separados , la situación es lo
suficientemente clara para ellos. para trabajo fuera a manera para comunicar con cada otro sobre
los pocos aspectos ellos cuidado sobre en común: los ubicación de los elefante, quizás.


Figura 14.9. Cuatro contextos: sin integración


Figura 14.10. Cuatro contextos: integración mínima

Como los ciego hombres querer para Cuota más información sobre los elefante, los valor de
intercambio a solo LÍMITE C ONTEXTO va arriba. Pero unificando los dispar modelos es a desafío.
Ninguna de ellos es probablemente dar arriba su modelo y adoptar una de los otros. Después
todos, los hombre quién tocado los cola conoce el elefante es no me gusta a árbol, y que modelo
haría ser sin sentido y inútil para él. Unificando múltiples modelos casi siempre medio creando a
nuevo modelo.

Con algunos imaginación y continuado discusión (probablemente calentado), los ciego hombres
pudo eventualmente reconocer que ellos tener estado describiendo y modelado diferente partes
de a más grande entero. Para muchos propósitos, a parte-todo unificación mayo no exigir mucho
adicional trabajo. En menos los primero escenario de integración solo requiere averiguar cómo se
relacionan las partes. Puede ser adecuado para algunas necesidades. para vista un elefante
como a muro, sostuvo arriba por árbol bañador, con a cuerda en una final y a serpiente en el otro.


Figura 14.11. Un contexto: integración cruda

los unificación de los varios elefante modelos es más fácil que más tal fusiones
Desafortunadamente, es la excepción cuando dos modelos describen puramente diferentes
partes del todo, aunque esto es a menudo una aspecto de los diferencia. Asuntos están más
difícil Cuándo dos modelos están mirando en lo mismo parte en a diferente manera. Si dos
hombres tenido tocado los maletero y una descrito eso como a serpiente y los otro descrito eso
como a fuego manguera, ellos haría tener tenido más dificultad. Ninguno de los dos lata aceptar
el otros modelo, porque eso contradice su propio experiencia. En hecho, ellos necesitar a nuevo
abstracción que incorpora los "viveza" de a serpiente con los tiro al agua funcionalidad de a
fuego manguera, pero que deja de lado las implicaciones inapropiadas de los primeros
modelos, como la expectativa de colmillos posiblemente venenosos, o la capacidad de
separarse del cuerpo y enrollarse en un compartimento en a fuego camión.

Aunque hemos combinado las partes en un todo, el modelo resultante es tosco. es incoherente,
carente ninguna sentido de siguiente contornos de un subyacente dominio. Nuevo perspectivas
podría llevar para a Más adentro modelo en a proceso de continuo refinamiento. Nuevo solicitud
requisitos puede también fuerza los moverse para a Más adentro modelo. Si los elefante empieza
Moviente, los "árbol" teoría es fuera, y nuestro ciego modeladores mayo descanso a través de
para los concepto de "piernas."


Figura 14.12. Un contexto: modelo más profundo

Este segundo paso de integración de modelos tiende a desprenderse de aspectos incidentales
o incorrectos de los modelos individuales y crea nuevos conceptos, en este caso, "animal" con
partes "trompa", "pata", "cuerpo" y "cola", cada uno del cual tiene sus propias propiedades y
claras relaciones con otras partes. Exitoso modelo unificación, para a grande grado, bisagras en
minimalismo Un elefante maletero es ambos más y menos que a serpiente, pero los "menos" es
probablemente más importante que los "más." Mejor faltar los arrojando agua capacidad que
para tener un incorrecto colmillo venenoso rasgo.

Si el objetivo es simplemente encontrar el elefante, entonces traducir entre la expresión de
cada modelo de

ubicación voluntad hacer. Cuándo más integración es necesario, los unificado modelo no tener
para alcanzar plena madurez en los primero versión. Eso mayo ser adecuado por algunos
necesidades para vista un elefante como a pared, sostenida arriba por árbol bañador, con a
cuerda en una final y a serpiente en los otro. Luego, impulsado por nuevos requisitos y por
mejorado comprensión y comunicación, los modelo lata ser profundizado y refinado.

reconociendo múltiple, chocando dominio modelos es De Verdad sólo frente a realidad. Por
explícitamente definiendo un contexto dentro de cual cada modelo aplica, usted lata mantener los
integridad de cada y claramente ver las implicaciones de cualquier interfaz particular que desee
crear entre los dos. No hay forma de que los ciegos vean el elefante completo, pero su
problema sería manejable si tan solo reconocieran los incompletitud de sus percepción.

[ Equipo LiB ]

[ Equipo LiB ]


Elección de la estrategia de contexto de su modelo
Eso es importante siempre para dibujar los C ONTEXTO MAPA para reflejar los Actual situación en
ninguna dado hora. Una vez eso es hecho, aunque, usted mayo muy bien querer para cambiar
que realidad. Ahora usted lata empezar conscientemente escoger C ONTEXTO límites y relaciones
Aquí están algunos pautas.


Decisión del equipo o Más alto

Primero, los equipos tienen que tomar decisiones sobre dónde definir C ONTEXTOS LÍMITES y qué
tipo de relaciones para tener Entre ellos. equipos tener para hacer estas decisiones, o en menos
los las decisiones tienen que ser propagadas a todo el equipo y entendidas por todos. De hecho,
tales decisiones a menudo involucran acuerdos más allá de su propio equipo. En cuanto a los
méritos, las decisiones sobre si expandir o dividir los C ONTEXTOS LIMITADOS deben basarse en el
equilibrio costo-beneficio entre el valor de la acción independiente del equipo y el valor de la
integración rica y directa. En la práctica, las relaciones políticas entre equipos a menudo
determinan cómo se integran los sistemas. Una unificación técnicamente ventajosa puede ser
imposible debido a la estructura de informes. La gerencia puede dictar un pesado fusión. Tú no
lo haré siempre obtener qué usted querer, pero en menos usted mayo ser poder evaluar y
comunicar algo de los costo incurrido, y llevar pasos para mitigar eso. Comienzo con un realista
C ONTEXTO MAPA y ser pragmático en eligiendo transformaciones.


Poniéndonos en Contexto

Cuándo nosotros están trabajando en a software proyecto, nosotros están interesado ante todo
en los partes de los nuestro equipo está cambiando (el "sistema en diseño") y, en segundo
lugar, en los sistemas con los que se comunicará. En un caso típico, el sistema bajo diseño se
dividirá en uno o dos ENC ERRADO C ONTEXTOS que los principal desarrollo equipos voluntad ser
trabajando en, quizás con otro C ONTEXTO o dos en un papel de apoyo. Además de eso, están las
relaciones entre estos C ONTEXTOS y los externo sistemas Esta es a sencillo, típico vista, para dar
algunos áspero expectativa por qué usted están probable para encuentro.

Nosotros De Verdad están parte de que primario C ONTEXTO nosotros están trabajando en, y que
es ligado para ser reflejado en nuestro C ONTEXTO MAPA . Esta no es a problema si nosotros están
consciente de los parcialidad y están consciente de de Cuándo nosotros salir los limites de que
MAPAS aplicabilidad.


transformando Límites

Ahí están un ilimitado variedad de situaciones y un ilimitado número de opciones por dibujo los
límites de los C ONTEXTOS LIMITADOS . Pero típicamente la lucha es equilibrar algún subconjunto de
los siguientes efectivo:


Favorecer C ONTEXTOS LÍMITES MÁS AMPLIOS


El flujo entre las tareas de los usuarios es más fluido cuando se maneja más con un modelo
unificado.

Es más fácil entender un modelo coherente que dos distintos más mapeos.

La traducción entre dos modelos puede ser difícil (a veces imposible).

El lenguaje compartido fomenta una com unicación clara en el equipo.


A favor de los contextos limitados más pequeños


Se reduce la sobrecarga de comunicación entre los desarrolladores.

LA INTEGRAC IÓN C ONTINUA es más fácil con equipos y bases de código más pequeños.

más grande contextos mayo llamada por más versátil resumen modelos, requiriendo
habilidades que están en pequeño suministro.

Diferente modelos lata abastecer para especial necesidades o abarcar los jerga de
especializado grupos de usuarios, a lo largo de con especializado dialectos de los UBIC UO
IDIOMA .

Profundo integración de funcionalidad Entre diferente ENC ERRADO C ONTEXTOS es poco práctico.
Integración está limitado para esos partes de una modelo que lata ser rigurosamente fijado en
condiciones de los otro modelo, e incluso esta nivel de integración mayo llevar considerable
esfuerzo. Esta hace sentido Cuándo allí voluntad ser un pequeño interfaz Entre dos sistemas


Aceptar lo que no podemos cambiar: delinear los sistemas externos

Eso es mejor para comienzo con los más fácil decisiones Algunos subsistemas voluntad
claramente no ser en ninguna C ONTEXTO LÍMITE de los sistema bajo desarrollo. Ejemplos haría ser
importante legado sistemas que usted no son inmediatamente reemplazando y externo sistemas
que proveer servicios lo harás necesitar. Tú lata identificar estos inmediatamente y preparar para
segregar ellos desde tu diseño.

Aquí nosotros deber ser Cuidado sobre nuestro suposiciones Eso es conveniente para pensar de
cada de estas como si constituyeran su propio C ONTEXTO LIMITADO , pero la mayoría de los
sistemas externos solo cumplen débilmente con la definición. Primero, un C ONTEXTO LÍMITE se
define por la intención de unificar el modelo dentro de ciertos límites. Puede tener el control del
mantenimiento del sistema heredado, en cuyo caso puede declarar los intención, o los legado
equipo mayo ser bien coordinado y ser que lleva fuera un forma informal de INTEGRAC IÓN
C ONTINUA , pero no lo des por sentado. Revíselo y, si el desarrollo no está bien integrado, sea
especialmente cauteloso. No es raro encontrar contradicciones semánticas en diferente partes
de tal sistemas


Relaciones con los Sistemas Externos

Ahí están Tres patrones que lata aplicar aquí. Primero, para considerar SEPARAR MANERAS . Sí,
usted no hubiera incluido ellos si usted no lo hizo necesitar integración. Pero ser De Verdad Por
supuesto. haría eso ser suficiente para dar el usuario fácil acceso para ambas cosas sistemas?
Integración es caro y distrayendo, entonces desahogarse tu proyecto como mucho como usted
lata.

Si la integración es realmente imprescindible, puedes elegir entre dos extremos: C ONFORMISTA
o ANTIC ORRUPCIÓN C APA . Eso es no divertido para ser a C ONFORMISTA . Tu creatividad y tu
opciones por nueva funcionalidad voluntad ser limitado. En edificio a importante nuevo sistema,
eso es improbable para ser práctico para adherirse a los modelo de a legado o externo sistema
(después todos, por qué están usted edificio a nuevo ¿sistema?).

pega con los legado modelo mayo ser apropiado en los caso de periférico extensiones a a grande
sistema que voluntad Seguir para ser los dominante sistema. Ejemplos de esta elección incluir las
herramientas livianas de apoyo a la toma de decisiones que a menudo se escriben en Excel u
otras herramientas simples. Si su aplicación es realmente una extensión del sistema existente y
su interfaz con ese sistema va para ser grande, los traducción Entre C ONTEXTOS lata fácilmente
ser a más grande trabajo que los funcionalidad de la aplicación en sí. Y todavía hay espacio para
un buen trabajo de diseño, aunque se haya colocado en el C ONTEXTO LIMITADO del otro sistema.
Si hay un modelo de dominio discernible detrás los otro sistema, usted lata mejorar tu
implementación por haciendo que modelo más explícito que eso era en los viejo sistema, sólo
como largo como usted estrictamente ajustarse para los viejo modelo. Si tú decides en a
C ONFORMISTA diseño, usted deber hacer eso con entusiasmo. Tú restringir tú mismo para
extensión solamente, con no modificación de los existente modelo.

Cuándo los funcionalidad de los sistema bajo diseño es yendo para ser más involucrado que un
extensión a un sistema existente, donde su interfaz con el otro sistema es pequeña, o donde el
otro sistema es muy gravemente diseñado, lo harás De Verdad querer tu propio ENC ERRADO
C ONTEXTO , cual medio construyendo un traducción capa, o incluso un ANTI CORRUPC ION C APA .


El sistema bajo Diseño

El software que su equipo de proyecto está construyendo en realidad es el sistema que se está
diseñando . Puede declarar C ONTEXTOS LÍMITES dentro de esta zona y aplicar INTEGRAC IÓN
C ONTINUA dentro de cada uno para mantenerlos unificados. Pero cómo muchos deberían usted
¿tener? Qué relaciones deberían ellos tener para cada ¿otro? Las respuestas están menos Corte y
seco que con los externo sistemas porque nosotros tener más libertad y controlar

Eso pudo ser bastante sencillo: a único ENC ERRADO C ONTEXTO por los completo sistema bajo
diseño. Por ejemplo, esta haría ser a probable elección por a equipo de menos que diez
gente trabajando en altamente interrelacionado funcionalidad.

Como los equipo crece más grande, INTEGRAC IÓN C ONTINUA mayo volverse difícil (aunque I tener
visto mantuvo por algo más grande equipos). Tú mayo Mira por a C OMPARTIDO NÚC LEO y descanso
apagado conjuntos relativamente independientes de funcionalidad en C ONTEXTOS LÍMITES
separados , cada uno con menos de diez personas. Si todas las dependencias entre dos de estos
van en una dirección, podría configurar C LIENTE/PROVEEDOR DESARROLLO EQUIPOS .

Puede reconocer que las mentalidades de dos grupos son tan diferentes que sus esfue rzos de
modelado constantemente choque. Eso mayo ser que ellos Realmente necesitar bastante
diferente cosas desde los modelo, eso quizás sólo a diferencia en antecedentes conocimiento, o
eso mayo ser a resultado de los administración estructurar el proyecto es incorporado en. Si los
porque de los choque es algo usted hipocresía cambiar, o no querer cambiar, usted mayo escoger
para permitir los modelos para ir SEPARAR MANERAS . Donde integración es necesario, un
traducción capa lata ser desarrollado y mantenido conjuntamente por los dos equipos como los
único punto de INTEGRAC IÓN C ONTINUA . Esto contrasta con la integración con sistemas externos,
donde la C APA ANTIC ORRUPCIÓN normalmente tiene que adaptarse al otro sistema tal como está y
sin mucho apoyo. desde los otro lado.

Generalmente discurso, allí es a correspondencia de una equipo por ENC ERRADO C ONTEXTO . Una
equipo puede mantener múltiple ENC ERRADO C ONTEXTOS , pero eso es duro (aunque no
imposible) por múltiple equipos trabajar en una juntos.


Abastecimiento de necesidades especiales con Distinct Modelos

Diferentes grupos dentro de la misma empresa a menudo han desarrollado sus propias
terminologías especializadas, cual mayo tener divergió desde una otro. Estas local jergas
mayo ser muy

preciso y adaptado para sus necesidades. Cambiando ellos (por ejemplo, por imponente a
estandarizado, en toda la empresa terminología) requiere extenso capacitación y análisis para
resolver los diferencias Incluso luego, los nuevo terminología mayo no atender como bien
como los finamente afinado versión ellos ya tenía.

Puede decidir satisfacer estas necesidades especiales en C ONTEXTOS LIMITADOS separados ,
permitiendo que los modelos para ir SEPARAR MANERAS , excepto por C ONTINUO INTEGRAC IÓN de
traducción capas. Diferentes dialectos de los UBIC UO IDIOMA voluntad evolucionar alrededor
estas modelos y los especializado jerga ellos están establecido en. Si los dos dialectos tener a
lote de superposición, a C OMPARTIDO NÚC LEO mayo proveer el necesario especialización tiempo
minimizando los traducción costo.

Donde integración es no necesario, o es relativamente limitado, esta permite continuado
utilizar de terminología habitual y evita corrupción de los modelos Eso además posee su
costos y riesgos

La pérdida del lenguaje compartido reducirá la comunicación.

Hay gastos generales adicionales en la integración.

Ahí voluntad ser algunos duplicación de esfuerzo, como diferente modelos de los mismo
negocio actividades y entidades evolucionar.

Pero quizás los más grande riesgo es que eso lata volverse un argumento en contra cambiar y a
justificación para ninguna peculiar, parroquial modelo. Cómo mucho hacer usted necesitar para
Sastre esta individual parte de los sistema para satisfacer necesidades especializadas? Lo más
importante, ¿qué valor tiene la jerga particular de este grupo de usuarios ? Tienes que sopesar
el valor de una acción más independiente de los equipos frente a los riesgos de traducción,
acuerdo un ojo fuera por racionalización terminología variaciones que tener no valor.

A veces a profundo modelo surge que lata unificar estas distinto idiomas y satisfacer ambas cosas
grupos El problema es que los modelos profundos emergen más adelante en el ciclo de vida,
después de mucho desarrollo y procesamiento de conocimientos, si es que lo hacen. No se
puede planificar sobre un modelo profundo; solo tienes que aceptar la oportunidad Cuándo eso
surge, cambiar tu estrategia, y refactorizar

Mantenerse en mente que, donde integración requisitos están extenso, los costo de traducción va
Dirigirte. Cierta coordinación de los equipos, desde las modificaciones precisas de un objeto
que tiene un complicado traducción que van arriba para a C OMPARTIDO NÚC LEO , lata hacer
traducción más fácil tiempo todavía no requiere completo unificación.


Despliegue

Coordinando los embalaje y despliegue de complejo sistemas es una de esos aburrido Tareas que
casi siempre son mucho más difíciles de lo que parecen. La elección de la estrategia BOUNDED
C ONTEXT tiene un impacto en el despliegue. Por ejemplo, cuando los EQUIPOS DE
C LIENTES/PROVEEDORES implementan nuevas versiones, tener para coordinar con cada otro para
liberar versiones que tener estado probado juntos. Ambos códigos y datos migraciones tener para
trabajo en estas combinaciones En a repartido sistema, eso mayo Ayudar a mantenerse los
traducción capas Entre C ONTEXTOS juntos dentro de a único proceso, entonces que usted no tengo
múltiple versiones coexistiendo

Incluso despliegue de los componentes de a único ENC ERRADO C ONTEXTO lata ser desafiante
Cuándo migración de datos toma hora o Cuándo repartido sistemas hipocresía ser actualizado
instantáneamente, resultante en dos versiones de los código y datos coexistiendo

Muchos técnico consideraciones venir dentro jugar dependiente en los despliegue ambiente y
Tecnología. Pero los ENC ERRADO C ONTEXTO relaciones lata punto usted hacia los caliente
lugares. La traducción interfaces tener estado marcado fuera.

los factibilidad de a despliegue plan deberían alimento espalda dentro los dibujo de los C ONTEXTO
límites. Cuándo dos C ONTEXTOS están puenteado por a traducción capa, una C ONTEXTO lata ser
actualizado sólo entonces a la nueva capa de traducción proporciona la misma interfaz para el
otro C ONTEXT . UN NÚC LEO C OMPARTIDO impone mucho mayor que carga de coordinación, no sólo
en desarrollo pero además en despliegue. MANERAS SEPARADAS lata hacer la vida mucho más
simple


la compensación

Para suma arriba estas pautas, allí es a rango de estrategias por unificando o integrando
modelos En general condiciones, usted voluntad comercio apagado los beneficios de sin
costura integración de funcionalidad en contra el adicional esfuerzo de coordinación y
comunicación. Tú comercio más independiente acción contra una comunicación más fluida.
Una unificación más ambiciosa requiere control sobre el diseño de los subsistemas
involucrado.


Figura 14.13. Las demandas relativas de los p atrones de relación
CONTEXTO


Cuando su proyecto ya está en marcha

Lo más probable es que no esté iniciando un proyecto sino que esté buscando mejorar un
proyecto que ya está en marcha. manera. En esta caso, los primero paso es para definir
C ONTEXTOS LÍMITES según para los manera las cosas son ahora . Esto es crucial. Para ser
efectivo, el MAPA DE C ONTEXTO debe reflejar la verdadera práctica de los equipos, no los ideal
organización usted puede que decidir en por siguiente los pautas sólo descrito.

Una vez que haya delineado sus verdaderos C ONTEXTOS LÍMITES actuales y haya descrito las
relaciones que tienen actualmente, el siguiente paso es reforzar las prácticas del equipo en
torno a esa organización actual . Mejora tu INTEGRAC IÓN C ONTINUA dentro de los C ONTEXTOS .
Refactorizar cualquier traducción extraviada código dentro tu ANTI C ORRUPC ION C APAS . Nombre
los existente ENC ERRADO C ONTEXTOS y asegurarse ellos están en los LENGUAJE UBIC UO de los
proyecto.

Ahora está listo para considerar cambios en los límites y las relaciones en sí. Estas

cambios voluntad naturalmente ser impulsado por los mismo principios He ya descrito por a
nuevo proyecto, pero ellos voluntad tener para ser mordido apagado en pequeña piezas, elegido
pragmáticamente para dar los más valor Para el menos esfuerzo y ruptura.

los próximo sección discute cómo para ir sobre Realmente haciendo cambios para tu C ONTEXTO
límites una vez usted tener decidido para.


[ Equipo LiB ]

[ Equipo LiB ]


Transformaciones
Como cualquier otro aspecto del modelado y diseño, las decisiones sobre C ONTEXTOS LIMITADOS
no son irrevocables. Inevitablemente, allí voluntad ser muchos casos en cual usted tener para
cambiar tu inicial decisión sobre los límites y relaciones Entre ENC ERRADO C ONTEXTOS .
Generalmente discurso, dividir C ONTEXTOS es bastante fácil, pero fusionarlos o cambiar las
relaciones entre ellos es un desafío. Describiré algunos cambios representativos que son
difíciles pero importantes. Estas transformaciones están generalmente mucho también grande
para ser tomado en a único refactorización o posiblemente incluso en iteración de un solo
proyecto. Por esa razón, describí planes de juego para realizar estas transformaciones como
una serie de pasos manejables. Estas son, por supuesto, pautas que tendrás para adaptar para
tu especial circunstancias y eventos.


Fusión de C ONTEXTOS : S EPARADAS FORMAS COMPARTIDAS NÚCLEO _

Traducción gastos generales es también elevado. Duplicación es también obvio. Ahí están
muchos motivaciones para fusionar C ONTEXTOS LIMITADOS . Esta es duro para hacer. Es no
también tarde, pero eso toma algunos paciencia.

Incluso si tu eventual meta es para unir completamente para a único C ONTEXTO con INTEGRAC IÓN
C ONTINUA , comienzo por Moviente para a C OMPARTIDO NÚC LEO .

1. Evaluar los inicial situación. Ser Por supuesto que los dos C ONTEXTOS están Por
supuesto internamente unificado antes comenzando para unificar ellos con cada otro.

2. Colocar arriba los proceso. lo harás necesitar para decidir cómo los código voluntad ser
compartido y qué los denominación del módulo convenciones voluntad ser. Ahí deber ser en
menos semanal integración de los C OMPARTIDO Código NÚC LEO . Y eso deber tener a prueba
suite. Colocar esta arriba antes de desarrollando ninguna compartido código. (Los Banco de
pruebas voluntad ser vacío, entonces eso deberían ser fácil para ¡pasar!)

3. Escoger algunos pequeña subdominio para comienzo con algo duplicado en ambas cosas
C ONTEXTOS , pero no forma parte del DOMINIO PRINC IPAL . Esta primera fusión establecerá el
proceso, por lo que es mejor usar algo simple y relativamente genérico o no crítico.
Examine las integraciones y traducciones que ya existen. Elegir algo que se está
traduciendo tiene la ventaja de a partir de fuera con a probado traducción, más lo harás ser
adelgazamiento tu capa de traducción.

En esta punto, usted tener dos modelos que habla a los mismo subdominio Ahí están
básicamente Tres enfoques para la fusión. Puede elegir un modelo y refactorizar el otro
C ONTEXT para que sea compatible. Esta decisión lata ser hecha venta al por mayor, ajuste los
intención de sistemáticamente reemplazando uno C ONTEXTO modelo y retener los coherencia de a
modelo que era desarrollado como a unidad. O puede escoger una pedazo en a hora,
presumiblemente finalizando arriba con los mejor de ambas cosas (pero tomando cuidado No a
final arriba con a revoltijo).

los tercera opción es para encontrar a nuevo modelo, presumiblemente Más adentro que
cualquiera de los originales, capaz de asumir los responsabilidades de ambas cosas.

4. Formulario a grupo de dos para cuatro desarrolladores, dibujado desde ambas cosas
equipos, para trabajo fuera a compartido modelo para los subdominio Independientemente
de cómo los modelo es derivado, eso deber ser planchado fuera en detalle. Esto incluye el
arduo trabajo de identificar sinónimos y mapear cualquier término que aún no esté siendo

traducido. Esta articulación equipo contornos a básico colocar de pruebas por los modelo.

5.

5. Los desarrolladores de cualquiera de los equipos asumen la tarea de implementar el
modelo (o adaptar los existentes). código para ser compartido), trabajando fuera detalles
y haciendo eso función. Si estas los desarrolladores ejecutan dentro problemas con los
modelo, ellos reconvocar los equipo desde paso 3 y participar en cualquier necesario
revisiones de los conceptos.

6. Desarrolladores de cada equipo llevar en los tarea de integrando con los nuevo C OMPARTIDO
NÚC LEO .

7. Eliminar traducciones que están no más extenso necesario.

En esta punto, usted voluntad tener a muy pequeña C OMPARTIDO NÚC LEO , con a proceso en
lugar para mantener eso. En posteriores proyecto iteraciones, repetir pasos 3 a través de 7
para Cuota más. Como los procesos firma arriba y los equipos ganar confianza, usted lata llevar
en más Complicado subdominios, múltiple unos en el mismo hora, o subdominios que están en
los C ENTRO DOMINIO .

A Nota: Como usted llevar en más específico del dominio partes de los modelos, usted mayo
encuentro casos donde el dos modelos tener conformado para los especializado jerga de diferente
usuario comunidades Eso es Es aconsejable aplazar la fusión de estos en el NÚC LEO C OMPARTIDO a
menos que se haya producido un gran avance hacia un modelo profundo, propor cionándole un
lenguaje capaz de reemplazar a ambos especializados. Una ventaja de un KERNEL C OMPARTIDO es
que puedes tener algunas de las ventajas de la INTEGRAC IÓN C ONTINUA tiempo retener algunos de
los ventajas de SEPARAR MANERAS .

Esas son algunas pautas para fusionarse en un NÚC LEO C OMPARTIDO . Antes de continuar,
considere una alternativa que satisfaga algunas de las necesidades abordadas por esta
transformación. Si definitivamente se prefiere uno de los dos modelos, considere cam biar hacia
él sin integrar. En lugar de compartir cosas comunes subdominios, sólo sistemáticamente
transferir completo responsabilidad por esos subdominios desde un C ONTEXTO LÍMITE al otro
refactorizando las aplicaciones para llamar al modelo del C ONTEXTO más favorecido y realizando las
mejoras que ese modelo necesita. Sin ninguna integración continua gastos generales, usted
tener eliminado redundancia. Potencialmente (pero no necesariamente), los más favorecido
ENC ERRADO C ONTEXTO pudo finalmente llevar sobre completamente, y lo harás tener creado los
mismo efecto como a fusión. En los transición (cual lata ser bastante largo o indefinido), esta
voluntad tener los ventajas habituales y desventajas de yendo SEPARAR MANERAS , y usted tener
para pesar ellos en contra los profesionales y contras de a C OMPARTIDO NÚC LEO .


Fusión de C ONTEXTOS : K ERNEL COMPARTIDO CONTINUO I NTEGRACIÓN

Si tu C OMPARTIDO NÚC LEO es en expansión, usted mayo ser atraído por los ventajas de completo
unificación de los dos ENC ERRADO C ONTEXTOS . Esta es no sólo a importar de resolviendo los
modelo diferencias Tú están ir a ser cambiando equipo estructuras y por último los idioma gente
hablar.

Comience por preparar a las personas y los equipos.

1. Ser Por supuesto que todos los procesos necesario por C ONTINUO INTEGRAC IÓN (compartido
código propiedad, integración frecuente, etc.) están en su lugar en cada equipo , por
separado. Armonizar la integración procedimientos en los dos equipos entonces que todo
el mundo es haciendo cosas en los mismo manera.

2. Comienzo circulante equipo miembros Entre equipos Esta voluntad crear a piscina de
gente quien entiende ambas cosas modelos, y voluntad empezar para conectar los
gente de los dos equipos

3. Aclarar los destilación de cada modelo individualmente. (Ver Capítulo 15 .)

4. En esta punto, confianza deberían ser elevado suficiente para empezar fusionando los centro

dominio dentro el C OMPARTIDO NÚC LEO . Esta lata llevar varios iteraciones, y a veces temporal
traducción las capas son necesario Entre los recién compartido partes y los aún no
compartido partes. Una vez dentro fusionando el C ENTRO DOMINIO , eso es mejor para ir
bonito rápido. Eso es a sobrecarga alta fase, tenso con errores,

y deberían ser acortado como mucho como posible, tomando prioridad sobre más nuevo
desarrollo. Pero no llevar en más que usted lata encargarse de.

Para unir los C ENTRO modelos, usted tener a pocos opciones Tú lata palo con una modelo y
modificar el otro para ser compatible con eso, o usted lata crear a nuevo modelo de los
subdominio y adaptar ambos contextos para utilizar eso. Reloj fuera si los dos modelos tener
estado adaptado para habla a distinto usuario necesidades. Es posible que necesite la potencia
especializada de ambos modelos originales. Esto requiere desarrollar un modelo más profundo
que pueda reemplazar a ambos modelos originales. Desarrollar un modelo unificador más
profundo es muy difícil, pero si usted están comprometido para los completo fusión de los dos
C ONTEXTOS , usted no más extenso tener la opción de múltiples dialectos. Habrá una
recompensa en términos de la claridad de la integración de los resultados modelo y código. Ser
Cuidado que eso no venir en los costo de tu capacidad para habla a el especializado necesidades
de tu usuarios

5. Como los C OMPARTIDO NÚC LEO crece, aumento los integración frecuencia para a diario y
finalmente para
INTEGRAC IÓN C ONTINUA .

6. Como los C OMPARTIDO NÚC LEO enfoques los punto de abarcando todos de los dos anterior
C ONTEXTOS LIMITADOS , usted voluntad encontrar tú mismo con cualquiera una grande
equipo o dos menor equipos que tener un compartido código base que ellos INTEGRAR
C ONTINUAMENTE , y que comercio miembros espalda y adelante con frecuencia.


Eliminación gradual de un sistema heredado

Todos bien cosas deber venir para un final, incluso legado computadora software. Pero eso no
suceder en su propio. Estos viejos sistemas pueden estar tan entretejidos en el negocio y otros
sistemas que sacarlos lata llevar muchos años. Afortunadamente, eso no tener para ser hecho
todos en una vez.

los posibilidades están también varios por me para hacer más que rasguño los superficie aquí.
Pero voy a discutir una común caso: Un viejo sistema que es usado a diario en los negocio posee
estado complementado hace poco por un puñado de sistemas más modernos que se comunican
con el sistema heredado a través de un sistema ANTIC ORRUPCIÓN CAPA .

Una de los primero pasos deberían ser para decidir en a pruebas estrategia. automatizado
unidad pruebas deberían ser escrito por nuevo funcionalidad en los nuevo sistemas, pero ajuste
de fase fuera legado presenta especial necesidades de prueba. Algunos organizaciones correr
nuevo y viejo en paralela por algunos período de hora.

En cualquier iteración dada:

1. Identificar específico funcionalidad de los legado que pudo ser agregado para una de los
favorecido sistemas dentro a único iteración.

2. Identificar adiciones que voluntad ser requerido en los ANTI C ORRUPC ION C APA .

3. Implementar.

4. Desplegar.

A veces eso voluntad ser necesario para gastar más que una iteración escribiendo equivalente
funcionalidad a un unidad que lata ser escalonado fuera de los legado, pero todavía plan los nuevo
funciones en pequeña, unidades del tamaño de una iteración, solamente esperando múltiple
iteraciones por despliegue.

Despliegue es otro punto en cual también mucho variación existe para cubrir todos los bases Eso
haría se bueno por desarrollo si estas pequeña, incremental cambios pudo ser arrollado fuera

para producción, pero usualmente eso es necesario para organizar más grande comunicados los
usuarios deber ser entrenado para utilizar los nuevo

software. A paralela período a veces deber ser terminado exitosamente. Muchos logístico los
problemas se tener para ser trabajó fuera.

Una vez que finalmente se está ejecutando en el campo:

5. Identificar ninguna innecesario partes de los ANTI C ORRUPC ION C APA y retirar ellos.

6. Considerar escisión los ahora sin usar módulos de los legado sistema, aunque esta mayo no
apagar para ser práctico. Irónicamente, los mejor diseñado los legado sistema es, los más
fácil eso voluntad ser para eliminarlo. Pero el software mal diseñado es difícil de
desmantelar poco a poco. Puede ser posible simplemente ignorar las partes no utilizadas
hasta un momento posterior cuando el resto se haya eliminado. fuera y los entero cosa lata
ser conmutado apagado.

Repita esto una y otra vez. El sistema heredado debería involucrarse menos en el negocio y
eventualmente eso voluntad ser posible para ver los luz en los final de los túnel y finalmente
cambiar apagado los viejo sistema Mientras tanto, la C APA ANTIC ORRUPCIÓN se contraerá y se
hinchará alternativamente en varias combinaciones aumento o disminución los interdependencia
Entre los sistemas Todos demás siendo igual, de curso, usted deberían emigrar primero esos
funciones que dirigir para menor ANTI C ORRUPC ION C APAS . Pero otro factores están probable para
dominar, y usted mayo tener para En Vivo con algunos peludo traducciones durante algunos
transiciones


Servicio de host abierto publicado Idioma

Se ha estado integrando con otros sistemas con una serie de protocolos ad hoc, pero la carga
de mantenimiento aumenta a medida que más sistemas desean acceder, o tal vez la
interacción se está volviendo muy difícil para comprender. Tú necesitar para formalizar los
relación Entre los sistemas con a IDIOMA PUBLIC ADO .

1. Si un estándar en la industria idioma es disponible, evaluar eso y utilizar eso si en todos
posible.

2. Si no estándar o prepublicado idioma es disponible, luego empezar por afilado arriba los
DOMINIO PRINC IPAL de los sistema que voluntad atender como los anfitrión. (Ver Capítulo
15 .)

3. Utilizar los C ENTRO DOMINIO como los base de un intercambio idioma, utilizando a estándar
paradigma de intercambio tal como xml, si en todos posible.

4. Publicar los nuevo idioma para todos involucrado en los colaboración (en menos).

5. Si a nuevo sistema arquitectura es involucrado, publicar que también.

6. Construir traducción capas por cada colaborando sistema.

7. Cambiar sobre.

En este punto, los colaboradores adicionales deberían poder ingresar con una interrupción
mínima.

Recordar, los PUBLIC ADO IDIOMA deber ser estable, aún lo harás todavía necesitar los libertad para
cambiar los huéspedes modelo como usted Seguir tu implacable.despiadado refactorización Por lo
tanto, hacer no equiparar los intercambiar idioma y los modelo de los anfitrión. Acuerdo ellos
cerrar juntos voluntad reducir traducción gastos generales, y puede optar por hacer que su
anfitrión sea C ONFORMISTA . Pero reserva el derecho de reforzar la traducción. capa y divergir si
los coste-beneficio compensación favores que.

Proyecto lideres deberían definir ENC ERRADO C ONTEXTOS establecido en funcional integración

requisitos y relaciones de desarrollo equipos Una vez ENC ERRADO C ONTEXTOS y a C ONTEXTO MAPA
están explícitamente

definido y respetado, luego lógico consistencia deberían ser protegido. Relacionados
Problemas de comunicación voluntad en menos ser expuesto entonces ellos lata ser
tratado con.

Sin embargo, a veces los contextos del modelo, ya sea que estén conscientemente delimitados
o que ocurran naturalmente, se aplican incorrectamente. para resolver problemas otro que lógico
inconsecuencia dentro de a sistema. los equipo mayo encuentran que el modelo de un C ONTEXTO
grande parece demasiado complejo para comprenderlo como un todo, o para analizarlo
completamente. Por elección o por casualidad, esto a menudo conduce a dividir los C ONTEXTOS
en más manejables . piezas. Esta fragmentación Guías para perdió oportunidades Ahora, eso es
valor recuento una decisión para establecer a grande modelo en a amplio C ONTEXTO , y si eso es no
organizacionalmente o políticamente posible mantenerse unido, si en realidad se está
fragmentando, entonces redibuje el mapa y defina los límites usted lata mantenerse. Pero si a
grande ENC ERRADO C ONTEXTO direcciones convincente integración necesidades, y si parece factible
aparte de la complejidad del modelo en sí, entonces romper el C ONTEXTO mayo no ser los mejor
responder.

Ahí están otro medio de haciendo grande modelos manejable que deberían ser considerado antes
de haciendo esto sacrificio. los próximo dos capítulos enfocar en gerente complejidad dentro de a
grande modelo por aplicando dos más amplio principios: destilación y Gran escala estructura.

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo quince. Destilación

Estas cuatro ecuaciones, a lo largo de con los definiciones de sus condiciones y los cuerpo
de matemáticas ellos descanso en, Rápido los totalidad de clásico Siglo xix
electromagnetismo.

— James Clerk Maxwell, Tratado sobre electricidad y magnetismo , 1873

¿Cómo te enfocas en tu problema central y evitas ahogarte en un mar de problemas
secundarios? UNA C APA ARQUITECTURA coordinados dominio conceptos desde los técnico lógica
que hace a sistema informático correr, pero en a grande sistema, incluso los aislado dominio
mayo ser inmanejablemente complejo.

Destilación es los proceso de separando los componentes de a mezcla para extraer los esencia en
una forma que hace eso más valioso y útil. A modelo es a destilación de conocimiento. Con cada
refactorización para Más adentro visión, nosotros resumen algunos crucial aspecto de dominio
conocimiento y prioridades Ahora, pisando espalda por a estratégico vista, esta capítulo mira en
formas para distinguir amplio franjas de El modelo y destilar los dominio modelo como a entero.

Al igual que con muchas destilaciones químicas, los subproductos separados se vuelven más
valiosos por los destilación proceso (como GENÉRIC O SUBDOMINIOS y C OHERENTE MEC ANISMOS ),
pero el esfuerzo está motivado por el deseo de extraer esa parte particularmente valiosa, la
parte que distingue nuestro software y hace eso valor edificio: los NÚC LEO _ DOMINIO ".

La destilación estratégica de un modelo de dominio hace todo lo siguiente:

1. SIDA todos equipo miembros en avaro los en general diseño de los sistema y cómo eso encaja
juntos

2. Facilita comunicación por identificando a centro modelo de manejable Talla para ingresar los
LENGUAJE UBIC UO

3. Guías refactorización

4. Focos trabajo en áreas de los modelo con los más valor

5. Guías externalización, utilizar de fuera de la plataforma componentes, y decisiones sobre
asignaciones

Esta capítulo establece fuera a sistemático Acercarse para estratégico destilación de los C ENTRO
DOMINIO , y explica cómo para efectivamente Cuota a vista de eso dentro de los equipo y
proporciona los idioma para hablar sobre qué nosotros están haciendo.

Figura 15.1. Un mapa de navegación para la destilación
estratégica

Como un jardinero que poda un árbol, despejando el camino para el crecimiento de las ramas
principales, vamos para aplicar a suite de tecnicas para Él w fuera distracciones en los modelo y
enfocar nuestro atención en los parte que asuntos más. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Dominio principal

En el diseño de un sistema grande, hay tantos componentes contribuyentes, todos
complicados y todos absolutamente necesario para éxito, que los esencia de los
modelo de dominio, los verdadero negocio activo, lata ser oscurecido y descuidado.

A sistema que es duro para comprender es duro para cambiar. los efecto de a cambiar es duro
para prever. un desarrollador quién deambula fuera de su o su propio área de familiaridad obtiene
perdió. (Esta es particularmente cierto cuando trayendo nuevo gente dentro a equipo, pero
incluso un establecido miembro de los equipo voluntad lucha a menos código es muy expresivo y
organizado.) Esta efectivo gente para especializarse. Cuándo los desarrolladores limitan su
trabajo a módulos específicos, reduce aún más la transferencia de conocimientos. Con la
compartimentación de trabajo, suave integración de los sistema sufre, y flexibilidad en asignación
de trabajo es perdió. Duplicación cultivos arriba Cuándo a desarrollador lo hace no darse cuenta
de que a conducta ya existe en otra parte, y entonces los sistema se convierte incluso más
complejo.

Esos están algunos de los Consecuencias de ninguna diseño que es duro para
comprender, pero allí es otro, Igualmente grave riesgo desde perdiendo los grande
imagen de los dominio:

La dura realidad es que no todas las partes del diseño serán igual de refinadas.
Prioridades deber ser colocar. Para hacer los dominio modelo un activo, los del modelo
crítico centro tiene que ser elegante y completamente aprovechado para crear l a
funcionalidad de la aplicación. Pero los desarrolladores escasos y altamente
calificados tienden a gravitar hacia la infraestructura técnica o un dominio claramente
definible. problemas que lata ser entendido sin especializado dominio conocimiento.

Tales partes del sistema parecen interesantes para los informáticos y se percibe que
construyen transferencias profesional habilidades y proveer mejor reanudar material. los
especializado centro, que parte de los modelo que De Verdad diferencia los solicitud y hace eso a
negocio activo, típicamente termina siendo poner juntos por menos experto desarrolladores
quién trabajo con DBA para crear a datos esquema y luego código característica por
característica sin dibujo en ninguna conceptual energía en los modelo en todos.

Pobre diseño o implementación de esta parte de los software Guías para un solicitud que Nunca
hace convincente cosas por los usuarios, no importar cómo bien los técnico infraestructura
obras, no importa como agradable los secundario caracteristicas están. Esta insidioso problema
lata llevar raíz Cuándo a proyecto carece un afilado imagen de los en general diseño y los
relativo significado de los varios partes.

Una de los más exitoso proyectos He Unido inicialmente sufrido desde esta síndrome. los meta
era para desarrollar a muy complejo sindicado préstamo sistema. Más de los fuerte talento era
felizmente trabajando en base de datos cartografía capas y mensajería interfaces tiempo los
negocio modelo era en los manos de desarrolladores nuevo para objeto tecnología.

los único excepción, un experimentado objeto desarrollador trabajando en a dominio problema,
ideado fuera de adjuntando comentarios para ninguna de los longevo dominio objetos. Estas
comentarios pudo organizar entonces que comerciantes pudo ver los razón fundamental ellos o
otros grabado por algunos pasado decisión. Él además construido un elegante usuario interfaz
que dio intuitivo acceso para los flexible caracteristicas de el comentario modelo.

Estas características fueron útiles y bien diseñadas. Entraron en producción.

Desafortunadamente, ellos fueron periférico. Esta talentoso desarrollador modelado su
interesante, genérico manera de comentando, implementado eso limpiamente, y poner eso
dentro de los usuarios las manos. mientras tanto un desarrollador incompetente era torneado
los misión crítica "préstamo" módulo dentro un incomprensible enredo que el proyecto muy por
poco hizo no recuperar desde.

los planificación proceso deber conducir recursos para los más crucial puntos en los modelo y
diseño. Para hacer eso, esos puntos deben ser identificados y entendidos por todos durante la
planificación y el desarrollo.

Esos partes de los modelo distintivo y central para los propósitos de los destinado a aplicaciones
inventar los C ENTRO DOMINIO . los C ENTRO DOMINIO es donde los más valor deberían ser agregado
en tu sistema.

Por lo tanto:

Hervir los modelo abajo. Encontrar los CENTRO DOMINIO y proveer a medio de fácilmente
distinguiéndolo desde los masa de secundario modelo y código. Traer los más valioso y
conceptos especializados dentro afilado alivio. Hacer los CENTRO pequeña.

Aplique los mejores talentos al DOMINIO PRINCIPAL y reclute en consecuencia. Gasta el
esfuerzo en el CORE para encontrar a profundo modelo y desarrollar a flexible diseño—
suficiente para realizar los visión de El sistema. Justificar inversión en ninguna otro
parte por cómo eso apoya los destilado CENTRO.

destilación los C ENTRO DOMINIO es no fácil, pero eso lo hace dirigir para algunos fácil decisiones lo
harás poner a lote de esfuerzo para hacer que su C ORE sea distintivo, manteniendo el resto del
diseño tan genérico como práctico. Si usted necesitar para mantenerse algunos aspecto de tu
diseño secreto como a competitivo ventaja, eso es el C ENTRO DOMINIO . Ahí es no necesitar para
desperdicio esfuerzo ocultando los descanso. Y cuando sea a elección tiene que ser hecha
(vencer para hora limitaciones) Entre dos deseable refactorizaciones, los una que más afecta el
C ENTRO DOMINIO deberían ser elegido primero.


Los patrones en este capítulo hacen que el DOMINIO PRINC IPAL sea más fácil de ver, usar y
cambiar.


Elegir el CENTRO

Nosotros están mirando en esos partes de los modelo especial para representando tu negocio

dominio y resolviendo tu negocio problemas.

los C ENTRO DOMINIO usted escoger depende en tu punto de vista. Para ejemplo, muchos
aplicaciones necesitar un genérico modelo de dinero que pudo representar varios monedas y sus
intercambio tarifas y conversiones. Por otro lado, una aplicación para respaldar el comercio de
divisas podría necesitar un diseño más elaborado. modelo de dinero, cual haría ser considerado
parte de los NÚC LEO . Incluso en tal a caso, Puede ser a parte de los dinero modelo que es muy
genérico. Como visión dentro los dominio profundiza con experiencia, el proceso de destilación
puede continuar separando los conceptos monetarios genéricos y reteniendo solamente los
especializado aspectos de los modelo en los C ENTRO DOMINIO .

En una aplicación de envío, el C ORE podría ser el modelo de cómo se consolidan las cargas
para el envío, cómo responsabilidad es transferido Cuándo contenedores cambiar las manos, o
cómo a especial el contenedor se enruta en varios transportes para llegar a su destino. En
banca de inversión, el C ORE podría incluir los modelos de sindicación de activos entre cesionarios
y Participantes.

El DOMINIO PRINC IPAL de una aplicación es el componente de soporte genérico de otra
aplicación. Aún así, a lo largo una proyecto, y generalmente a lo largo de una empresa, a
consistente C ENTRO lata ser definido. Me gusta cada otro parte de los diseño, los identificación
de los C ENTRO DOMINIO deberían evolucionar a través de iteraciones. los importancia de a
especial colocar de relaciones puede que no ser aparente en primero. Los objetos que parecer
obviamente central en primero mayo girar fuera para tener secundario papeles

los discusión en los siguiente secciones, particularmente GENÉRIC O SUBDOMINIOS , voluntad dar
más guias para estas decisiones


¿Quién hace el ¿Trabajo?

Los miembros técnicamente más competentes de los equipos de proyecto rara vez tienen
mucho conocimiento del dominio. Esto limita su utilidad y refuerza la tendencia a asignarlos a
componentes de apoyo, nutritivo a vicioso circulo en cual carecer de conocimiento mantiene ellos
fuera desde los trabajo que haría construir dominio conocimiento.

Es esencial romper este ciclo reuniendo un equipo que combine un conjunto de desarrolladores
fuertes que tener a a largo plazo compromiso y un interesar en convirtiéndose repositorios de
dominio conocimiento con uno o más expertos en el dominio que conocen profundamente el
negocio. El diseño del dominio es interesante, técnicamente desafiante trabajo Cuándo se
acercó seriamente, y desarrolladores lata ser fundar quién ver Esto es manera.

Por lo general, no es práctico contratar expertos en diseño externos a corto plazo para los
elementos básicos de la creación del DOMINIO PRINC IPAL , porque el equipo necesita acumular
conocimiento del dominio y una miembro es a fuga en los balde. En los otro mano, un experto en
a función de enseñanza/tutoría lata ser muy valioso por Ayudar los equipo construir su dominio
diseño habilidades y facilitando los uso de sofisticado principios que equipo miembros
probablemente tener no dominado

Para similar razones, eso es improbable que los C ENTRO DOMINIO lata ser comprado Esfuerzos
tener estado hecho para construir marcos modelo específicos de la industria, ejemplos
destacados son el marco CIM del consorcio de la industria de semicond uctores SEMATECH para
la automatización de la fabricación de semiconductores y los marcos "San Francisco" de IBM
para una amplia gama de negocios. Aunque esto es muy tentador idea, entonces lejos los
resultados tener no estado convincente, excepto quizás como PUBLIC ADO IDIOMAS facilitando datos
intercambio (ver Capítulo 14 ). los libro Específico del dominio Solicitud Marcos ( Fayad y Johnson
2000 ) da un visión de conjunto de los estado de esta Arte. Como los campo avances, más viable
marcos mayo ser disponible.

Incluso entonces, allí es a más fundamental razón por precaución: los mayor valor de
personalizado El software proviene del control total del DOMINIO PRINC IPAL . Un marco bien
diseñado puede proporcionar abstracciones de alto nivel que puede e specializar para su uso.
Puede ahorrarle el desarrollo de partes más genéricas y dejarlo libre para concentrarse en el
NÚC LEO . Pero si se limita usted más que que, luego allí están Tres probable posibilidades.

1.

1. Tú están perdiendo un esencial software activo. Atrás apagado restrictivo marcos en tu
DOMINIO PRINC IPAL .

2. los área tratado por los estructura es no como esencial como usted pensamiento. redibujar
los fronteras de los C ENTRO DOMINIO para los verdaderamente distintivo parte de los
modelo.

3. Tú no tener especial necesidades en tu C ENTRO DOMINIO . Considerar a bajo riesgo
solución, tal como compra software para integrar con tu aplicaciones

Una manera o otro, creando distintivo software llega espalda para a estable equipo
acumulando especializado conocimiento y crujido eso dentro a Rico modelo. No atajos No
magia balas.

[ Equipo LiB ]

[ Equipo LiB ]


Una escalada de destilaciones
los varios destilación tecnicas que hacer arriba los descanso de esta capítulo lata ser aplicado en
casi cualquiera pedido, pero allí es a rango en cómo radicalmente ellos modificar los diseño.

Una simple DEC LARAC IÓN DE VISIÓN DE DOMINIO comunica los conceptos básicos y su valor con
un mínimo inversión. los DESTAC ADO CENTRO lata mejorar comunicación y ayuda guía toma de
decisiones—y todavía requiere poco o no modificación para los diseño.

Más agresivo refactorización y reenvasado explícitamente separar GENÉRIC O SUBDOMINIOS , cual
luego pueden ser tratados individualmente. L OS MEC ANISMOS C OHERENTES se pueden
encapsular con versátiles, comunicativos, y flexible diseño. eliminando estas distracciones
desenreda los NÚC LEO .

reenvasado a AISLADO C ENTRO hace los C ENTRO directamente visible, incluso en los código, y
facilita el futuro trabajo en los C ENTRO modelo.

Y más ambicioso es los RESUMEN NÚC LEO , cual expresa los más fundamental conceptos y
relaciones en a puro formulario (y requiere extenso reorganizando y refactorización de los
modelo).

Cada de estas tecnicas requiere a sucesivamente mayor que compromiso, pero a cuchillo obtiene
estafador como su espada es terrestre más fino Sucesivo destilación de a dominio modelo produce
un activo que da el proyecto velocidad, agilidad, y precisión de ejecución.

Para comienzo, nosotros lata hervir apagado los menos distintivo aspectos de los modelo.
SUBDOMINIOS GENÉRIC OS proveer Un contraste para los C ENTRO DOMINIO que aclara los sentido
de cada. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Subdominios genéricos
Algunas partes del modelo agregan complejidad sin capturar o comunicar
información especializada. conocimiento. Cualquier cosa extraño hace los CENTRO
DOMINIO más difícil para discernir y comprender. los modelo zuecos arriba con general
principios todo el mundo sabe o detalles que pertenecer para especialidades cual
están no tu primario enfocar pero jugar a secundario papel. Sin embargo, por
genéricos que sean, estos otros elementos son esenciales para el funcionamiento
del sistema. y los completo expresión de los modelo.

Ahí es a parte de tu modelo que usted haría me gusta para llevar por otorgado. Eso es
innegablemente parte de el modelo de dominio, pero abstrae conceptos que probablemente
serían necesarios para muchas empresas. Para ejemplo, a corporativo organización gráfico es
necesario en algunos formulario por negocios tan diversos como el transporte marítimo, la
banca o la fabricación. Para otro ejemplo, muchas aplicaciones rastrean las cuentas por cobrar,
gastos libros mayores, y otro financiero asuntos que pudo todos ser manejado utilizando a
contabilidad genérica modelo.

A menudo, se dedica una gran cantidad de esfuerzo a los problemas periféricos del dominio.
Personalmente, he sido testigo de dos proyectos separados que han empleado a sus mejores
desarrolladores durante semanas para rediseñar fechas y veces con hora zonas Tiempo tal
componentes deber trabajo, ellos están no el conceptual centro de los sistema.

Incluso si tal a genérico modelo elemento es considerado crítico, los en general dominio modelo
necesidades para hacer prominente los más agregando valor y especial aspectos de tu sistema, y
necesidades para ser estructurado para darle a esa parte tanto poder como sea posible. Esto es
difícil de hacer cuando el C ORE se mezcla con todos los interrelacionados factores

Por lo tanto:

Identificar cohesivo subdominios que están no los motivación por tu proyecto. Factor
extraiga modelos genéricos de estos subdominios y colóquelos en MÓDULOS
separados . No dejar rastro de tu especialidades en ellos.

Una vez ellos tener estado apartado, dar sus continuo desarrollo más bajo prioridad
que la CENTRO DOMINIO , y evitar asignando tu centro desarrolladores para los Tareas
(porque ellos van a ganar poco dominio conocimiento desde ellos). también
considerar fuera de la plataforma soluciones o publicado modelos por estas GENÉRICO
SUBDOMINIOS .


Es posible que tenga algunas opciones adicionales al desarrollar estos paquetes.


Opción 1: una solución lista para usar

A veces, puede comprar una implementación o usar código fuente abierto.


Ventajas


Menos código para desarrollar.

Carga de mantenimiento externalizado.

Código es probablemente más maduro, usado en múltiple lugares, y por lo tanto más a
prueba de balas y completo que de cosecha propia código.


Desventajas


Aún debe dedicar tiempo a evaluarlo y comprenderlo antes de usarlo.

Siendo el control de calidad lo que es en nuestra industria, no puede contar con que sea
correcto y estable.

Eso mayo ser sobre Diseñado por tu propósitos; integración pudo ser más trabajo
que un canterano minimalista implementación.

Extranjero elementos no generalmente integrar suavemente. Ahí mayo ser a distinto
ENC ERRADO C ONTEXTO . Incluso si no, eso mayo ser difícil para suavemente referencia
ENTIDADES desde tu otro paquetes

Puede introducir dependencias de la plataforma, dependencias de la versión del compilador,
etc.

Vale la pena investigar las soluciones de subdominio listas para usar, pero por lo general no
valen la pena. He visto éxito cuentos en aplicaciones con muy elaborar flujo de trabajo requisitos
que usó comercialmente disponible externo flujo de trabajo sistemas con API manos. He además
visto éxito con un paquete de registro de errores que estaba profundamente integrado en la
aplicación. A veces , las soluciones de SUBDOMINIO GENÉRIC O se empaquetan en forma de
marcos, que implementan un modelo muy abstracto que se puede integrar y especializar para
su aplicación. Cuanto más genérico sea el subcomponente, y los más destilado su propio modelo,
los mejor los oportunidad que eso voluntad ser útil.


Opción 2: un diseño o modelo publicado


Ventajas


Más maduro que un modelo de cosecha propia y refleja las ideas de muchas personas.

Instantáneo, de alta calidad. documentación


Desventaja


Es posible que no se ajuste a sus necesidades o que esté diseñado en exceso para sus
necesidades

Tom Lehrer (el compositor de comedia de las décadas de 1950 y 1960) dijo que el secreto del
éxito en matemáticas era: "¡Plagiar! Plagiar. Que el trabajo de nadie escape a tus ojos... Solo
asegúrate siempre para llamada eso por favor, investigación ". Bien Consejo en dominio
modelado, y especialmente Cuándo atacando a un GENÉRIC O SUBDOMINIO .

Esto funciona mejor cuando hay un modelo ampliamente distribuido, como los de Patrones de
análisis
( Fowler 1996 ). (Consulte el Capítulo 11 ).

Cuando el campo ya tenga un modelo altamente formalizado y riguroso, utilícelo. contabilidad y
fisica

están dos ejemplos que venir para mente. No solamente están estas muy robusto y aerodinámico,
pero ellos son ampliamente entendido por gente En todas partes, reduciendo tu regalo y futuro
capacitación carga. (Ver Capítulo 10 , en utilizando establecido formalismos.)

no sentir obligado para implementar todos aspectos de a publicado modelo, si usted lata
identificar a subconjunto simplificado que es autoconsistente y satisface tu necesidades. Pero en
casos donde allí es a bien viajado y bien documentado, o mejor aún, formalizado—modelo
disponible, eso hace no sentido para reinventar el rueda.


Opción 3: una implementación subcontratada


Ventajas


mantiene centro equipo gratis para trabajo en los C ENTRO DOMINIO , donde más conocimiento
es necesario y acumulado.

permite más desarrollo para ser hecho sin permanentemente ampliando los equipo, pero
sin disiparse conocimiento de los C ENTRO DOMINIO.

Efectivo un orientado a la interfaz diseño, y ayuda mantenerse los subdominio genérico,
porque la especificación es siendo aprobado fuera de.


Desventajas


Todavía requiere hora desde los centro equipo, porque los interfaz, codificación
estándares, y cualquier otro importante aspectos necesitar para ser comunicado

Incurre en una sobrecarga significativa de transferir la propiedad nuevamente al interior,
porque el código debe entenderse. (Todavía, gastos generales es menos que por
especializado subdominios, porque a genérico modelo presumiblemente requiere no especial
antecedentes para comprender.)

Código calidad lata variar. Esta pudo ser bien o malo, dependiente en los relativo calibre de los
dos equipos.

automatizado pruebas lata jugar un importante papel en subcontratación los implementadores
deberían ser requerido para proveer unidad pruebas por los código ellos entregar. A De Verdad
poderoso enfoque—uno que ayuda garantizar un grado de calidad, aclara la especificación y
suaviza la reintegración—es especificar o incluso escribir automatizado aceptación pruebas por
los subcontratado componentes También, "tercerizado implementación" puede ser un excelente
combinación con "publicado diseño o modelo."


Opción 4: una implementación interna


Ventajas


Fácil integración.

Obtienes justo lo que quieres y nada extra.

Se pueden asignar contratistas temporales.


Desventajas


Carga continua de mantenimiento y capacitación.

Es fácil subestimar el tiempo y el costo de desarrollar dichos paquetes.

Por supuesto, esto también combina bien con "diseño o modelo publicado".

SUBDOMINIOS GENÉRIC OS son el lugar para tratar de aplicar la experiencia en diseño externa,
porque no requieren una comprensión profunda de su DOMINIO PRINC IPAL especializado y no
presentan una gran oportunidad para aprender ese dominio. La confidencialidad es menos
preocupante, porque poca información patentada o negocio práctica voluntad ser involucrado en
tal módulos. A GENÉRIC O SUBDOMINIO disminuye el entrenamiento carga por esos no comprometido
para profundo conocimiento de los dominio.

Sobre hora, I creer nuestro ideas de qué que constituye los C ENTRO modelo voluntad estrecho, y
más y más genérico modelos voluntad ser disponible como implementado marcos, o en menos
como publicado modelos o patrones de análisis. Por ahora, todavía tenemos que desarrollar la
mayoría de estos nosotros mismos, pero hay un gran valor en fraccionamiento ellos desde los
C ENTRO DOMINIO modelo.


Ejemplo
Una historia de dos tiempos Zonas

Dos veces He Visto como los mejor desarrolladores en a proyecto gastado semanas de sus
hora resolviendo el problema de almacenar y mudado veces con hora zonas Tiempo Yo soy
siempre suspicaz de tales actividades, a veces eso es necesario, y estas dos proyectos
proveer casi Perfecto contraste.

los primero era un esfuerzo para diseño Planificación software por carga Envío. Para calendario
transportes internacionales, es fundamental tener cálculos de tiempo precisos, y debido a que
todos esos horarios se rastrean en local hora, eso es imposible para coordinar transportes sin
conversiones

Teniendo claramente establecido sus necesitar por esta funcionalidad, los equipo procedió con
desarrollo de los C ENTRO DOMINIO y algunos temprano iteraciones de los solicitud utilizando los
disponible hora clases y algunos ficticio datos. Como los solicitud comenzó para maduro, eso era
claro que los existente las clases de tiempo no eran adecuadas, y que el problema era muy
complicado debido a las variaciones entre los muchos países y la comp lejidad de la línea
internacional de cambio de fecha. Con sus requisitos por ahora incluso más claro, ellos buscado
por un fuera de la plataforma solución, pero fundar ninguna.
No tenían más remedio que construirlo ellos mismos.

los tarea haría exigir investigación y precisión Ingenieria, entonces los equipo lideres asignado
una de ellos mejor programadores Pero los tarea hizo no exigir ninguna especial conocimiento de
Envío y no lo haría cultivar que conocimiento, entonces ellos eligió a programador quién era en los
proyecto en a contrato temporal.

Este programador no partió de cero. Investigó varias implementaciones existentes de zonas
horarias, la mayoría de las cuales no cumplían con los requisitos, y decidió adaptar la solución
de dominio público. desde BSD unix, cual tenido un elaborar base de datos y un implementación
en C. Él Ingeniería inversa los lógica y escribió un importar rutina por los base de datos.

El problema resultó ser aún más difícil de lo esperado (involucrando, por ejemplo, la importación

de

bases de datos de especial casos), pero los código tiene escrito y integrado con los C ENTRO y los el
producto era entregado.

Las cosas fueron muy diferentes en el otro proyecto. Una compañía de seguros estaba
desarrollando un nuevo sistema de procesamiento de reclamos sistema, y planificado para
capturar los veces de varios eventos (hora de coche tiempo de choque de Viva tormenta, y
entonces en). Esta datos haría ser grabado en local hora, entonces hora zona la funcionalidad era
necesario.

Cuándo I llegado, ellos tenido asignado a júnior, pero muy inteligente, desarrollador para los
tarea, aunque los requisitos exactos de la aplicación todavía estaban en juego y ni siquiera
se había intentado una iteración inicial. Él tenido obedientemente colocar fuera para construir
a hora zona modelo a a priori

No conocimiento qué haría ser necesario, eso era ficticio que eso deberían ser flexible suficiente
para manejar cualquier cosa. El programador asignado a la tarea necesitaba ayuda con un
problema tan difícil, por lo que un alto desarrollador era asignado para eso además. Ellos
escribió complejo código, pero no específico solicitud estaba usando eso, entonces eso era Nunca
claro que los código trabajó correctamente.

los proyecto corrió encallado por varios razones, y los hora zona código era Nunca usado. Pero si
eso había sido, simplemente almacenar local veces etiquetado con los hora zona puede que tener
estado suficiente, incluso sin conversión, porque esta era ante todo referencia datos y no los base
de cálculos Incluso si la conversión hubiera resultado necesaria, todos los datos se recopilarían
de América del Norte, donde hora zona conversiones están relativamente sencillo.

los principal costo de esta atención para los hora zonas era los negligencia de los C ENTRO DOMINIO
modelo. Si la misma energía se hubiera colocado allí, podrían haber producido un prototipo
funcional de su propia solicitud y a primero Corte en a trabajando dominio modelo. Es más, los
desarrolladores involucrado, quien fueron comprometido a largo plazo para los proyecto,
deberían tener estado empapado en los seguro dominio, edificio arriba crítico conocimiento dentro
de los equipo.

Una cosa ambas cosas proyectos hizo Correcto era para limpiamente segregar los tiempo
GENÉRIC O zona modelo desde el NÚC LEO DOMINIO . A envíoespecífico o específico del seguro
modelo de hora zonas haría tener acoplado el modelo para esta genérico secundario modelo,
haciendo los C ENTRO más difícil para comprender (porque eso contendría irrelevante detalle sobre
hora zonas). Eso haría tener hecha los hora zona MÓDULO más difícil mantener (porque los
mantenedor haría tener para comprender los C ENTRO y su interrelación con tiempo zonas).


Transporte del proyecto Seguro de estrategia del proyecto Estrategia
Ventajas


GENÉRICO _ modelo
desacoplado de C ORE .

C ORE maduro, por lo que
los recursos pudo ser
desviado sin retraso en el
crecimiento eso.

Supo exactamente qué ellos
necesario.

Crítico apoyo funcionalidad
para internacional Planificación.
Ventaja


GENERIC desacoplado de C ORE .

Desventajas


NÚC LEO _ modelo subdesarrollado, entonces
atención para otros asuntos continuado esta
negligencia.

Los requisitos desconocidos llevaron a un
intento de generalidad total, donde más simple
norte Conversión específica de América puede
que tener bastó

Programador con contrato a
corto plazo usado por
GENÉRIC O tarea.
A largo plazo programadores fueron asignado
quién podría tener estado repositorios de dominio
conocimiento.

Desventaja

desviado cima programador
del núcleo

Nosotros técnico gente tender para disfrutar definible problemas me gusta hora zona conversión,
y nosotros lata fácilmente justificamos gastar nuestro tiempo en ellos. Pero una mirada
disciplinada a las prioridades generalmente apunta al DOMINIO FUNDAMENTAL .


Genérico no significa reutilizable

Nota que tiempo I tener enfatizado los genérico calidad de estas subdominios, I tener no
mencionó la reutilización del código. Las soluciones listas para usar pueden o no tener sentido
para una situación particular, pero asumiendo que usted están implementar los código tú mismo,
interno o subcontratado, debería específicamente no preocupación tú mismo con los reutilización
de que código. Esta haría ir en contra la motivación básica de la destilación: que debe aplicar la
mayor parte de su esfuerzo al DOMINIO PRINC IPAL como posible y invertir en secundario GENÉRIC O
SUBDOMINIOS solamente como necesario.

Reutilizar lo hace suceder, pero no siempre código reutilizar. los modelo reutilizar es con
frecuencia a mejor nivel de reutilizar, como Cuándo usted utilizar a publicado diseño o modelo. Y
si usted tener para crear tu propio modelo, eso bien podría ser valioso en a luego relacionados
proyecto. Pero tiempo los concepto de tal a modelo mayo ser aplicable a muchos situaciones,
usted hacer no tener para desarrollar los modelo en su completo generalidad. Tú lata modelo e
implementar solamente los parte usted necesitar por tu negocio.

Aunque rara vez debe diseñar para la reutilización, debe ser estricto en cuanto a mantenerse
dentro del concepto genérico. La introducción de elementos de modelo específicos de la
industria tendrá dos costos. En primer lugar, impedirá futuro desarrollo. Aunque usted
necesitar solamente a pequeña parte de los subdominio modelo ahora tu necesidades voluntad
crecer. Por introduciendo cualquier cosa para los diseño que es no parte de los concepto, tú
haces eso mucho más difícil para expandir los sistema limpiamente sin completamente
reconstrucción los parte más antigua y rediseñando los otro módulos que utilizar eso.

los segundo, y más importante, razón es que esos específico de la industria conceptos
pertenecer cualquiera en el C ENTRO DOMINIO o en sus propio, más especializado, subdominios, y
esos especializado modelos son incluso más valioso que los genérico unos.


Riesgo del proyecto Gestión

Ágil procesos típicamente llamada por gerente riesgo por abordar los más arriesgado Tareas
temprano. XP pide específicamente poner en funcionamiento un sistema de extremo a
extremo de inmediato. Este sistema inicial a menudo demuestra a técnico arquitectura, y eso
es tentador para construir a periférico sistema que manejas algo de apoyo GENÉRIC O SUBDOMINIO
porque estas están generalmente más fácil para analizar. Pero ser Cuidado; esto puede fracaso
los propósito de riesgo administración.

Los proyectos enfrentan riesgos de ambos lados, con algunos proyectos que tienen mayores
riesgos técnicos y otros mayores dominio modelado riesgos los de extremo a extremo sistema
mitiga riesgo solamente para los grado que eso es un embrionario versión de los desafiante partes
de los real sistema. Eso es fácil para subestimar el riesgo de modelado de dominio. Puede tomar
la forma de complejidad imprevista, acceso inadecuado a los negocios expertos, o brechas en
llave habilidades de los desarrolladores

Por lo tanto, excepto Cuándo los equipo posee probado habilidades y los dominio es muy
familiar, los sistema de primer corte deberían ser establecido en algunos parte de los C ENTRO
DOMINIO , sin embargo sencillo.

los mismo principio se aplica para ninguna proceso que intentos para empujar alto riesgo

Tareas hacia adelante: los DOMINIO PRINC IPAL es elevado riesgo porque eso es con frecuencia
inesperadamente difícil y porque sin eso, los proyecto

no puede tener éxito

Más de los destilación patrones en esta capítulo show cómo para cambiar los modelo y código
para destilar el DOMINIO PRINC IPAL . Sin embargo, los siguientes dos patrones, DEC LARACIÓN DE
VISIÓN DE DOMINIO y NÚC LEO DESTAC ADO , show cómo los utilizar de hecho suplementario
documentos lata, con a muy menor inversión, Mejorar la comunicacion y conciencia de los
C ENTRO y enfocar desarrollo esfuerzo. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Declaración de visión de dominio
Al comienzo de un proyecto, el modelo generalmente ni siquiera existe, pero la
necesidad de enfocar su desarrollo es ya allí. En luego etapas de desarrollo, allí es a
necesidad de un explicación de los valor de los sistema que lo hace no exigir un en
profundidad estudio del modelo Además, los aspectos críticos del modelo de dominio
pueden abarcar múltiples CONTEXTOS LIMITADOS , pero por definición, estos modelos
distintos no se pueden estructurar para mostrar su común enfocar.

Muchos proyecto equipos escribe "visión declaraciones" por administración. los mejor de estas
documentos diseño los específico valor los solicitud voluntad traer para los organización. Algunos
mencionar los creación de El dominio modelo como a estratégico activo. Generalmente los visión
declaración documento es abandonado después de la proyecto obtiene fondos, y eso es Nunca
usado en los real desarrollo proceso o incluso leer por el técnico personal.

A DOMINIO VISIÓN DEC LARACIÓN es modelado después tal documentos, pero eso se enfoca en los
naturaleza de el dominio modelo y cómo eso es valioso para los empresa. Eso lata ser usado
directamente por los personal administrativo y técnico durante todas las fases de desarrollo
para guiar la asignación de recursos, para guiar el modelado elecciones, y para educar equipo
miembros Si los dominio modelo sirve muchos maestros, este documento lata show cómo sus
intereses están equilibrado.

Por lo tanto:

Escriba una breve descripción (alrededor de una página) del DOMINIO PRINCIPAL y el
valor que aportará, los "valor proposición." Ignorar esos aspectos que hacer no
distinguir esta modelo de dominio desde otros. Show cómo los dominio modelo sirve y
saldos diverso intereses. Mantenerse eso estrecho. Escribe esta declaración temprano
y revisar eso como usted ganar nuevo visión.

A DOMINIO VISIÓN DEC LARACIÓN lata ser usado como a poste indicador que mantiene los desarrollo
equipo se dirigió en una dirección común en el proceso en curso de destilar el modelo y el
código en sí. Se puede compartir con los miembros del equipo no técnicos, la gerencia e
incluso los clientes (excepto donde contiene propiedad información, de curso).

Esta es parte de a DOMINIO VISIÓN DECLARACIÓN Esto, aunque importante, es no
parte
de una DECLARACIÓN DE VISIÓN
DE DOMINIO
Sistema de reservas de aerolíneas

los modelo lata representar pasajero prioridades y
reserva de linea aerea estrategias y equilibrio estas
establecido en políticas flexibles. El modelo de un
pasajero debe reflejar la "relación" que la aerolínea se
esfuerza por desarrollar con los clientes habituales.
Por lo tanto, debe representar la historia del pasajero
en forma condensada útil, participación en programas
especiales, afiliación con estratégica corporativo
clientela, y entonces en.

Diferentes roles de diferentes usuarios (como
pasajero, agente, gerente) están representado para
enriquecer los modelo de las relaciones y para
alimentar la información necesaria a la seguridad
estructura.

Modelo deberían apoyo eficiente ruta/asiento
búsqueda e integración con otros sistemas de
reserva de vuelos establecidos.
Sistema de reservas de
aerolíneas

La interfaz de usuario debe
optimizarse para expertos
usuarios pero accesible para
primera vez usuarios

Acceso voluntad ser Ofrecido sobre los
Web, por transferencia de datos a
otros sistemas, y tal vez a través de
otro IU, entonces la interfaz se
diseñará en torno a XML con capas de
transformación para servir páginas
web o traducir para otro sistemas

A vistoso animado versión de los el
logotipo debe almacenarse en caché
en la máquina cliente entonces que
eso lata venir arriba rápidamente en
el futuro visitas

Cuándo cliente presenta a reserva,
haga la confirmación visual dentro de
los 5 segundos.

A seguridad estructura voluntad
autenticar un del usuario identidad y
luego límite el acceso a los específico
caracteristicas establecido en
privilegios asignados para definido
usuario papeles
Esta es parte de a DOMINIO VISIÓN DECLARACIÓN Esto, aunque importante, es no
parte
de una DECLARACIÓN DE VISIÓN
DE DOMINIO
Automatización de fábricas de semiconductores

los dominio modelo voluntad representar los estado de
materiales y equipos dentro de una fábrica de obleas
de tal manera que se puedan proporcionar los
registros de auditoría necesarios y automatizar el
producto enrutamiento lata ser soportado.

los modelo voluntad no incluir los humano recursos
requerido en el proceso, pero debe permitir la
automatización selectiva del proceso a través de receta
descargar.

los representación de los estado de los fábrica
deberían ser comprensible para los gerentes
humanos, para darles más visión y apoyo mejor
decisión haciendo.
Automatización de fábricas de
semiconductores

los software deberían ser Web
habilitado a través de un servlet,
pero estructurado para permitir
alternativa interfaces

Estándar en la industria tecnologías
debiera ser usado cuando sea posible
para evitar costos internos de
desarrollo y mantenimiento y para
maximizar el acceso a expertos
externos. Se prefieren las soluciones
de código abierto (como Apache Web
servidor).

los Web servidor voluntad correr en a
servidor dedicado. La aplicación se
ejecutará en un único dedicado

servidor.



A DOMINIO VISIÓN DEC LARAC IÓN da los equipo a compartido dirección. Algunos puente Entre los nivel
alto
DEC LARAC IÓN y el detalle completo del código o modelo. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Núcleo resaltado
UNA DEC LARAC IÓN DE VISIÓN DE DOMINIO identifica el DOMINIO PRINC IPAL en términos generales,
pero deja la identificación de los específico C ENTRO modelo elementos arriba para los caprichos
de individual interpretación. A no ser que allí es un excepcionalmente elevado nivel de
comunicación en los equipo, los VISIÓN DEC LARACIÓN sola voluntad tener poco impacto.


A pesar de que los miembros del equipo pueden saber en términos generales lo que
constituye el DOMINIO FUNDAMENTAL , diferentes personas no elegirán exactamente los
mismos elementos, e incluso la misma persona no será coherente de un día para otro.
El trabajo mental de filtrar constantemente el modelo para identificar las partes clave
absorbe la concentración que se de dica mejor al pensamiento de diseño, y eso
requiere exhaustivo conocimiento de los modelo. los CENTRO DOMINIO debe ser hecha
más fácil para ver.

Significativo estructural cambios para los código están los ideal manera de
identificando los DOMINIO PRINCIPAL , pero ellos están no siempre práctico en los
pequeño término. En hecho, tal importante cambios de código están difícil para
emprender sin los muy vista los equipo es carente.

Estructural cambios en los organización de los modelo, tal como fraccionamiento GENÉRIC O
SUBDOMINIOS y un pocos otros para venir luego en esta capítulo, lata permitir los MÓDULOS para
decir los historia. Pero como los solo significa de comunicado los C ENTRO DOMINIO , esta es
también ambicioso para disparo por derecho fuera.

Probablemente necesitará una solución más ligera para complementar estas técnicas agresivas.
puede que tengas restricciones que evitar usted desde físicamente separando los NÚC LEO . O
usted mayo ser a partir de fuera con existente código que lo hace no diferenciar los C ENTRO bien,
pero usted De Verdad necesitar para ver los C ORE , y comparte esa opinión, para refactorizar de
manera efectiva hacia una mejor destilación. E incluso en una etapa avanzada, algunos
diagramas o documentos cuidadosame nte seleccionados proporcionan puntos de anclaje
mental y puntos de entrada. por los equipo.

Estos problemas surgen igualmente para proyectos que usan modelos UML elaborados y
aquellos (como proyectos XP) que mantenerse pocos externo documentos y utilizar los código
como los primario repositorio de el modelo. Un Extremo Programación equipo puede que ser
más minimalista, acuerdo estas suplementos más casual y más transitorio (por ejemplo, a
dibujado a mano diagrama en los muro por todos para ver), pero estas tecnicas lata pliegue
bien dentro los proceso.

Marcar una parte privilegiada de un modelo, junto con la implementación que lo encarna, es
una reflexión en los modelo, no necesariamente parte de los modelo sí mismo. Ninguna técnica
que hace eso fácil para todo el mundo para saber los C ENTRO DOMINIO voluntad hacer. Dos
específico tecnicas lata representar esta clase de soluciones


la destilacion Documento

Con frecuencia I crear a separar documento para describir y explicar los C ENTRO DOMINIO . Eso
lata ser como simple como una lista de los objetos conceptuales más esenciales. Puede ser un
conjunto de diagramas centrados en esos objetos, demostración sus más crítico relaciones Eso
lata andar a través de los fundamental interacciones a un nivel abstracto o por ejemplo. Puede
usar diagramas de clase o de secuencia UML, diagramas no estándar particulares del dominio,
explicaciones textuales cuidadosamente redactadas o combinaciones de estos. A destilación

documento es no a completo diseño documento _ Eso es a minimalista entrada punto

que delinea y explica los C ENTRO y sugiere razones por más cerca escrutinio de especial piezas. Al
lector se le da una visión amplia de cómo encajan las piezas y se le guía a la parte apropiada
del código. por más detalles.

Por lo tanto (como una forma de NÚC LEO DESTAC ADO ):

Escribe a muy breve documento (Tres para Siete escaso páginas) que describe los
DOMINIO PRINCIPAL y los primario interacciones entre CENTRO elementos.

Se aplican todos los riesgos habituales de los documentos separados.

1. los documento mayo no ser mantenido

2. los documento mayo no ser leer.

3. Por multiplicando los información fuentes, los documento mayo fracaso su propio propósito
de cortando a través complejidad.

los mejor manera para límite estas riesgos es para ser absolutamente minimalista quedarse fuera
desde mundano detalle y enfoque en los central abstracciones y sus interacciones permite los
documento para años más lentamente, porque esta nivel de los modelo es generalmente más
estable.

Escribe los documento para ser entendido por los no técnico miembros de los equipo.
Utilizar eso como un compartido vista que delinea qué todo el mundo necesidades para
saber, y a guía por cual todos miembros del equipo mayo comienzo sus exploración de los
modelo y código.


CORE marcado

En mi primer día de un proyecto en una importante compañía de seguros, me dieron una copia
del "modelo de dominio", a doscientas paginas documento, comprado en estupendo gastos desde
un industria consorcio. Pasé unos días leyendo un revoltijo de diagramas de clases que cubrían
todo, desde los detalles composición de seguro políticas para extremadamente resumen modelos
de relaciones entre personas. La calidad de la factorización de estos modelos varió desde un
proyecto de secundaria hasta bastante bueno. (a pocos incluso descrito negocio normas, en
menos en los acompañamiento texto). Pero donde para ¿comienzo? Dos centenar paginas

los proyecto cultura fuertemente favorecido resumen estructura edificio, y mi antecesores tenido
centrado en un modelo muy abstracto de la relación de las personas entre sí, con las cosas y
con las actividades o acuerdos. En realidad, fue un buen análisis de estas relaciones y sus
experimentos. con los modelo tenido los calidad de un académico investigación proyecto. Pero eso
no fue consiguiendonos en cualquier sitio cerca un seguro solicitud.

Mi primero instinto era para comienzo cuchillada, hallazgo a pequeña C ENTRO DOMINIO para otoño
espalda en, luego refactorizando eso y reintroduciendo otro complejidades como nosotros
fuimos. Pero los administración era alarmado por Esta actitud. El documento estaba investido
de gran autoridad. Su producción contó con la participación de expertos de al otro lado de los
industria, y en ninguna evento ellos tenido pagado los consorcio lejos más que ellos estaban
pagando me, entonces ellos fueron improbable para pesar mi recomendaciones por radical
cambiar también fuertemente.
Pero I supo nosotros tenido para obtener a compartido imagen de nuestro C ENTRO DOMINIO y
obtener de todos esfuerzos centrado en que.

En lugar de de refactorización, I fuimos a través de los documento y, con los ayuda de a negocio
analista quien sabe a estupendo trato sobre los seguro industria en general y los requisitos de los
aplicación que íbamos a construir en particular, identifiqué un puñado de secciones que
presentaban lo esencial, diferenciando conceptos nosotros necesario para trabajo con. I
proporcionó a navegación de los modelo que mostró claramente los C ENTRO y su relación para
secundario caracteristicas.

A nuevo creación de prototipos esfuerzo empezado desde esta perspectiva, y rápidamente
cedido a simplificado aplicación que demostrado algunos de los requerido funcionalidad.

Dos libras de reciclable papel era convertido dentro a negocio activo por a pocos página
pestañas y un poco de amarillo resaltador

Esta técnica no es específica de los diagramas de objetos en papel. Un equipo que utiliza
ampliamente diagramas UML pudo utilizar a "estereotipo" para identificar centro elementos. A
equipo que usos los código como el único repositorio de los modelo puede que utilizar
comentarios, quizás estructurado como Java Doc, o puede que usa algo herramienta en su
desarrollo ambiente. los especial técnica no importar, como largo como un desarrollador lata
sin esfuerzo ver qué es en y qué es fuera de los C ENTRO DOMINIO .

Por lo tanto (como otra forma de NÚC LEO DESTAC ADO ):

Marque los elementos del DOMINIO PRINCIPAL dentro del repositorio principal del
modelo, sin particularmente difícil para dilucidar su papel. Hacer eso fácil por a
desarrollador saber qué es en o fuera de los NÚCLEO .

los C ENTRO DOMINIO es ahora claramente visible para esos trabajando con los modelo, con a
equitativamente pequeña esfuerzo y bajo mantenimiento, en menos para los grado que los
modelo es factorizado multa suficiente para distinguir el contribuciones de partes.


El documento de destilación como herramienta de proceso

teóricamente en un XP proyecto, ninguna par (dos programadores trabajando juntos) lata cambiar
ninguna código en los sistema. En práctica, algunos cambios tener importante trascendencia, y
llamada por más consulta y coordinación. Cuándo trabajando en los infraestructura capa, los
impacto de a cambiar mayo ser claro, pero eso mayo no ser entonces obvio en los dominio capa,
como típicamente organizado.

Con los concepto de los C ENTRO DOMINIO , esta impacto lata ser hecha claro. Cambios para los
modelo de el NÚC LEO DOMINIO deberían tener a grande efecto. Cambios para ampliamente usado
genérico elementos mayo exigir a mucho código actualizando, pero ellos todavía no debería
crear los conceptual cambio que C ENTRO cambios hacer.

Utilice el documento de destilación como guía. Cuando los desarrolladores se dan cuenta de que
el documento de destilación en sí requiere cambiar para Quédate en sincronizar con sus código o
modelo cambiar, luego consulta es pedido. Cualquiera ellos están fundamentalmente cambiando
los C ENTRO DOMINIO elementos o relaciones, o ellos están cambiando los límites de los NÚC LEO ,
incluso o Excluyendo algo diferente. Diseminación de El modelo cambiar para los entero equipo es
necesario por lo que comunicación canales los usos del equipo, incluso distribución de a nuevo
versión de los destilación documento.

Si los destilación documento contornos los esenciales de los CENTRO DOMINIO , luego
eso sirve como un indicador práctico de la importancia de un cambio de modelo.
Cuando un cambio de modelo o código afecta el documento de destilación, requiere
consultar con otros miembros del equipo. Cuando se realiza el cambio, requiere
notificación inmediata a todos los miembros del equipo y la difusión de una nueva
versión del documento. Los cambios fuera del CORE o a detalles no incluidos en el
documento de destilación se pueden integrar sin consulta o notificación y serán
encontrados por otros miembros en el cu rso de sus trabajo. Luego los desarrolladores
tener los completo autonomía que XP sugiere.


Aunque los VISIÓN DEC LARAC IÓN y DESTACADO C ENTRO informar y guía, ellos hacer no en
realidad modificar los modelo o los código sí mismo. Fraccionamiento GENÉRIC O SUBDOMINIOS
físicamente elimina algo de distracción elementos. los próximo patrones Mira en formas para
estructuralmente cambiar los modelo y el diseño sí mismo para hacer los C ENTRO DOMINIO

más visible y manejable. . . .

[ Equipo LiB ]

[ Equipo LiB ]


Mecanismos Cohesivos
Encapsular mecanismos es un principio estándar del diseño orientado a objetos. Ocultar
algoritmos complejos en métodos con revelador de intenciones nombres coordinados los "qué"
desde los "cómo." Esta tecnica hace a diseño más simple para comprender y utilizar. Aún eso
carreras dentro natural límites.

Cálculos a veces alcanzar a nivel de complejidad que comienza para inflar los diseño.
El "qué" conceptual se ve inundado por el "cómo" mecanicista. Una gran cantidad
de métodos que proveer algoritmos por resolviendo los problema oscuro los
métodos que expresan los problema.

Esta proliferación de procedimientos es síntoma de un problema en el modelo. La
refactorización hacia una visión más profunda puede generar un modelo y un diseño cuyos
elementos se adapten mejor a la solución del problema. los primero solución para buscar es a
modelo que hace los cálculo mecanismo sencillo. Pero ahora y luego los visión surge que algunos
parte de los mecanismo es sí mismo conceptualmente coherente. Esta conceptual cálculo
voluntad probablemente no incluir todos de los sucio cálculos usted necesitar. Estamos no
hablando sobre algunos tipo de comodín "calculadora." Pero extrayendo los coherente parte
debería hacer los restante mecanismo más fácil para comprender.

Por lo tanto:

Particionar un MECANISMO COHESIVO conceptualmente en un marco liviano separado.
Particularmente reloj por formalismos o bien documentada categorías de algoritmos
exponer el capacidades de los estructura con un INTENCIÓN -REVELACIÓN INTERFAZ . Ahora
los otros elementos de los dominio lata enfocar en expresando los problema ("qué"),
delegar las complejidades de los solución ("cómo") para los estructura.

Estas apartado mecanismos están luego metido en sus secundario roles, partida a menor, más
expresivo C ENTRO DOMINIO que usos los mecanismo a través de los interfaz en a más estilo
declarativo .

reconociendo a estándar algoritmo o formalismo se mueve algunos de los complejidad de los
diseño dentro un estudiado colocar de conceptos. Con tal a guía, nosotros lata implementar a
solución con confianza y pequeña prueba y error. Nosotros lata contar en otro desarrolladores
conocimiento sobre eso o en menos siendo poder para Mira arriba Esto es similar a los beneficios
de un modelo de SUBDOMINIO GENÉRIC O publicado , pero un algoritmo documentado o formal
cálculo mayo ser fundar más con frecuencia porque esta nivel de computadora la ciencia tiene
estado estudió más. Todavía, más con frecuencia que no usted voluntad tener para crear algo
nuevo. Hacer por poco enfocado en los cálculo y evitar mezclando en los expresivo dominio
modelo. Ahí es una separación de responsabilidades: los modelo de los C ENTRO DOMINIO o a
GENÉRIC O SUBDOMINIO formula un hecho, regla o problema. UN MEC ANISMO C OHESIVO resuelve la
regla o completa el cálculo como se especifica por los modelo.


Ejemplo
Un mecanismo en un organigrama

I fuimos a través de esta proceso en a proyecto que necesario a equitativamente elaborar
modelo de un organigrama. Esta modelo representado los hecho que una persona trabajó por
otro, y en cual ramas de los organización, y eso proporcionó un interfaz por cual pertinente
preguntas puede que ser pedido y respondió. Debido a que la mayoría de estas preguntas
estaban en la línea de "¿Quién, en esta cadena de mando, posee autoridad para aprobar
¿esta?" o "Quién, en esta Departamento, es capaz de manejo un

problema como este?", el equipo se dio cuenta de que la mayor parte de la complejidad
implicaba atravesar ramas específicas de los organizativo árbol, buscando por específico gente o
relaciones Esta es exactamente el tipo de problema resuelto por los bien desarrollado formalismo
de a gráfico , a colocar de nodos conectado por arcos (llamado bordes ) y los normas y
algoritmos necesario para atravesar los grafico.

Un subcontratista implementó un marco transversal gráfico como un MEC ANISMO C OHESIVO .
este marco usado estándar grafico terminología y algoritmos familiar para más computadora
científicos y abundantemente documentado en libros de texto Por no medio hizo él implementar
a completamente general grafico. Fue a subconjunto de que conceptual estructura que cubierto
los caracteristicas necesario por nuestro modelo de organización. Y con un INTENC IÓN-REVELAC IÓN
INTERFAZ , los medio por cual los respuestas están obtenidos son no a primario preocupación.

Ahora, el modelo de organización simplemente podría afirmar, utilizando la terminología gráfica
estándar, que cada persona es un nodo y que cada relación entre las personas es un borde
(arco) que conecta esos nodos. Después que, presumiblemente, mecanismos dentro de los
grafico estructura pudo encontrar los relación entre ninguna dos gente.

Si este mecanismo se hubiera incorporado al modelo de dominio, nos hubiera costado de dos
maneras. los modelo haría tener estado acoplado para a especial método de resolviendo los
problema, limitando el futuro opciones Más importante, los modelo de un organización haría tener
estado muy complicado y confuso. Mantener el mecanismo y el modelo separados permitió un
estilo declarativo de describir organizaciones. que era mucho más claro Y los intrincado código
por grafico manipulación era aislado en un puramente mecánico estructura, establecido en
probado algoritmos, que pudo ser mantenido y unidad probada en aislamiento.

Otro ejemplo de un MEC ANISMO C OHESIVO sería un marco para construir objetos de
ESPEC IFIC ACIÓN y soportar las operaciones básicas de comparación y combinación que se
esperan de ellos. Al emplear dicho marco, el DOMINIO PRINC IPAL y los SUBDOMINIOS GENÉRIC OS
pueden declarar sus ESPEC IFIC ACIONES en los claro, fácilmente entendido idioma descrito en que
patrón (ver Capítulo 10 ). los intrincado operaciones involucrado en que lleva fuera los
comparaciones y combinaciones lata ser izquierda al estructura.



SUBDOMINIO GENÉRICO Versus M ECANISMO COHESIVO _ _

Tanto los SUBDOMINIOS GENÉRIC OS como los MEC ANISMOS C OHESIVOS están motivados por el
mismo deseo de descargar los C ENTRO DOMINIO . los diferencia es los naturaleza de los
responsabilidad tomado en. A SUBDOMINIO GENÉRIC O es establecido en un expresivo modelo que
representa algunos aspecto de cómo los equipo ve el dominio. En esta eso es no diferente que
los C ENTRO DOMINIO , sólo menos central, menos importante, menos especializado. UN
MEC ANISMO C OHESIVO no representa el dominio; resuelve algunos cálculos complicados
problema planteado por los expresivo modelos

Un modelo propone; un MEC ANISMO C OHESIVO dispone.

En la práctica, a menos que reconozca un cálculo publicado y formalizado, esta distinción no
suele ser pura, al menos no al principio. En sucesivas refactorizaciones podría destilarse en un
mecanismo más puro o ser transformado dentro a GENÉRIC O SUBDOMINIO con algunos previamente
poco reconocido conceptos modelo que haría hacer los mecanismo sencillo.


Cuando un M ECANISMO es parte del DOMINIO BÁSICO

Tú casi siempre querer para retirar MEC ANISMOS desde los C ENTRO DOMINIO . los una excepción es
Cuándo

a MEC ANISMO es sí mismo propiedad y a llave parte de los valor de los software. Esta es a veces el
caso de algoritmos altamente especializados. Por ejemplo, si una de las características
distintivas de un envío logística solicitud fueron a particularmente eficaz algoritmo por trabajando
fuera horarios, ese MEC ANISMO podría ser considerado parte del NÚC LEO conceptual . Una vez
trabajé en un proyecto en una inversión Banco en cual muy propiedad algoritmos por
clasificación riesgo fueron definitivamente en los DOMINIO PRINC IPAL . (De hecho, se mantuvieron
tan estrechamente que incluso a la mayoría de los desarrolladores de C ORE no se les permitió
para ver ellos.) De curso, estas algoritmos están probablemente a especial implementación de un
conjunto de normas que De Verdad predecir riesgo. Más adentro análisis puede que dirigir para a
Más adentro modelo que haría permitir esos normas para ser explícito, con un encapsulado
resolviendo mecanismo.

Pero que haría ser otro incremental mejora en los diseño, por otro día. los decisión como para ya
sea para ir que próximo paso haría ser establecido en a coste-beneficio análisis: Cómo difícil haría
sea para trabajo fuera que nuevo ¿diseño? Cómo difícil es los Actual diseño para comprender y
¿modificar? ¿Cuánto más fácil sería con un diseño más avanzado, para el tipo de personas que
se espera que hagan el trabajo? Y, por supuesto, ¿alguien tiene idea de qué forma podría tener
el nuevo modelo? ¿llevar?


Ejemplo
Círculo completo: el organigrama reabsorbe su M ECANISMO

De hecho, un año después de que completamos el modelo de organización del ejemplo
anterior, otros desarrolladores lo rediseñaron para eliminar la separación del marco gráfico.
Sintieron el aumento objeto contar y los complicación de separando los MEC ANISMO dentro a
separar el paquete era no garantizado. En lugar de, ellos agregado nodo conducta para los
padre clase de los ENTIDADES organizativas . Todavía, ellos retenido los declarativo público
interfaz de los organización modelo. Ellos incluso guardado los MEC ANISMO encapsulado, dentro
de los organizativo ENTIDADES .

Estos círculos completos son comunes, pero no regresan a su punto de partida. El resultado
final suele ser a Más adentro modelo que más claramente diferencia hechos, objetivos, y
MEC ANISMOS . Refactorización pragmática retiene los importante virtudes de los intermedio
etapas tiempo derramamiento los complicaciones innecesarias.


Destilando a un Declarativo Estilo

Declarativo diseño y "declarativo estilo" es a tema de Capítulo 10 , pero que diseño estilo merece
especial mencionar en esta capítulo en estratégico destilación. los valor de destilación es siendo
poder para mira qué usted están haciendo: corte para los esencia sin siendo distraído por
irrelevante detalle. Partes importantes del DOMINIO PRINC IPAL pueden seguir un estilo
declarativo, cuando el diseño de apoyo proporciona un lenguaje económico para expresar los
conceptos y reglas del PRINC IPAL mientras encapsula los medio de informática o hacer cumplir
ellos.

C OHERENTE _ MEC ANISMOS están por lejos más útil Cuándo ellos proveer acceso a través de un
INTERFAZ QUE REVELA LA INTENC IÓN , con AFIRMAC IONES conceptualmente coherentes y
FUNC IONES LIBRES DE EFEC TOS SEC UNDARIOS . M EC ANISMOS y flexible diseños permitir los C ENTRO
DOMINIO para hacer significativo declaraciones en vez de vocación oscuro funciones Pero un
excepcional saldar llega Cuándo parte de los C ENTRO DOMINIO mismo descansos a través de
para a profundo modelo y empieza para función como a idioma que lata Rápido lo más
importante solicitud escenarios flexiblemente y de manera concisa

Un modelo profundo a menudo viene con un diseño flexible correspondiente. Cuando un diseño
flexible alcanza la madurez, eso proporciona un fácilmente entendido colocar de elementos que
lata ser conjunto inequívocamente para realizar tareas complejas o expresar información
compleja, al igual que las palabras se combinan en oraciones. En que punto, cliente código toma

en a declarativo estilo y lata ser mucho más destilado.

Factorización fuera GENÉRIC O SUBDOMINIOS reduce desorden, y C OHESIVO MEC ANISMOS atender para
encapsular complejo operaciones. Esta sale de detrás a más enfocado modelo, con menos
distracciones que agregar sin particular valor para los manera usuarios conducta sus
ocupaciones. Pero usted están improbable siempre para encontrar buenas casas por todo en los
dominio modelo que es no NÚC LEO . los AISLADO C ENTRO toma a Acercamiento directo para
estructuralmente calificación apagado los C ENTRO DOMINIO ....


[ Equipo LiB ]

[ Equipo LiB ]


Núcleo segregado
Los elementos en el modelo pueden servir parcialmente al DOMINIO PRINCIPAL y
parcialmente jugar como soporte . papeles CENTRO elementos mayo ser estrechamente
acoplado para genérico unos. los la cohesión conceptual del CORE puede no ser fuerte
o visible. Todo este desorden y enredo ahoga los NÚCLEO . Diseñadores hipocresía
claramente ver los más importante relaciones, llevando a a débil diseño.

Al eliminar los SUBDOMINIOS GE NÉRIC OS , elimina algunos de los detalles que oscurecen el
dominio, lo que hace que el NÚC LEO sea más visible. Pero es un trabajo duro identificar y
aclarar todos estos subdominios, y algunos de ellos no parecer valor los problema. Mientras
tanto, los muy importante DOMINIO PRINC IPAL es izquierda enredado con los residuo.

Por lo tanto:

Refactorice el modelo para separar los conceptos BÁSICOS de los jugadores de apoyo
(incluidos los conceptos mal definidos). unos) y fortalecer los cohesión de los CENTRO
tiempo reduciendo su acoplamiento para otro código. Factor todos genérico o
secundario elementos dentro otro objetos y lugar en otros paquetes, incluso si esto
significa refactorizar el modelo de manera que separe altamente acoplado elementos.

Esta es básicamente tomando los mismo principios nosotros aplicado para GENÉRIC O
SUBDOMINIOS pero desde los otra dirección. Los subdominios cohesivos que son fundamentales
para nuestra aplicación se pueden identificar y particionar dentro coherente paquetes de sus
propio. Qué es hecho con los indiferenciado masa Dejado atrás es importante, pero no como
importante. Eso lata ser izquierda más o menos donde eso era, o metido en paquetes
establecido en prominente clases Finalmente, más y más de los residuo lata ser factorizado en
GENÉRIC O SUBDOMINIOS , pero en los pequeño término ninguna fácil solución voluntad hacer, sólo
entonces los enfocar en la segregada C ENTRO es retenido.


Los pasos necesarios para refactorizar a NÚC LEO SEGREGADO suelen ser similares a estos:


1. Identificar a C ENTRO subdominio (posiblemente dibujo desde los destilación documento).

2. Moverse relacionados clases para a nuevo MÓDULO , llamado por los concepto que relaciona
ellos.

3. refactorizar código para cortar datos y funcionalidad que están no directamente expresiones
de los concepto. Coloque los aspectos eliminados en clases (posiblemente nuevas) en
otros paquetes. Trate de colocarlos con conceptualmente relacionados Tareas, pero no
desperdicio también mucho hora siendo Perfecto. Mantenerse centrado en limpiar el
subdominio C ORE y hacer explícitas las referencias de este a otros paquetes y
Autoexplicativo.

4. Refactorice el nuevo MÓDULO PRINC IPAL SEGREGADO para simplificar sus relaciones e
interacciones y más comunicativo, y para minimizar y aclarar su relaciones con otros
MÓDULOS . (Esta se convierte un en curso refactorización objetivo.)

5. Repetir con otro C ENTRO subdominio Hasta que los AISLADO C ENTRO es completo.

5.

Los costos de crear un NÚCLEO SEGREGADO

segregando los C ENTRO voluntad a veces hacer relaciones con estrechamente acoplado no BÁSICO
clases mas oscuro o incluso más Complicado, pero que costo es superado por los beneficio de
aclarando el C ENTRO DOMINIO y haciendo eso mucho más fácil para trabajo en.

El NÚC LEO SEGREGADO le permitirá mejorar la cohesión de ese DOMINIO DEL NÚC LEO . Hay muchos
significativos formas de rotura abajo a modelo, y a veces en los creación de a AISLADO NÚC LEO un
MÓDULO muy bien cohesivo puede romperse, sacrificando esa cohesión en aras de resaltar la
cohesión del DOMINIO NÚC LEO . Esta es una ganancia neta, porque el mayor valor agregado de la
empresa software llega desde los específico de la empresa aspectos de los modelo.

los otro costo, de curso, es que segregar los C ENTRO es a lote de trabajo. Eso deber ser
reconoció que a decisión para ir para a AISLADO C ENTRO voluntad potencialmente absorber
desarrolladores en cambios todos sobre el sistema.

los hora para picar fuera a AISLADO C ENTRO es Cuándo usted tener a grande ENC ERRADO C ONTEXTO
que es crítico para el sistema, pero donde la parte esencial del modelo está siendo oscurecida
por una gran cantidad de apoyo capacidad.


Decisión del equipo en evolución

Al igual que con muchas decisiones de diseño estratégico, un equipo completo debe moverse
juntos a un NÚC LEO SEGREGADO . Este paso requiere un proceso de decisión en equipo y un
equipo lo suficientemente disciplinado y coordinado para llevar fuera los decisión. los desafío es
para constreñir todo el mundo para utilizar los mismo definicion de los C ENTRO tiempo no
congelación que decisión. Porque los C ENTRO DOMINIO evoluciona sólo me gusta cada otro aspecto
de a diseño, experiencia trabajando con a AISLADO C ENTRO voluntad dirigir para nuevo
perspectivas dentro lo que es esencial y lo que es un elemento de apoyo. Esas ideas deberían
retroalimentar una definición refinada. de los C ENTRO DOMINIO y de los AISLADO C ENTRO MÓDULOS .

Esta medio que nuevo perspectivas deber ser compartido con los equipo en un en curso base,
pero un individuo (o programación par) no poder Actuar en esos perspectivas unilateralmente. Lo
que los proceso es por decisiones conjuntas, ya sea consenso o equipo líder directiva, eso deber
ser ágil suficiente para hacer correcciones de rumbo repetidas. La comunicación debe ser lo
suficientemente efectiva para mantener a todos juntos en una sola vista de el NÚC LEO .


Ejemplo
Segregación del CORE de un modelo de envío de carga

Nosotros comienzo con los modelo mostrado en Figura 15.2 como los base de software por carga
coordinación de envíos.



Figura 15.2.

Nota que esta es muy simplificado comparado para qué haría probable ser necesario por a
verdadero solicitud. un realista modelo haría ser también incómodo por un ejemplo. Por lo tanto,
aunque esta ejemplo podría no ser Complicado suficiente para conducir nosotros para a AISLADO
NÚC LEO , llevar a salto de imaginación para trata esto modelo como siendo también complejo para
interpretar fácilmente y trato con como a entero.

Ahora bien, ¿cuál es la esencia del modelo de envío? Por lo general, un buen lugar para
comenzar a buscar es el "fondo línea." Esta puede que dirigir nosotros para enfocar en fijación
de precios y facturas. Pero nosotros De Verdad necesitar para Mira en el DOMINIO VISIÓN
DEC LARAC IÓN . Aquí es un extracto desde esta una.

. . . Aumento visibilidad de operaciones y proveer herramientas para realizar cliente
requisitos más rápido y más seguramente...

Esta solicitud es no siendo diseñado por los Ventas Departamento. Eso es yendo para ser usado
por los primera linea operadores de los empresa. Entonces vamos relegar todos relacionado con
el dinero cuestiones para (cierto es que importantes) papeles secundarios. Alguien ya colocó
algunos de estos artículos en un paquete separado ( Facturación ). Nosotros lata mantenerse
que, y más reconocer que eso obras de teatro a secundario papel.

los enfocar necesidades para ser en los carga manejo: entrega de los carga según para
requerimientos del cliente. extrayendo los clases más directamente involucrado en estas
ocupaciones produce un SEGREGADO C ENTRO en a nuevo paquete llamado entrega , como
mostrado en Figura 15.3 .


Figura 15.3. La entrega confiable de acuerdo con los requisitos del
cliente es el objetivo principal de este proyecto.

Para los más parte, clases tener sólo movido dentro los nuevo paquete, pero allí tener estado a
pocos cambios para los modelo sí mismo.

Primero, el Acuerdo del Cliente ahora restringe el Paso de Manejo . Esto es típico de las
percepciones que tender para aumentar como los equipo segrega los NÚC LEO . Como atención
es enfocado en efectivo, correcto entrega, eso se convierte claro que los entrega restricciones
en los Cliente Convenio son fundamentales y deberían ser explícito en los modelo.

El otro cambio es más pragmático. En el modelo refactorizado, se adjunta el Acuerdo de
Cliente directamente para los carga , bastante que requiriendo a navegación a través de los
cliente _ (Eso tendrá para ser adjunto Cuándo los Carga es reservado, sólo como los Cliente
es.) En real entrega tiempo, el Cliente no es tan relevante para las operaciones como el propio
contrato. En el otro modelo, había que encontrar el Cliente correcto , según el papel que
desempeñaba en el envío, y luego consultar por su Cliente acuerdo _ Esta Interacción haría
obstruir arriba cada historia usted colocar fuera para hablar del modelo. La nueva asociación
hace que los escenarios más importantes sean tan simples y directos como posible. Ahora eso
se convierte fácil para jalar los Cliente fuera de los C ENTRO en total.

¿Y qué hay de sacar al Cliente , de todos modos? La atención se centra en el cumplimiento
de los requisitos del Cliente.

requisitos, por lo que al principio el Cliente parece pertenecer al NÚC LEO . Sin embargo, las
interacciones durante el parto hacer no generalmente necesitar para involucrar los Cliente
clase ahora que los Cliente El acuerdo es disponible directamente. Y los básico modelo de a
Cliente es bonito genérico.

Se podría presentar un fuerte argumento para que Leg permanezca en el C ORE . Tiendo a ser
minimalista en el C ORE , y el tramo tiene una cohesión más estrecha con el programa de
transporte, el servicio de enrutamiento y la ubicación . ninguna de cual necesario para ser
en los NÚC LEO . Pero si a lote de los cuentos I querido para decir sobre esto modelo involucrado
piernas _ Identificación moverse eso dentro los Entrega paquete y sufrir los torpeza de su
separación desde esos otro clases

En esta ejemplo, todos los clase definiciones están los mismo como antes de, pero con
frecuencia destilación requiere refactorización los clases ellos mismos para separar los
genérico y específico del dominio responsabilidades, que lata luego ser aislado.

Ahora que nosotros tener a AISLADO NÚC LEO , los refactorización es completo. Pero los Transporte
paquete estamos izquierda con es sólo "todo izquierda sobre después nosotros tirado fuera los
NÚC LEO ". Nosotros lata seguir arriba con otras refactorizaciones para obtener más comunicativo
embalaje, como mostrado en Figura 15.4 .


Figura 15.4. Los MÓDULOS significativos para los subdominios que no
son BÁSICOS siguen después de que se completa el
BÁSICO SEGREGADO .

Eso puede que llevar varios refactorizaciones para obtener para esta punto; eso no tener para
ser hecho todos en una vez. Aquí, terminamos con un paquete BÁSIC O SEGREGADO , un
SUBDOMINIO GENÉRIC O y dos paquetes específicos de dominio en funciones de apoyo. Una visión
más profunda podría eventualmente producir un SUBDOMINIO GENÉRIC O por cliente , o eso
puede que final arriba más especializado por Envío.

reconociendo útil, significativo MÓDULOS es a modelado actividad (como discutido en
Capítulo 5 ). Desarrolladores y dominio expertos colaborar en estratégico destilación como
parte de los crujido de conocimientos proceso.


[ Equipo LiB ]

[ Equipo LiB ]


Núcleo abstracto

Incluso los C ENTRO DOMINIO modelo generalmente posee entonces mucho detalle que comunicado
los grande imagen lata ser dificil.


Nosotros generalmente trato con a grande modelo por rotura eso dentro más estrecho
subdominios que están pequeña suficiente para ser agarrado y colocación ellos en separar
MÓDULOS . Esta reductivo estilo de embalaje con frecuencia trabaja para hacer a Complicado
modelo manejable. Pero a veces creando separar MÓDULOS lata oscuro o incluso complicar los
interacciones Entre los subdominios

Cuando hay mucha interacción entre subdominios en MÓDULOS separados , muchos
referencias voluntad tener para ser creado Entre MÓDULOS , cual derrotas mucho de el
valor de los fraccionamiento, o los Interacción voluntad tener para ser hecha
indirecto, cual hace el modelo oscuro.

Considerar rebanar horizontalmente bastante que verticalmente Polimorfismo da nosotros los
energía para ignorar a gran parte de la variación detallada entre instancias de un tipo abstracto.
Si la mayoría de las interacciones entre MÓDULOS se pueden expresar a nivel de interfaces
polimórficas, puede tener sentido refactorizarlas tipos dentro a especial C ENTRO MÓDULO .

No estamos buscando un truco técnico aquí. Esta es una técnica valiosa solo cuando las
interfaces polimórficas corresponden a conceptos fundamentales en el dominio. En ese caso,
separando estas abstracciones se desacopla los MÓDULOS tiempo destilando a menor y más
NÚC LEO cohesivo DOMINIO .

Por lo tanto:

Identifique los conceptos más fundamentales en el modelo y factorícelos en
distintos

clases, resumen clases, o interfaces Diseño esta resumen modelo entonces que eso
expresa la mayor parte de la interacción entre los componentes significativos.
Coloque este modelo general abstracto en su propio MÓDULO , tiempo los especializado,
detallado implementación clases están dejado en sus propio MÓDULOS definido por
subdominio

Más de los especializado clases voluntad ahora referencia los RESUMEN C ENTRO MÓDULO pero
no los otros especializados MÓDULOS . los RESUMEN C ENTRO da a sucinto vista de los principal
conceptos y sus interacciones.

El proceso de factorizar el NÚC LEO ABSTRAC TO no es mecánico. Por ejemplo, si todas las clases a
las que se hace referencia con frecuencia en los MÓDULOS se movieron automáticamente a un
MÓDULO separado , los probable resultado haría ser a sin sentido lío. Modelado un RESUMEN C ENTRO
requiere a entendimiento profundo de los llave conceptos y los papeles ellos jugar en los
importante interacciones de los sistema. En otras palabras, es un ejemplo de refactorización a
una visión más profunda. Y por lo general requiere considerable rediseñar

los RESUMEN C ENTRO deberían final arriba mirando a lote me gusta los destilación documento (si
ambas cosas fueron usado en el mismo proyecto, y el documento de destilación había
evolucionado con la aplicación a medida que se profundizaba la comprensión). De curso, los
RESUMEN C ENTRO voluntad ser escrito en código, y por lo tanto más riguroso y más completo.



[ Equipo LiB ]

[ Equipo LiB ]


Destilación de modelos profundos
Destilación lo hace no funcionar solamente en los bruto nivel de separando partes de los
dominio fuera del NÚC LEO . _ También significa refinar esos subdominios, especialmente el
DOMINIO PRINC IPAL , a través de refactorización hacia Más adentro visión, conduciendo hacia a
profundo modelo y flexible diseño. los meta es a diseño que hace los modelo obvio, a modelo
que expresa los dominio simplemente. Un modelo profundo destila los aspectos más
esenciales de un dominio en elementos simples que se pueden combinar para resolver los
importante problemas de los solicitud.

Aunque a descubrimiento para a profundo modelo proporciona valor en cualquier
sitio eso sucede, eso es en el CENTRO DOMINIO que eso lata cambiar los trayectoria de
un completo proyecto.

[ Equipo LiB ]

[ Equipo LiB ]


Elección de objetivos de refactorización
Cuándo usted encuentro a grande sistema que es mal factorizado, donde hacer usted
¿comienzo? En los comunidad XP, los responder tiende para ser cualquiera una de estas:

1. Sólo comienzo en cualquier sitio, porque eso todos posee para ser refactorizado

2. Comienzo donde quiera eso es lastimando voy a refactorizar qué I necesitar para en pedido
para obtener mi específico tarea hecho.

I no sostener con cualquiera de estas. los primero es poco práctico excepto en a pocos
proyectos personal asignado íntegramente con los mejores programadores. El segundo
tiende a hurgar en los bordes, tratando los síntomas e ignorando raíz causas, timidez fuera
desde los peor enredos Finalmente los código se convierte más duro y más difícil para
refactorizar

Entonces, si no puedes hacerlo todo, y no puedes ser impulsado por el dolor, ¿qué haces?

1. En una refactorización impulsada por el dolor, se busca si la raíz involucra el DOMINIO
PRINC IPAL o la relación de los C ENTRO para a secundario elemento. Si eso lo hace, usted
morder los bala y reparar eso primero

2. Cuándo usted tener los lujo de refactorización libremente, usted enfocar primero en mejor
factorización de los DOMINIO PRINC IPAL , en mejorando los segregación de los NÚC LEO , y en
purificación secundario subdominios a ser GENÉRIC O .

Esta es cómo para obtener los más estallido por tu
refactorización dólar. [ Equipo LiB ]

[ Equipo LiB ]


Capítulo dieciséis. Estructura a gran
escala

Miles de personas trabajaron de forma independiente para crear el edredón del
SIDA.



Se había contratado a una pequeña empresa de diseño de Silicon Valley para crear un
simulador para un sistema de comunicaciones por satélite. sistema. Trabajo era progresando
bien. A IMPULSADO POR MODELO DISEÑO era desarrollando eso podría Rápido y simular a amplio
rango de la red condiciones y fallas

Pero los dirigir desarrolladores en los proyecto fueron difícil. los problema era inherentemente
complejo. Conducido por los necesitar para aclarar los intrincado relaciones en los modelo, ellos
tenido descompuesto los diseño en coherente MÓDULOS de manejable Talla. Ahora allí fueron a lote
de MÓDULOS . Cual paquete deberían un desarrollador Mira en para encontrar a especial aspecto
de funcionalidad? Donde deberían a nuevo clase ser ¿metido? Qué hizo algunos de estas poco
paquetes De Verdad ¿significar? Cómo hizo ellos todos encajar ¿juntos? Y allí todavía estaba más
para construir.

los desarrolladores comunicado bien con una otro y pudo todavía figura fuera qué para hacer
desde día a día, pero los líderes del proyecto no se contentaron con bordear el borde de la
comprensibilidad. querían algunos manera de organizando los diseño entonces que eso pudo ser
entendido y manipulado como se movio para los próximo nivel de complejidad.

Hicieron una lluvia de ideas. Había muchas posibilidades. Se propusieron esquemas de
embalaje alternativos. Quizás algunos documento pudo dar un visión de conjunto de los sistema,
o algunos nuevo puntos de vista de el diagrama de clases en la herramienta de modelado
podría guiar a un desarrollador al MÓDULO correcto . Pero los líderes del proyecto no eran
satisfecho con estas trucos

Ellos pudo decir a sencillo historia de sus simulación, de los manera datos haría ser ordenado a
través de una infraestructura, su integridad y enrutamiento seguro por capas de
telecomunicaciones tecnología. Cada detalle de que historia era en los modelo, aún los amplio
arco de los historia pudo no ser visto.

Algunos esencial concepto desde los dominio era desaparecido. Pero esta hora eso era no a clase
o faltan dos desde los objeto modelo, eso era a desaparecido estructura por los modelo como a
entero.

Después los desarrolladores especiado sobre los problema por a semana o dos, los idea comenzó
para cuajar. Ellos impondría una estructura al diseño. Todo el simulador se vería como una serie
de capas relacionadas para aspectos de los comunicaciones sistema. los fondo capa haría
representar los infraestructura física, los básico capacidad para transmitir pedacitos desde una
nodo para otro. Luego allí haría ser un enrutamiento de paquetes capa que trajo juntos los
preocupaciones de cómo a especial datos Arroyo haría ser dirigido Otras capas identificarían
otros niveles conceptuales del problema. Estas capas perfilarían sus historia de los sistema.

Ellos colocar fuera para refactorizar los código para ajustarse para los nuevo estructura.
MÓDULOS _ tenido para ser redefinido así como no para lapso capas. En algunos casos, objeto
responsabilidades fueron refactorizado entonces que cada el objeto pertenecería claramente a
una capa. Por el contrario, a lo largo de este proceso las definiciones de los conceptos capas
ellos mismos fueron refinado establecido en los las manos en experiencia de aplicar ellos.
los capas, MÓDULOS , y objetos coevolucionado Hasta que, en los final, los completo diseño
seguido los contornos de esta en capas estructura.

Estas capas fueron no MÓDULOS o ninguna otro artefacto en los código. Ellos fueron un general
colocar de reglas que limitaban los límites y las relaciones de cualquier MÓDULO u objeto en
particular a lo largo los diseño, incluso en interfaces con otro sistemas

Imponente esta pedido trajo los diseño espalda para cómodo inteligibilidad. Gente supo
aproximadamente donde para Mira por a especial función. Individuos trabajando
independientemente pudo hacer decisiones de diseño que fueron en general consistente con
cada otro. los complejidad techo tenido estado levantado

Incluso con a MODULAR desglose, a grande modelo lata ser también Complicado para sujetar. los
fragmento de MÓDULOS los diseño dentro manejable muerde, pero allí mayo ser muchos de ellos.
También, modularidad no necesariamente traer uniformidad para los diseño. Objeto para
objeto, paquete para paquete, a revoltijo de diseño decisiones mayo ser aplicado, cada
defendible pero idiosincrático.

los estricto segregación impuesto por ENC ERRADO C ONTEXTOS previene corrupción y Confusión,
pero lo hace no, en sí mismo, hacer eso más fácil para ver los sistema como a entero.

Destilación lo hace ayuda por enfoque atención en los C ENTRO DOMINIO y fundición otro
subdominios en sus papeles secundarios. Pero aún es necesario comprender los elementos de
apoyo y sus relaciones. para los C ENTRO DOMINIO —y para cada otro. Y tiempo los C ENTRO DOMINIO
haría idealmente ser así claro y fácilmente entendido que no adicional Guia haría ser necesario,
nosotros están no siempre a eso punto.

En un proyecto de cualquier tamaño, las personas deben trabajar de forma algo independiente
en diferentes partes del sistema. Sin ninguna coordinación o normas, a Confusión de diferente
estilos y distinto soluciones al mismo problemas surge, haciendo eso duro para comprender cómo
los partes encajar juntos y imposible de ver los grande imagen. Aprendiendo sobre una parte de
los diseño voluntad no transferir para otro partes, entonces el proyecto voluntad final arriba con
especialistas en diferente MÓDULOS quién no poder ayuda cada otro fuera de su estrecho rango.
C ONTINUO _ INTEGRAC IÓN descansos abajo y los ENC ERRADO C ONTEXTO fragmentos

En un gran sistema sin ningún principio general que permita que los elementos sean

interpretados en términos de su papel en patrones que abarcan todo el diseño, los
desarrolladores no pueden ver los bosque por los árboles _ Nosotros necesitar para ser
poder para comprender los papel de un parte individual en los entero sin profundizando dentro los
detalles de los entero.

A "Gran escala estructura" es a idioma que vamos usted discutir y comprender los sistema en
grandes rasgos. A colocar de nivel alto conceptos o normas, o ambas cosas, establece a patrón de
diseño por un sistema entero. Esta organizando principio lata guía diseño como bien como ayuda
comprensión. Eso ayuda coordinar el trabajo independiente porque hay un concepto compartido
del panorama general: cómo los roles de varias partes forma los entero.

Idear a patrón de normas o papeles y relaciones que voluntad lapso los completo
sistema y eso permite una cierta comprensión del lugar de cada parte en el todo,
incluso sin detalles conocimiento de los partes responsabilidad.

Estructura mayo ser confinado para una ENC ERRADO C ONTEXTO pero voluntad generalmente lapso
más que una, proporcionando el conceptual organización para sostener juntos todos los equipos y
subsistemas involucrado en los proyecto. A bien estructura da visión dentro los modelo y
complementa destilación.

No puede representar la mayoría de las estructuras a gran escala en UML y no necesita hacerlo.
La mayoría de las estructuras a gran escala forma y explicar los modelo y diseño pero hacer no
aparecer en eso. Ellos proveer un nivel adicional de comunicación sobre los diseño. En los
ejemplos de esta capítulo, lo harás ver muchos UML informal diagramas en cual He superpuesto
información sobre los Gran escala estructura.

Cuándo a equipo es razonablemente pequeña y los modelo es no también Complicado,
descomposición dentro bien llamado MÓDULOS , a cierto Monto de destilación, y informal
coordinación entre desarrolladores puede ser suficiente para mantenerse los modelo organizado.

Una estructura a gran escala puede salvar un proyecto, pero una estructura mal ajustada
puede obstaculizar gravemente el desarrollo. Esta capítulo explora patrones por
exitosamente estructurando a diseño en esta nivel.


Figura 16.1. Algunos patrones de estructura a gran escala.

[ Equipo LiB ]

[ Equipo LiB ]


Orden en evolución
Muchos desarrolladores tener experimentado los costo de un desestructurado diseño. Para evitar
anarquía, los proyectos imponen arquitecturas que constreñir desarrollo en varios formas.
Algunos técnico arquitecturas resuelven problemas técnicos, como redes o persistencia de
datos, pero cuando las arquitecturas comienzan a aventurarse dentro los arena de los solicitud y
dominio modelo, ellos lata crear problemas de los suyos Ellos con frecuencia evitar los
desarrolladores desde creando diseños y modelos que trabajo bien por los detalles de los
problema. los más ambicioso unos lata incluso llevar fuera desde solicitud los desarrolladores de
familiaridad y técnico energía de los programación idioma sí mismo. Y ya sea técnico u orientadas
al dominio, las arquitecturas que congelan muchas decisiones de diseño iniciales pueden
convertirse en una camisa de fuerza como requisitos cambiar y como comprensión profundiza

Tiempo algunos técnico arquitecturas (tal como J2EE) tener volverse prominente sobre los años,
La estructura a gran escala en la capa de dominio no se ha explorado mucho. Las necesidades
varían ampliamente de una aplicación para los próximo.

Un en la delantera imposición de a Gran escala estructura es probable para ser costoso. Como
desarrollo procede, usted voluntad casi ciertamente encontrar a más apropiado estructura, y
usted mayo incluso encontrar que los la estructura prescrita le prohíbe tomar una ruta de diseño
que aclararía o simplificaría en gran medida la aplicación. Tú mayo ser poder para utilizar
algunos de los estructura, pero estás renunciando oportunidades Su trabajo se ralentiza a
medida que intenta soluciones alternativas o trata de negociar con los arquitectos. Pero sus
gerentes piensan que la arquitectura está hecha. Se suponía que iba a facilitar esta aplicación,
así que ¿por qué no usted trabajando en los solicitud en lugar de de relación comercial con todos
estas arquitectura ¿problemas? Los administradores y arquitectura equipos mayo incluso ser
abierto para aporte, pero si cada cambiar es a heroico batalla, eso es también agotador.

Diseñe sistemas de producción libres para todos que nadie pueda entender como un
todo, y son muy difícil para mantener. Pero arquitecturas lata camisa de fuerza a
proyecto con diseño frontal suposiciones y llevar también mucho energía fuera desde
los desarrolladores/diseñadores de particular partes de los solicitud. Pronto,
desarrolladores voluntad tonto abajo los solicitud caber los estructura, o ellos
voluntad subvertir eso y tener no estructura en todos, trayendo espalda los
problemas de descoordinado desarrollo.

los problema es no los existencia de estrella de guía normas, pero bastante los rigidez y fuente
de esos normas. Si las reglas que rigen el diseño realmente se ajustan a las circunstancias, no
se interpondrán en el camino, sino que en realidad empujar desarrollo en a servicial dirección,
como bien como proveer consistencia.

Por lo tanto:

Dejar esta conceptual Gran escala estructura evolucionar con los solicitud,
posiblemente cambiando a un tipo completamente diferente de estructura en el
camino. No restrinja demasiado los detalles diseño y modelo decisiones que deber ser
hecha con detallado conocimiento.

Individual partes tener natural o útil formas de siendo organizado y expresado que mayo no aplicar
para los entero, entonces imponente global normas hace estas partes menos ideal. Elegir para
utilizar a estructura a gran escala favores manejabilidad de los modelo como a entero sobre
óptimo estructurando de los partes individuales. Por lo tanto, habrá cierto compromiso entre la
estructura unificadora y la libertad para expresar los componentes individuales de la manera
más natural. Esto se puede mitigar seleccionando la estructura con base en la experiencia real
y el conocimiento del dominio y evitando el exceso de constricción. estructuras A De Verdad
agradable encajar de estructura para dominio y requisitos Realmente hace detallado modelado y
diseño más fácil, por Ayudar para rápidamente eliminar a lote de opciones

La estructura también puede brindar atajos a las decisiones de diseño que, en principio,
podrían encontrarse trabajando en los individual objeto nivel, pero haría, en práctica, llevar
también largo y tener resultados inconsistentes. Por supuesto, la refactorización continua
sigue siendo necesaria, pero esto hará que sea más manejable. proceso y lata ayuda hacer
diferente gente venir arriba con consistente soluciones

Una estructura a gran escala generalmente necesita ser aplicable a través de C ONTEXTOS
LÍMITES . A través de la iteración en a verdadero proyecto, a estructura voluntad perder
caracteristicas que estrechamente unir eso para a especial modelo y evolucionar
caracteristicas que corresponder para C ONC EPTUAL C ONTORNOS de los dominio. Esta no Significa
que eso voluntad tener no suposiciones sobre los modelo, pero eso voluntad no imponer sobre
los completo ideas de proyectos adaptado para a especial local situación. Eso posee para salir
libertad por desarrollo equipos en distinto C ONTEXTOS para variar los modelo en formas que
habla a sus local necesidades.

Además, las estructuras a gran escala deben adaptarse a las limitaciones prácticas del
desarrollo. Por ejemplo, diseñadores mayo tener no control sobre los modelo de algunos partes
de los sistema, especialmente en el caso de subsistemas externos o heredados. Esto podría
manejarse cambiando la estructura para que se ajuste mejor a los elementos externos
específicos. Podría manejarse especificando formas en que la aplicación relaciona para
exterioridad. Eso puede que ser manejado por haciendo los estructura suelto suficiente para
flexionarse incómodo realidades

a diferencia de los C ONTEXTO MAPA , a Gran escala estructura es Opcional. Una deberían ser
impuesto Cuándo costos y beneficios favor eso, y Cuándo a adecuado estructura es fundar. En
hecho, eso es no necesario por sistemas que son lo suficientemente simples para ser entendidos
cuando se dividen en MÓDULOS . Se debe aplicar una estructura a gran escala. Cuándo a
estructura lata ser fundar que muy aclara los sistema sin forzar restricciones
antinaturales en el desarrollo del modelo. Debido a que una estructura mal ajustada
es peor que ninguna, es mejor no buscar la exhaustividad, sino encontrar un conjunto
mínimo. que resuelve los problemas que tener surgió. Menos es más.

Una estructura a gran escala puede ser muy útil y aun así tener algunas excepciones, pero esas
excepciones necesitan para ser marcado de alguna manera, entonces que desarrolladores lata
asumir los estructura es siendo seguido a menos que de otro modo señalado. Y si esos
excepciones comienzo para obtener numeroso, los estructura necesidades para ser cambiado o
descartado.


Como se mencionó, no es poca cosa crear una estructura que brinde la libertad necesaria a los
desarrolladores y al mismo tiempo evitar el caos. Aunque se ha trabajado mucho en la
arquitectura técnica por software sistemas, poco posee estado publicado en los estructurando de
los dominio capa. Algunos enfoques debilitan el paradigma orientado a objetos, como los que
rompen el dominio por solicitud tarea o por utilizar caso. Esta entero área es todavía
subdesarrollado. He observado unos pocos general patrones de Gran escala estructuras que
tener surgido en varios proyectos voy a discutir cuatro en este capítulo. Uno de estos puede
ajustarse a sus necesidades o dar lugar a ideas para una estructura adaptada a sus
necesidades. proyecto.


[ Equipo LiB ]

[ Equipo LiB ]


Metáfora del sistema
Metafórico pensando es penetrante en software desarrollo, especialmente con modelos Pero
el extremo Programación práctica de "metáfora" posee venir para significar a especial
manera de utilizando una metáfora para traer pedido para los desarrollo de a entero
sistema.


Sólo como a cortafuegos lata salvar a edificio desde a fuego furioso a través de vecino edificios,
a El software "firewall" protege la red local de los peligros de las redes más grandes del
exterior. Esta metáfora posee influenciado la red arquitecturas y conformado a entero producto
categoría. Múltiples competidores cortafuegos—desarrollados independientemente, entendido
para ser algo intercambiables—están disponibles para los consumidores. Los novatos en redes
captan fácilmente el concepto. Este entendimiento compartido en toda la industria y entre los
clientes se debe en gran parte a la metáfora.

Aún eso es un inexacto analogía, y su energía cortes ambas cosas formas. los utilizar de los
cortafuegos metáfora posee condujo al desarrollo de barreras de software que a veces son
insuficientemente selectivas e impiden intercambios, tiempo ofrecimiento no proteccion en contra
amenazas originario dentro de los muro.
Inalámbrica LAN, por ejemplo, están vulnerable. los claridad de los cortafuegos posee estado a
bendición, pero todas las metáforas llevar equipaje. [1]

[1] S ISTEMA METÁFORA finalmente hecha sentido para me C uándo I oyó pabellón C unningham utilizar esta
cortafuegos ejemplo en un taller conferencia.

Los diseños de software tienden a ser muy abstractos y difíciles de entender.
Desarrolladores y usuarios por igual necesitar tangible formas para comprender los
sistema y Cuota a vista de los sistema como entero.

En una nivel, metáfora carreras entonces profundamente en los manera nosotros pensar que eso
impregna cada diseño. Los sistemas tienen "capas" que "yacen una encima de la otra". Tienen
"núcleos" en sus "centros". Pero a veces aparece una metáfora que puede transmitir el tema
central de un diseño completo y proporcionar a compartido comprensión entre todos equipo
miembros

Cuándo esta sucede, los sistema es Realmente conformado por los metáfora. A desarrollador
voluntad hacer decisiones de diseño consistente con los sistema metáfora. Esta consistencia
voluntad habilitar otro desarrolladores interpretar los muchos partes de a complejo sistema en
condiciones de los mismo metáfora. los desarrolladores y expertos tener a referencia punto en
discusiones que mayo ser más hormigón que los modelo sí mismo.

A SISTEMA METÁFORA es a suelto, fácilmente entendido, Gran escala estructura que eso es
armonioso con el objeto paradigma. Porque los SISTEMA METÁFORA es solamente un analogía
para los dominio de todos modos, diferente modelos lata mapa para eso en un aproximado
manera, cual permite eso para ser aplicado en múltiples LÍMITES C ONTEXTOS , Ayudar para
coordinar trabajo Entre ellos.

S YSTEM METAPHOR se ha convertido en un enfoque popular porque es una de las prácticas
centrales de la Programación Extrema (Beck 2000). Desafortunadamente, pocos proyectos
han encontrado METÁFORAS realmente útiles , y gente tener intentado para empujar los idea dentro
dominios donde eso es contraproducente. un persuasivo metáfora presenta los riesgo que los
diseño voluntad llevar en aspectos de los analogía que son no deseable por los problema en
mano, o que los analogía, tiempo seductor, mayo no ser apto.

Que dijo, SISTEMA METÁFORA es a bien conocido formulario de Gran escala estructura que es útil
en algunos proyectos, y eso bien ilustra los general concepto de a estructura.

Por lo tanto:

Cuándo a hormigón analogía para los sistema emerge que capturas los imaginación de
miembros del equipo y parece conducir el pensamiento en una dirección útil,
adoptarlo como una estructura a gran escala. Organizar los diseño alrededor esta
metáfora y absorber eso dentro los LENGUA UBICUO . los SISTEMA METÁFORA deberían
ambas cosas facilitar comunicación sobre los sistema y guía desarrollo de eso. Esta
aumenta consistencia en diferente partes de los sistema, potencialmente incluso a
través de diferentes CONTEXTOS LÍMITES . Pero debido a que todas las metáforas son
inexactas, reexamina continuamente la metáfora para ver si es demasiado extensa o
inadecuada, y prepárate para soltar eso si eso obtiene en los manera.



La "metáfora ingenua" y por qué no la necesitamos

Porque a útil metáfora no regalo sí mismo en más proyectos, algunos en los XP la comunidad
tiene venir para hablar de los ingenuo metáfora , por cual ellos significar los dominio modelo
sí mismo.

Una problema con esta término es que a maduro dominio modelo es cualquier cosa pero ingenuo.
En hecho, "El procesamiento de la nómina es como una línea de montaje" es probablemente
una visión mucho más ingenua que un modelo que es el producto. de muchos iteraciones de
conocimiento crujido con dominio expertos, y que posee estado probado por siendo
estrechamente tejido dentro los implementación de a trabajando solicitud.

El término metáfora ingenua debe ser retirado.

S ISTEMA METÁFORAS están no útil en todos proyectos Gran escala estructura en general es no
esencial. En los 12 prácticas de Extremo Programación, los papel de a METÁFORA DEL SISTEMA
pudo ser cumplido por un LENGUAJE UBIC UO . Los proyectos deben aumentar ese LENGUAJE con
METÁFORAS DEL SISTEMA u otros estructuras Cuándo ellos encontrar una que encaja bien.


[ Equipo LiB ]

[ Equipo LiB ]


Capas de responsabilidad
A lo largo de esta libro, individual objetos tener estado asignado estrecho conjuntos de
relacionados responsabilidades. Impulsado por la responsabilidad diseño además se aplica para
más grande escamas.


Cuándo cada individual objeto posee hecho a mano responsabilidades, allí están no
pautas, sin uniformidad y sin capacidad para manejar grandes franjas del dominio
juntas. Para dar coherencia para a grande modelo, eso es útil para imponer algunos
estructura en los asignación de esos responsabilidades.

Cuándo usted ganar a profundo comprensión de a dominio, amplio patrones comienzo para
volverse visible. Algunos dominios tienen una estratificación natural. Ciertos conceptos y
actividades tienen lugar en un contexto de otros elementos que cambian de forma
independiente ya un ritmo diferente por diferentes razones. Cómo lata nosotros llevar ventaja
de esta natural estructura, hacer eso más visible y ¿útil? Esta estratificación sugiere capas, uno
de los patrones de diseño arquitectónico más exitosos ( Buschmann et Alabama. 1996 , entre
otros).

Capas están particiones de a sistema en cual los miembros de cada dividir están consciente de y
están capaz de utilizar los servicios de los capas "debajo," pero inconsciente de y independiente
de los capas "encima." Cuando se dibujan las dependencias de MÓDULOS , a menudo se
presentan de modo que un MÓDULO con dependientes aparece debajo su dependientes En esta
manera, capas a veces clasificar ellos mismos fuera así que eso ninguna de los objetos en los más
bajo niveles es conceptualmente dependiente en esos en más alto capas.

Pero esta anuncio hoc capas, tiempo eso lata hacer rastreo dependencias más fácil—y a veces
hace algunos intuitivo sentido—no dar mucho visión dentro los modelo o guía modelado
decisiones Nosotros necesitamos algo más intencional.


Figura 16.2. Capas ad hoc: ¿De qué se tratan estos paquetes?

En un modelo con una estratificación natural, las capas conceptuales se pueden definir en
torno a las principales responsabilidades, uniendo los dos poderoso principios de capas y
impulsado por la responsabilidad diseño.

Estas responsabilidades deber ser importantemente más amplio que esos típicamente asignado
para objetos individuales, como ejemplos voluntad ilustrar dentro de poco. Como individual
MÓDULOS y AGREGADOS están diseñados, se tienen en cuenta para mantenerlos dentro de los
límites de una de estas responsabilidades principales. este nombre agrupamiento de
responsabilidades por sí mismo pudo mejorar los comprensibilidad de a sistema modularizado,
ya que los responsabilidades de MÓDULOS pudo ser más fácilmente interpretado. Pero
combinación de alto nivel responsabilidades con capas da nosotros un organizando principio por
a sistema.



Por lo tanto:

Mire las dependencias conceptuales en su modelo y las diferentes tasas y fuentes de
cambiar de diferente partes de tu dominio. Si usted identificar natural Estratos en los
dominio, emitir ellos como amplio resumen responsabilidades. Estas responsabilidades
deberían decir a historia del propósito de alto nivel y el diseño de su sistema.
Refactorice el modelo para que las responsabilidades de cada objeto de dominio,
AGGREGATE y MODULE encajen perfectamente dentro de la responsabilidad . de una capa.

Esta es a bonito resumen descripción, pero eso voluntad volverse claro con a pocos ejemplos los
comunicaciones satelitales simulador cuyo historia abrió esta capítulo en capas su
responsabilidad. I tener visto C APAS DE RESPONSABILIDAD utilizadas con buenos resultados en
dominios tan diversos como el control de fabricación y las finanzas administración.


los siguiente ejemplo explora RESPONSABILIDAD C APAS en detalle para dar a sentir por los
descubrimiento de a gran escala estructura de ninguna clasificar, y los manera eso guías y
restringe modelado y diseño.
The layering pattern that serves best for RESPONSIBILITY LAYERS is the variant called
RELAXED LAYERED SYSTEM (Buschmann et al. 1996, p. 45), which allows components of a
layer to access any lower layer, not just the one immediately below.

Ejemplo
En profundidad: capas de un sistema de envío

Vamos Mira en los trascendencia de aplicar RESPONSABILIDAD CAPAS para los carga Envío
aplicación discutida en los ejemplos de anterior capítulos

Como nosotros reunirse con los historia, los equipo posee hecha considerable Progreso creando
a IMPULSADO POR MODELO DISEÑO y destilando a C ENTRO DOMINIO . Pero como los diseño carnes
fuera, ellos están teniendo problema coordinando como todos los partes encajar juntos. Ellos
están mirando por a Gran escala estructura que lata traer fuera el principal temas de sus
sistema y mantenerse todo el mundo en los mismo página.

Aquí hay un vistazo a una parte representativa del modelo.


Figura 16.3. Un modelo de dominio de envío básico para enrutar
cargas


Figura 16.4. Uso del modelo para enrutar una carga durante la
reserva

los equipo miembros tener estado empapado en los dominio de Envío por meses, y ellos
Haber notado algunos natural estratificación de su conceptos. Eso es bastante razonable para
discutir horarios de transporte (los programado viajes de buques y trenes) sin referente para
los cargamentos a bordo de esos transportes Eso es más difícil para hablar sobre seguimiento
a carga sin referente para los transporte de carga eso. los conceptual dependencias están
bonito claro. los equipo lata fácilmente distinguir dos capas: "Operaciones" y los sustrato de
esos operaciones, cual ellos doblar "Capacidad."

Responsabilidades "Operativas"

Ocupaciones de los empresa, pasado, Actual, y planificado, están recogido dentro los
Operaciones capa. lo mas obvio Operaciones objeto es carga , cual es los enfocar de más de los
día a día actividad de la compañia. La Especificación de Ruta es parte integral de la Carga ,
indicando los requisitos de entrega. los Itinerario es los Operacional entrega plan. Ambas cosas
de estas objetos están parte de la carga AGREGADO , y sus la vida ciclos están atado para los hora
marco de un activo entrega.


Responsabilidades de "Capacidad"

Esta capa refleja los recursos los empresa sorteos sobre en pedido para llevar fuera
operaciones. el transito Pierna es a clásico ejemplo. los buques están programado para
correr y tener a cierto capacidad llevar carga, cual mayo o mayo no ser completamente
utilizado.

Cierto, si nosotros fueron enfocado en operando a Envío flota, Tránsito Pierna haría ser en los
Capa de operaciones. Pero a los usuarios de este sistema no les preocupa ese problema. (Si la
empresa estuviera involucrada en ambas cosas esos ocupaciones y querido los dos coordinado,
los desarrollo equipo podría tener para considerar a diferente capas esquema, quizás con dos
distinto capas, tal como "Operaciones de Transporte" y "Carga Operaciones.")

Una decisión más complicada es dónde colocar Customer . En algunas empresas, los clientes
tienden a ser transitorios: son interesantes mientras se entrega un paquete y luego se olvidan
en su mayoría hasta la próxima vez. Esta cualidad haría que los clientes solo sean una
preocupación operativa para un servicio de entrega de paquetería. dirigido en individual
consumidores Pero nuestro hipotético Envío empresa tiende para cultivar a largo plazo relaciones
con clientes, y más trabajo llega desde repetir negocio. Dado estas intenciones de los negocio
usuarios , los Cliente pertenece en los potencial capa. Como usted lata ver, esto no fue una
decisión técnica . Fue un intento de capturar y comunicar el conocimiento del dominio.

Porque los asociación Entre Carga y Cliente lata ser atravesado en solamente una dirección, la
carga REPOSITORIO voluntad necesitar a consulta que encuentra todos cargamentos por a
especial cliente _ Ahí estamos bien razones para diseño eso que manera de todos modos, pero
con los imposición de los Gran escala estructura, está ahora a requisito.


Figura 16.5. Una consulta reemplaza una asociación bidireccional que
viola la estratificación.


Figura 16.6. Un modelo en capas de primer paso

Tiempo los distinción Entre Operaciones y Capacidad aclara los imagen, pedido continúa
evolucionar. Después a pocos semanas de experimentación, los equipo ceros en en otro
distinción. Para lo más parte, ambas cosas inicial capas enfocar en situaciones o planes como
ellos son _ Pero los enrutador (y Muchos otros elementos excluido desde esta ejemplo) no es
parte de Actual Operacional realidades o planes Ayuda hacer decisiones sobre cambiando esos
planes los equipo define a nuevo capa responsable por "Decisión Apoyo."


Responsabilidades de "Apoyo a la toma de decisiones"

Esta capa de los software proporciona los usuario con herramientas por planificación y decisión
haciendo, y podria potencialmente automatizar algunos decisiones (tal como automáticamente
cambio de ruta cargamentos Cuándo un transporte calendario cambios).

los enrutador es a SERVIC IO que ayuda a reserva agente escoger los mejor manera para enviar
a carga _ estos lugares los enrutador de lleno en Decisión Apoyo.

los referencias dentro de esta modelo están todos consistente con los Tres capas excepto por una
elemento discordante: el atributo "se prefiere" en el tramo de transporte . Este atributo
existe porque la empresa prefiere para utilizar su propio buques Cuándo eso lata, o los buques
de cierto otro empresas con la cual eso posee favorable contratos los "es privilegiado" atributo
es usado para parcialidad los enrutador hacia estos transportes favorecidos. Este atributo no
tiene nada que ver con "Capacidad". Es una política que dirige la toma de decisiones. Para
usar las nuevas C APAS DE RESPONSABILIDAD , el modelo tendrá que ser refactorizado.


Figura 16.7. Refactorización del modelo para ajustarse a la nueva
estructura de capas

Esta factorización hace que la política de sesgo de ruta sea más explícita al mismo tiempo
que hace que el tramo de transporte esté más centrado en los fundamental concepto de
transporte capacidad. A Gran escala estructura establecido en un profundo comprensión de los
dominio voluntad con frecuencia empujar los modelo en direcciones que aclarar su sentido.

Este nuevo modelo ahora encaja sin problemas en la estructura a gran escala.


Figura 16.8. El modelo reestructurado y refactorizado

A desarrollador acostumbrado para los elegido capas lata más fácilmente discernir los papeles y
dependencias de los partes. los valor de los Gran escala estructura aumenta como los
complejidad crece

Nota que aunque Yo soy ilustrando esta ejemplo con a modificado UML diagrama, los dibujo es
sólo una forma de comunicar las capas. UML no incluye esta notación, por lo que esta es
información adicional impuesto por los motivo de los lector. Si código es los último diseño
documento por su proyecto, sería útil tener una herramienta para buscar clases por capa o al
menos para informarlas por capa.


¿Cómo afecta esta estructura al diseño en curso?

Una vez a Gran escala estructura posee estado adoptado, subsecuente modelado y diseño
decisiones debe tomar eso dentro cuenta. Para ilustrar, suponer que nosotros deber agregar a
nuevo rasgo para esta ya diseño en capas. los dominio expertos tener sólo dicho nosotros que
enrutamiento restricciones aplicar por cierto categorías de materiales peligrosos. Ciertos
materiales pueden no estar permitidos en algunos transportes o en algunos puertos. Nosotros
tener para hacer los enrutador cumplir estas reglamentos

Ahí están muchos posible enfoques. En los ausencia de a Gran escala estructura, una diseño
atractivo haría ser para dar los responsabilidad de incorporando estas enrutamiento normas
para los objeto que posee los Ruta Especificación y los Peligroso Material (Materiales
peligrosos) código, es decir los carga _


Figura 16.9. Un posible diseño para el enrutamiento de carga
peligrosa



Figura 16.10.




El problema es que este diseño no se ajusta a la estructura a gran escala. Servicio de política
de rutas HazMat es no los problema; eso encaja pulcramente dentro los responsabilidad de los
Decisión Apoyo capa. El problema es los dependencia de Carga (un Operacional objeto) en
materiales peligrosos Ruta Política servicio (un Decisión Apoyo objeto). Como largo como
los proyecto es comprometido para estas capas, esta modelo no puede ser permitido. Eso haría
confundir desarrolladores quién previsto los estructura para ser seguido.

Ahí están siempre muchos diseño posibilidades, y bien sólo tener para escoger otro uno uno que
sigue los normas de los Gran escala estructura. los materiales peligrosos Ruta Política
Servicio es todos Correcto, pero tenemos que mover la responsabilidad de usar la política.
Intentemos darle al enrutador la responsabilidad . por coleccionar apropiado políticas antes de
buscando por a ruta. Esta medio cambiando el enrutador interfaz para incluir objetos que
políticas puede que depender en. Aquí es a posible diseño.


Figura 16.11. Un diseño acorde con las capas

Una interacción típica se muestra en la Figura 16.12 en la página siguiente.



Figura 16.12.

Ahora, esta no es necesariamente a mejor diseño que los otro. Ellos ambas cosas tener
ventajas y contras. Pero si todos en a proyecto hace decisiones en a consistente manera, los
diseño como a entero voluntad ser mucho más comprensible, y que es valor algunos modesto
compensaciones en detallado diseño opciones

Si los estructura es forzando muchos incómodo diseño elecciones, luego en acuerdo con EN
EVOLUC IÓN ORDEN , debería ser evaluado y quizás modificado o incluso descartado.


Elegir Apropiado Capas

Hallazgo bien RESPONSABILIDAD C APAS , o ninguna Gran escala estructura, es a importar de
comprensión el problema dominio y experimentando Si usted permitir ORDEN EVOLUTIVO , los
inicial a partir de punto es no es crítico, aunque una mala elección añade trabajo. La estructura
bien puede evolucionar hacia algo irreconocible. Por lo tanto, las pautas sugeridas aquí deben
aplicarse al considerar las transformaciones. de los estructura como mucho como Cuándo
eligiendo desde rasguño.

Como capas obtener conmutado fuera, fusionado, separar, y redefinido, aquí están algunos útil
caracteristicas mirar por y preservar.

Narración de cuentos . los capas deberían comunicar los básico realidades o prioridades
de los dominio. Elegir una estructura a gran escala es menos una decisión técnica que
una decisión de modelado de negocios. los capas deberían traer fuera los prioridades de
los negocio.

Conceptual dependencia _ los conceptos en los "superior" capas deberían tener sentido en
contra el telón de fondo de los "más bajo" capas, tiempo los capa inferior conceptos
deberían ser significativo Estando solo.

CONCEPTUAL _ CONTORNOS . Si los objetos de diferente capas deberían tener diferente tarifas
de cambiar o diferente fuentes de cambiar, los capa acomoda los cizallamiento Entre ellos.

Eso no es siempre necesario para comienzo desde rasguño en definiendo capas por cada nuevo
modelo. Cierto capas

aparecen en familias enteras de dominios relacionados.

Para ejemplo, en negocios establecido en explotando grande reparado capital activos, tal como
suerte o carga buques, logístico software lata con frecuencia ser organizado dentro a
"Potencial" capa (otro nombre Para el "Capacidad" capa en los ejemplo) y un "Operaciones"
capa.

potencial _ ¿Qué se puede hacer? No importa lo que estemos planeando hacer. ¿Qué
podríamos hacer? Los recursos de la organización, incluida su gente, y la forma en que se
organizan esos recursos. están los centro de los Potencial capa. Contratos con vendedores
además definir potenciales. Esta capa podría reconocerse en casi cualquier dominio
empresarial, pero es una parte importante del historia en esos negocios, tal como
transporte y fabricación, que tener relativamente grande reparado capital inversiones que
habilitar los negocio. Potencial incluye transitorio activos así como, pero a negocio impulsado
ante todo por transitorio activos puede que escoger capas que enfatizar esto, como discutido
luego. (Esta capa era llamado " Capacidad " en los ejemplo.)

operación _ Qué es siendo ¿hecho? Qué tener nosotros administrado para hacer de esos
potenciales? Como el Potencial capa, esta capa deberían reflejar los realidad de los
situación, bastante que qué queremos eso para ser. En esta capa nosotros están difícil
para ver nuestro propio esfuerzos y ocupaciones: Qué nosotros estamos vendiendo, en
lugar de lo que nos permite vender. Es muy típico de los objetos operativos hacer
referencia o incluso estar compuestos por objetos potenciales, pero un objeto potencial
no debería hacer referencia los Operaciones capa.

En muchos, quizás la mayoría, de los sistemas existentes en dominios de este tipo, estas dos
capas cubren todo (aunque allí pudo ser algunos enteramente diferente y más revelador
desglose). rastrean los Actual situación y activo Operacional planes y asunto informes o
documentos sobre eso. Pero seguimiento es no siempre suficiente. Cuándo proyectos buscar
para guía o ayudar usuarios, o para automatizar la decisión haciendo, allí es un adicional colocar
de responsabilidades que lata ser organizado dentro otra capa, encima Operaciones.

Decisión Apoyo _ Qué acción deberían ser tomado o qué política deberían ser ¿colocar? Esta
capa es para analizar y decisión haciendo. Eso bases su análisis en información desde más
bajo capas, tal como potencial o Operaciones. Decisión Apoyo software mayo utilizar
histórico información para buscar activamente oportunidades por Actual y futuro
operaciones.

Los sistemas de soporte de decisiones tienen dependencias conceptuales en otras capas, como
Operaciones o Potencial. porque decisiones no son hecha en a aspiradora. A lote de proyectos
implementar Decisión Soporte utilizando tecnología de almacenamiento de datos. La capa se
convierte en un C ONTEXTO LÍMITE distinto , con un C LIENTE/PROVEEDOR relación con los Operaciones
software. En otro proyectos, eso es más profundamente integrado, como en los anterior
extendido ejemplo. Y una de los intrínseco ventajas de capas es eso los más bajo capas lata existe
sin los más alto unos. Esta lata facilitar escalonado introducciones o nivel superior mejoras
construido en cima de más viejo Operacional sistemas

Otro caso es software que hace cumplir elaborar negocio normas o legal requisitos, cual puede
constituir a RESPONSABILIDAD CAPA .

política _ Qué están los normas y ¿objetivos? Normas y objetivos están principalmente
pasivo, pero constreñir el comportamiento en otro capas. Diseño estas interacciones lata
ser sutil. A veces a Política se pasa como argumento a un método de nivel inferior. A
veces se aplica el patrón ESTRATEGIA. Política obras bien en conjunción con a Decisión
Apoyo capa, cual proporciona los significados para buscar los objetivos colocar por
Política, constreñido por los normas colocar por Política.

Política capas lata ser escrito en los mismo idioma como los otro capas, pero ellos están a
veces implementado usando motores de reglas. Esto no los coloca necesariamente en un

C ONTEXTO LÍMITE separado . En hecho, los dificultad de coordinando tal diferente implementación
tecnologías lata ser aliviado por meticulosamente utilizando los mismo modelo al otro lado de
ambas cosas. Cuándo normas están escrito establecido en a

diferente modelo que los objetos ellos aplicar para, cualquiera los complejidad va manera
arriba o los los objetos obtienen tonto abajo para mantenerse cosas manejable.


Figura 16.13. Dependencias conceptuales y puntos de corte en un
sistema de automatización de fábrica

Muchas empresas no basan su capacidad en plantas y equipos. En servicios financieros o
seguros, por citar dos, el potencial está determinado en gran medida por las operaciones
actuales. Un seguro de de la empresa capacidad para llevar en a nuevo riesgo por aseguramiento
a nuevo política convenio es en base a la diversificación de su negocio actual. La capa Potencial
probablemente se fusionaría con Operaciones, y a diferente capas haría evolucionar.

Un área que suele destacarse en estas situaciones son los compromisos adquiridos con los
clientes.


compromiso _ Qué tener nosotros ¿prometido? Esta capa posee los naturaleza de Política,
en que eso objetivos de los estados que directo futuro operaciones, pero eso posee los
naturaleza de Operaciones en que surgen compromisos y cambiar como a parte de en
curso negocio actividad.


Figura 16.14. Dependencias conceptuales y puntos de corte en un
sistema de banca de inversión

Las capas de Potencial y Compromiso no son mutuamente excluyentes. Un dominio en el que
ambos son prominentes, decir a transporte empresa con a lote de personalizado Envío servicios,
puede que utilizar ambas cosas. Otro capas más específico para esos dominios puede que ser útil
también. Cambiar cosas. Experimentar. Pero es mejor para mantenerse los capas sistema
sencillo; yendo más allá de cuatro o posiblemente cinco se convierte pesado. Teniendo también
muchos capas no es como eficaz en narración los historia, y los problemas de complejidad la gran
escala estructura era quiso decir para resolver voluntad venir espalda en a nuevo formulario. los
Gran escala la estructura debe ser ferozmente destilado.

Aunque estas cinco capas están aplicable para a rango de empresa sistemas, ellos hacer no
capturar el saliente responsabilidades de todos dominios En otro casos, eso haría ser
contraproducente para tratar para forzar el diseño dentro esta forma, pero allí mayo ser a natural
colocar de RESPONSABILIDAD C APAS que hacer trabajo. Para un dominio completamente ajeno a
los que hemos discutido, estas capas podrían tener que ser completamente original. Por último,
usted tener para utilizar tu intuición, comienzo algun lado, y dejar los ORDEN EVOLUC IONA .


[ Equipo LiB ]

[ Equipo LiB ]


Nivel de conocimiento

[A CONOCIMIENTO NIVEL es] a grupo de objetos que describe cómo otro grupo de los
objetos deben comportarse. [Martín Cazador de aves, "Responsabilidad,"
www.martinfowler.com ]

CONOCIMIENTO _ NIVEL desenreda cosas Cuándo nosotros necesitar para dejar algunos parte de
los modelo sí mismo ser el plastico en el del usuario las manos aún constreñido por a más amplio
colocar de normas. Eso direcciones requisitos por software con configurable conducta, en cual los
papeles y relaciones entre ENTIDADES deber ser cambiado en instalación o incluso en tiempo de
ejecución

En Análisis Patrones ( cazador 1996 , páginas. 24–27), los patrón surge desde a discusión de
modelando la responsabilidad dentro de organizaciones, y eso es luego aplicado para destino
normas en contabilidad. Aunque el patrón aparece en varios capítulos, eso no tener a capítulo de
su propio porque eso es diferente de la mayoría de los patrones en el libro. En lugar de modelar
un dominio, como hacen los otros patrones de análisis, C ONOC IMIENTO NIVEL estructuras a
modelo.

Para ver los problema concretamente, considerar modelos de "responsabilidad." Organizaciones
están hecha arriba de personas y organizaciones más pequeñas, y definir los roles que
desempeñan y las relaciones entre ellos. los normas gobernante esos papeles y relaciones variar
muy por diferente organizaciones De acuerdo empresa, a "Departamento" puede que ser con
membrete por a "Director" quién informes para a "Vicio Presidente". En otra empresa, un
"módulo" está encabezado por un "Gerente" que reporta a un "Gerente Senior". Luego están
las organizaciones "matriz", en las que cada persona reporta a diferentes gerentes para
diferentes funciones. propósitos

A típico solicitud haría hacer algunos suposiciones Cuándo esos no lo hizo encajar, usuarios haría
comienzo usar entrada de datos campos en a diferente manera que ellos fueron destinado a.
Ninguna conducta los solicitud hubiera tenido fallar, como los semántica fueron cambió por los
usuarios Usuarios haría desarrollar soluciones alternativas por el comportamiento, o se
cerrarían las funciones de nivel superior de la aplicación. Se verían obligados a aprender
mapas complicados entre lo que hacían en sus trabajos y la forma en que el software obras.
Ellos haría Nunca ser servido bien.

Cuándo los sistema tenido para ser cambió o sustituido, desarrolladores haría descubrir (cuanto
antes o luego) que el significados de los caracteristicas fueron no qué ellos pareció. Ellos puede
que significar muy diferente cosas en diferente usuario comunidades o en diferente situaciones
Cambiando cualquier cosa sin rotura estos usos superpuestos serían desalentadores. La
migración de datos a un sistema más personalizado requeriría comprender y codificación por
todos esos peculiaridades


Ejemplo
Nómina y Pensiones de Empleados, Parte 1

los HORA Departamento de a talla media empresa posee a sencillo programa por calculador
nómina de sueldos y pensión contribuciones.

Figura 16.15. El modelo antiguo, demasiado restringido para los
nuevos requisitos


Figura 16.16. Algunos empleados representados usando el
modelo antiguo

Pero ahora, los administración posee decidido que los oficina administradores deberían ir dentro
los "beneficio definido" Jubilación plan. los problema es que oficina administradores están
pagado cada hora, y esta modelo hace no permitir mezclando los modelo voluntad tener para
cambiar.

La siguiente propuesta de modelo es bastante simple: simplemente elimine las restricciones.

Figura 16.17. El modelo propuesto, ahora sublimitado


Figura 16.18. Los empleados pueden estar asociados con el plan
incorrecto.

Este modelo permite asociar a cada empleado a cualquier tipo de plan de jubilación, de modo
que cada oficina administrador lata ser cambiado. Esta modelo es rechazado por administración
porque eso lo hace no reflejar empresa política. Algunos administradores pudo ser conmutado y
otros no. O los conserje podría ser cambiado. Gestión quiere a modelo que hace cumplir los
política:

Los administradores de oficina son empleados por hora con planes de jubilación de
beneficios definidos.

Esta política sugiere que los "trabajo título" campo ahora representa un importante
dominio concepto. Desarrolladores pudo refactorizar para hacer que concepto explícito
como un " empleado tipo ."


Figura 16.19. El objeto Tipo permite cumplir los requisitos.

Figura 16.20. A cada Tipo de Empleado se le asigna un Plan de
Jubilación.

Los requisitos se pueden establecer en el LENGUAJE UBIC UO de la siguiente manera:

Se asigna un tipo de empleado al plan de jubilación oa la nómina.

Los empleados están restringidos por el tipo de empleado .

El acceso para editar el objeto Tipo de empleado estará restringido a un "superusuario",
quien realizará los cambios. solamente Cuándo empresa política cambios. Un ordinario
usuario en los personal Departamento puede cambiar Empleados o punto ellos en a diferente
Empleado tipo _

Esta modelo satisface los requisitos los desarrolladores sentido un implícito concepto o dos, pero
eso es solo a persistente sentimiento en los momento. Ellos no tener ninguna sólido ideas para
perseguir, entonces ellos llamada eso un día.

A estático modelo lata porque problemas. Pero problemas lata ser sólo como malo con a
completamente flexible sistema que permite ninguna posible relación para ser presentado. Tal a
sistema haría ser inconveniente para uso y no lo haría permitir los de la organización propio
normas para ser forzado

Completamente personalizando software por cada organización es no práctico porque, incluso si
cada organización podría pagar por personalizado software, los organizativo estructura voluntad
probable cambiar frecuentemente.

Por lo tanto, dicho software debe proporcionar opciones que permitan al usuario configurarlo
para reflejar la estructura actual. de los organización. los problema es que agregando tal
opciones para los modelo objetos los hace pesado. los más flexibilidad usted agregar, los más
complejo eso todos se convierte en

En un solicitud en cual los papeles y relaciones Entre ENTIDADES variar en Diferentes
situaciones, complejidad lata explotar. Ninguno de los dos completamente general
modelos ni muy los personalizados atienden las necesidades de los usuarios. Los
objetos terminan con referencias a otros tipos para cubrir una variedad de casos, o
con atributos que se usan de diferentes maneras en diferentes situaciones. Las clases
que tienen los mismos datos y compor tamiento pueden multiplicarse solo para
acomodar diferente montaje normas.

enclavado dentro nuestro modelo es otro modelo que es sobre nuestro modelo. A
C ONOC IMIENTO NIVEL separa eso autodefinido aspecto de los modelo y hace su restricciones
explícito.

CONOCIMIENTO _ NIVEL es un solicitud para los dominio capa de los REFLEXIÓN patrón, usado en
muchos programas arquitecturas y técnico infraestructuras y descrito bien en Buschmann et
Alabama. 1996 _ R EFLEC TION se adapta a las necesidades cambiantes al hacer que el software
sea "autoconsciente" y al seleccionar aspectos de su estructura y conducta accesible por
adaptación y cambiar. Esta es realizado por terrible los software dentro a "base nivel," cual lleva
los Operacional responsabilidad por la aplicación, y a "meta nivel," cual representa conocimiento
de los estructura y conducta de El software.

Significativamente, el patrón no se denomina "capa" de conocimiento. Por mucho que se
parezca a las capas,

REFLEXIÓN implica dependencias mutuas que se ejecutan en ambas direcciones.

Java posee algunos mínimo incorporado REFLEXIÓN en los formulario de protocolos por
interrogando a clase por su

métodos y entonces adelante. Tal mecanismos permitir a programa para pedir preguntas sobre su
propio diseño. CORBA tiene protocolos REFLEC TION algo más extensos pero similares . Algunas
tecnologías de persistencia ampliar los riqueza de que descripción propia para apoyo parcialmente
automatizado mapeo entre base de datos mesas y objetos. Ahí están otro técnico ejemplos Esta
patrón lata además se aplicado dentro de los dominio capa.

los C ONOC IMIENTO NIVEL proporciona dos útil distinciones Primero, eso se enfoca en los solicitud
dominio, en contraste para familiar aplicaciones de REFLEXIÓN . Segundo, eso lo hace no
esforzarse por completo generalidad. Así como una ESPEC IFIC ACIÓN puede ser más útil que un
predicado general, un conjunto muy especializado de restricciones sobre un conjunto de
objetos y sus relaciones puede ser más útil que un marco generalizado. El NIVEL DE
C ONOC IMIENTO es más simple y puede comunicar la intención específica del diseñador.


Cazador de aves
Terminología
POSA Terminología
[2]
Nivel de conocimiento Metanivel
Nivel de operaciones Nivel básico

[2] POSA es la abreviatura de Pattern-Oriented Software Architecture , de Buschmann et al. 1996 _



Sólo para ser claro, los reflexión herramientas de los programación idioma están no por utilizar
en implementando el C ONOC IMIENTO NIVEL de a dominio modelo. Esos meta-objetos describir los
estructura y comportamiento de los idioma construcciones ellos mismos. En lugar de, los
C ONOC IMIENTO NIVEL deber ser construido de objetos ordinarios .

los C ONOC IMIENTO NIVEL proporciona dos útil distinciones Primero, eso se enfoca en los solicitud
dominio, en contraste con los usos familiares de REFLEC TION . En segundo lugar, no se esfuerza
por lograr la generalidad total. Solo como ESPEC IFIC ACION lata ser más útil que a general
predicado, a muy especializado colocar de restricciones en un conjunto de objetos y sus
relaciones puede ser más útil que un marco generalizado. El C ONOC IMIENTO NIVEL es más simple
y lata comunicar los específico intención de los diseñador.

Por lo tanto:

Crear a distinto colocar de objetos que lata ser usado para describir y constreñir los
estructura y comportamiento del modelo básico. Mantenga estas preocupaciones
separadas como dos "niveles", uno muy hormigón, los otro reflejando normas y
conocimiento que a usuario o superusuario es capaz de personalizar

Me gusta todos poderoso ideas, REFLEXIÓN y C ONOC IMIENTO NIVELES lata ser embriagador. Esta
patrón debe usarse con moderación. Puede desentrañar la complejidad al liberar a los objetos
de operaciones de la necesidad de ser expertos en todos los oficios, pero los indirección eso
presenta lo hace agregar algunos de que oscuridad espalda en. Si el NIVEL DE C ONOC IMIENTO se
vuelve complejo, el comportamiento del sistema se vuelve difícil de entender para los
desarrolladores y usuarios similar. los usuarios (o superusuario) quién configurar eso voluntad
final arriba necesitando los habilidades de a programador—y a meta-nivel programador en que.
Si ellos hacer errores, los la aplicación será comportarse incorrectamente.

También, los básico problemas de datos migración no completamente desaparecer. Cuándo a
estructura en el C ONOC IMIENTO NIVEL es cambió, existente nivel de operaciones objetos tener
para ser tratado con. Eso mayo ser posible por viejo y nuevo para coexistir, pero una manera
o otro, Cuidado análisis es necesario.

Todos de estas cuestiones poner a importante carga en los diseñador de a C ONOC IMIENTO NIVEL .
los diseño posee para ser robusto suficiente para encargarse de no solamente los escenarios
presentado en desarrollo, pero además ninguna escenario para cual a usuario pudo configurar los
software en los futuro. Aplicado juiciosamente, para los puntos donde
Comparing the terminology of KNOWLEDGE LEVEL and REFLEC TION

personalización es crucial y haría de lo contrario distorsionar los diseño, C ONOC IMIENTO
NIVELES lata resolver problemas que están muy duro para encargarse de ninguna otro
manera.


Ejemplo
Nómina y Pensiones de Empleados, Parte 2: N IVEL DE
CONOCIMIENTOS

Nuestro equipo miembros están espalda, y, renovado desde a de la noche dormir, una de ellos
posee empezado para acercarse en una de los incómodo puntos. Por qué fueron cierto objetos
siendo asegurado tiempo otros fueron editado libremente? El grupo de objetos restringidos le
recordó el patrón de NIVEL DE C ONOC IMIENTO , y decidió para tratar eso como a manera de visita
los modelo. Él fundar que los existente modelo pudo ya ser visto esto manera.


Figura 16.21. Reconocer el NIVEL DE CONOCIMIENTO implícito en el
modelo existente

Las ediciones restringidas estaban en el NIVEL DE C ONOC IMIENTO , mientras que las ediciones del
día a día estaban en el operativo nivel. A agradable encajar. Todos los objetos encima los línea
descrito tipos o de larga data políticas los Empleado Escribe efectivamente impuesto conducta
en los empleado _

los desarrollador era intercambio su visión con su colegas Cuándo una de los otro
desarrolladores tenía otro visión. los claridad de vidente los modelo organizado por
C ONOC IMIENTO NIVEL tenido dejar su detectar qué tenido estado molesto su los anterior día. Dos
distinto conceptos fueron siendo conjunto en lo mismo objeto. Ella tenido oyó eso en los idioma
usado en los anterior día pero no había poner su dedo en eso:

Se asigna un tipo de empleado al plan de jubilación oa la nómina.

Pero eso no era realmente una declaración en el LENGUAJE UBIC UO . No había "nómina" en el
modelo. Ellos tenido hablado en los idioma ellos quería , bastante que los una ellos tenido. los El
concepto de nómina estaba implícito en el modelo, agrupado junto con Tipo de empleado .
no habia sido tan obvio antes de los C ONOC IMIENTO NIVEL era apartado fuera, y los muy
elementos en que llave frase todo apareció en los mismo nivel juntos . . . excepto una.

Con base en esta idea, refactorizó nuevamente a un modelo que respalda esa afirmación.

los necesitar por usuario control de los normas por asociando objetos condujo los equipo para a
modelo que tuvo un implícito C ONOC IMIENTO NIVEL .

Figura 16.22. La nómina ahora es explícita, distinta del tipo de
empleado.


Figura 16.23. Cada Tipo de Empleado ahora tiene un Plan de Jubilación
y una Nómina.

CONOCIMIENTO _ NIVEL era insinuado en por los característica acceso restricciones y a "cosa
cosa" tipo de relación. Una vez que estuvo en su lugar, la claridad que proporcionó ayudó a
producir otra idea que desenredó dos importante dominio conceptos por factorización fuera
nómina _

NIVEL DE C ONOC IMIENTO , al igual que otras estructuras de gran escala, no es estrictamente
necesario. Los objetos seguirán funcionando sin él, y la información que separaba el tipo de
empleado de la nómina aún podría haber sido fundar y usado. Ahí mayo venir a hora Cuándo
esta estructura no parecer para ser tracción su peso y lata ser caído. Pero por ahora, eso parece
para decir a útil historia sobre los sistema y ayuda a los desarrolladores luchar con los modelo.


En primero mirada, C ONOC IMIENTO NIVEL mira me gusta a especial caso de RESPONSABILIDAD C APAS
, especialmente La política" capa, pero eso es no. Para una cosa, dependencias correr en ambas
cosas direcciones Entre los niveles, pero con C APAS , más bajo capas están independiente de
superior capas.

En hecho, C ONOC IMIENTO NIVEL lata coexistir con más otro Gran escala estructuras,
Proporcionar un adicional de dimensión de organización.


[ Equipo LiB ]

[ Equipo LiB ]


Marco de componentes enchufables
Las oportunidades surgen en un modelo muy maduro, profundo y destilado. UN MARC O DE
C OMPONENTES ENC HUFABLE generalmente solamente llega dentro jugar después a pocos
aplicaciones tener ya estado implementado en el mismo dominio.


Cuándo a variedad de aplicaciones tener para interoperar, todos establecido en los
mismo abstracciones pero diseñadas independientemente, las traducciones entre
múltiples CONTEXTOS LÍMITES limitan la integración. A COMPARTIDO NÚCLEO es no factible
por equipos que hacer no trabajo cercanamente juntos. La duplicación y la
fragmentación aumentan los costos de desarrollo e instalación, y la interoperabilidad
se convierte muy difícil.

Algunos proyectos exitosos dividen su diseño en componentes, cada uno con la responsabilidad
de ciertos categorías de funciones Generalmente todos los componentes enchufar dentro a central
centro, cual admite cualquier protocolos ellos necesitar y sabe cómo para hablar para los
interfaces ellos proveer. Otro patrones de conectar componentes están además posible. los
diseño de estas interfaces y los centro que los conecta deber ser coordinado, tiempo más
independencia es posible diseño los interiores

Varios ampliamente usado técnico marcos apoyo esta patrón, pero que es a secundario asunto.
Se necesita un marco técnico solo si resuelve algún problema técnico esencial, como la
distribución o compartir un componente entre diferentes aplicaciones. El patrón básico es un
concepto organización de responsabilidades. Eso lata fácilmente ser aplicado dentro de a único
Java programa.

Por lo tanto:

Destilar un NÚCLEO ABSTRACTO de interfaces e interacciones y crear un marco que
permita diverso implementaciones de esos interfaces para ser libremente sustituido
Así mismo, permitir ninguna solicitud para utilizar esos componentes, entonces
largo como eso opera estrictamente a través de interfaces de los RESUMEN NÚCLEO .

Nivel alto abstracciones están identificado y compartido al otro lado de los amplitud de los
sistema; se produce la especialización en MÓDULOS . los central centro de los solicitud es un
RESUMEN C ENTRO dentro de a C OMPARTIDO NÚC LEO . Pero múltiple ENC ERRADO C ONTEXTOS lata mentir
detrás los encapsulado componente interfaces, entonces que esta estructura lata ser
especialmente conveniente Cuándo muchos componentes están viniendo desde muchos
diferentes fuentes, o Cuándo componentes están encapsulando Preexistente software por
integración.

Esto no quiere decir que los componentes deban tener modelos divergentes. Se pueden
desarrollar múltiples componentes dentro de un solo C ONTEXTO si los equipos se INTEGRAN
C ONTINUAMENTE , o pueden definir otro C OMPARTIDO NÚC LEO sostuvo en común por a cercanamente
relacionados colocar de componentes Todos estas las estrategias pueden coexistir fácilmente
dentro de a Gran escala estructura de ENC HUFABLE C OMPONENTES . Otro opción, en algunos casos,
es para utilizar a PUBLIC ADO IDIOMA por los enchufar interfaz de los centro.

Hay algunas desventajas en un MARC O DE C OMPONENTES ENC HUFABLES . Una es que esto es
muy difícil. patrón para aplicar. Eso requiere precisión en los diseño de los interfaces y a
profundo suficiente modelo para capturar los necesario conducta en los RESUMEN NÚC LEO . Otro
importante Abajo es que aplicaciones tener limitado opciones Si un solicitud necesidades a
muy diferente Acercarse para los DOMINIO PRINC IPAL , los estructura voluntad obtener en los
manera. Desarrolladores lata especializarse los modelo, pero ellos no se puede cambiar el
NÚC LEO ABSTRAC TO sin cambiar el protocolo de todos los diversos componentes. Como

resultado, los proceso de continuo refinamiento de los NÚC LEO , refactorización hacia Más
adentro visión, es más o menos congelado en su pistas

Fayad y Johnson (2000) dan una buena mirada a los ambiciosos intentos de MARC OS DE
C OMPONENTES ENC HUFABLES en varios dominios, incluso a discusión de SEMATECH CIM. los éxito
de tales marcos es una historia mixta. Probablemente el mayor obstáculo es la madurez de
comprensión necesaria para diseño a útil estructura. A ENC HUFABLE C OMPONENTE ESTRUC TURA
deberían no ser los primero a gran escala estructura aplicado en a proyecto, ni los segundo. los
más exitoso ejemplos han seguido después los completo desarrollo de múltiple especializado
aplicaciones


Ejemplo
El CIM de SEMATECH Estructura

En a fábrica productor computadora papas fritas, grupos (llamado mucho ) de silicio obleas están
movido desde una maquina para otro a través de cientos de pasos de Procesando Hasta que los
microscópico circuitos ser impreso y grabado en ellos está completo. La fábrica necesita un
software que pueda rastrear cada lote individual, registrar el procesamiento exacto que se le
ha hecho y luego dirigir cualquiera de las fábricas. trabajadores o automatizado equipo para
llevar eso para los próximo apropiado máquina y aplicar el siguiente apropiado proceso. Tal
software es llamado a fabricación ejecución sistema (MES).

cientos de diferente máquinas desde docenas de vendedores están usado, con con cuidado
adaptado recetas en cada paso del camino. Desarrollar software MES que pudiera manejar una
combinación tan compleja fue desalentador y prohibitivamente caro. En respuesta, un industria
consorcio, SEMATECH, desarrolló el CIM Estructura.

El Marco CIM es grande y complicado y tiene muchos aspectos, pero dos son relevantes aquí.
Primero, los estructura define resumen interfaces por los básico conceptos de los semiconductor
Dominio MES: en otras palabras, el DOMINIO PRINC IPAL en forma de NÚC LEO ABSTRAC TO . Estas
definiciones de interfaz incluir ambas cosas conducta y semántica.


Figura 16.24. Un subconjunto altamente simplificado de las
interfaces CIM, con implementaciones de
muestra

Si a vendedor produce a nuevo máquina, ellos tener para desarrollar a especializado
implementación de el proceso Máquina interfaz. Si ellos adherirse para que interfaz, sus
Control de maquina el componente debe enchufar dentro ninguna solicitud establecido en los
CIM Estructura.

Teniendo definido estas interfaces, SEMATECH definido los normas por cual ellos pudo interactuar
en Una aplicación. Ninguna solicitud establecido en los CIM Estructura haría tener para
implementar a protocolo que alojó objetos implementar algunos subconjunto de esos interfaces Si
esta protocolo fueron implementado, y los solicitud estrictamente observado los resumen
interfaces, luego los solicitud pudo contar sobre el prometido servicios de esos interfaces,

independientemente de implementación. los combinación de esos

interfaces y el protocolo para usarlos constituye una estructura a gran escala estrictamente
restrictiva.


Figura 16.25. El usuario coloca mucho en la próxima máquina y
registra el movimiento en la computadora.

El marco tiene requisitos de infraestructura muy específicos. Está estrechamente acoplado a
CORBA para proporcionar persistencia, actas, eventos, y otro técnico servicios. Pero los
interesante Lo importante es la definición de un MARC O DE C OMPONENTES C ONEC TABLES , que
permite a las personas desarrollar software independientemente y suavemente integrar ellos
dentro inmenso sistemas No una sabe todos los detalles de tal a sistema, pero todo el mundo
entiende un visión de conjunto.


Cómo lata miles de gente trabajo independientemente para crear a edredón de más
que 40.000 paneles?

A pocos sencillo normas proveer a Gran escala estructura por los SIDA monumento Edredón,
partida los detalles a individual contribuyentes. Aviso cómo los normas enfocar en los en general
misión (conmemorando personas que han muerto de SIDA), las características de un
componente que hace que la integración sea práctica, y la capacidad para encargarse de los
edredón en más grande secciones (tal como plegable eso).



Aquí se explica cómo crear un panel para la colcha
[Desde los SIDA monumento Edredón Proyecto Web sitio,
www.aidsquilt.org ] Diseñe el panel
Incluir los nombre de los persona usted están recordando. Sentir gratis para incluir
información adicional tal como los fechas de nacimiento y muerte, y a pueblo natal.
. . . [Por favor limitar cada uno panel para una individual . . . .

Elige tus materiales

Recuerda que el edredón se pliega y despliega muchas veces, por lo que la
durabilidad es crucial. Ya que pegamento se deteriora con hora, eso es mejor para
coser cosas para los panel. A peso medio, no estirable tela tal como a algodón Pato o
popelín obras mejor.

Tu diseño lata ser vertical o horizontal, pero los finalizado, ribeteado panel deber ser 3
pies por 6 pies (90 cm x 180 cm), ¡ni más ni menos! Cuando corte la tela, deje un
extra 2–3 pulgadas en cada lado por a dobladillo. Si usted hipocresía dobladillo eso tú
mismo, bien hacer eso por usted. Guata por los paneles es no necesario, pero apoyo es
recomendado. Apoyo ayuda mantener paneles limpio Cuándo ellos están establecido
fuera en los terrestre. Eso además ayuda conservar los forma de El tela.

Crear el panel

Al construir su panel, es posible que desee utilizar algunas de las siguientes técnicas:


Aplique: Coser tela, letras y pequeña recuerdos sobre los antecedentes tela. No
confiar en pegamento no lo haré último.

Pintura: Cepillo en textil pintura o color-rápido teñir, o utilizar un indeleble tinta
bolígrafo. por favor no utilizar "hinchado" pintura; es también pegajoso.

Plantilla: Rastro tu diseño sobre los tela con a lápiz, elevar los plantilla, luego
utilizar un cepillo para aplicar textil pintura o indeleble marcadores

Collage: Hacer Por supuesto que lo que materiales usted agregar para los
panel no lo haré lágrima la fábrica (evitar vidrio y lentejuelas por esta razón),
y ser Por supuesto para evitar muy objetos voluminosos .

Fotos: los mejor manera para incluir fotos o letras es para fotocopia ellos sobre
transferencias de hierro, planchar ellos sobre 100% algodón tela y coser que tela
para los panel. Puedes además poner los Foto en claro el plastico vinilo y coser eso
para los panel (descentrado entonces evita el pliegue).



[ Equipo LiB ]

[ Equipo LiB ]


¿Qué tan restrictiva debe ser una estructura?
Los patrones de estructura a gran escala discutidos en este capítulo van desde la METÁFORA
DEL SISTEMA muy flexible hasta el restrictivo MARC O DE C OMPONENTES C ONEC TABLES . Otras
estructuras son posibles, por supuesto, y incluso dentro de a general estructural patrón, allí es
a lote de elección sobre cómo restrictivo para hacer los normas.

Por ejemplo, las C APAS DE RESPONSABILIDAD dictan una especie de factorización de los
conceptos del modelo y sus dependencias, pero usted pudo agregar normas que haría
especificar comunicación patrones Entre las capas.

Considere una planta de fabricación donde el software dirige cada parte a una máquina donde
se procesa de acuerdo con alguna receta. El proceso correcto se ordena desde una capa de
Política y se ejecuta en un Operaciones capa. Pero inevitablemente allí voluntad ser errores
hecha en los fábrica piso. los real situación voluntad no ser consistente con los normas de los
software. Ahora, un Operaciones La capa debe reflejar el mundo tal como es , lo que significa
que cuando una pieza se coloca ocasionalmente en la máquina equivocada, que información
deber ser aceptado incondicionalmente De alguna manera, esta excepcional necesidades de
condición para ser comunicado para a más alto capa. A Toma de decisiones capa lata luego
utilizar otro políticas para correcto los situación, quizás por cambio de ruta los parte para a
reparar proceso o por desguace eso. pero operaciones lo hace no saber cualquier cosa sobre
más alto capas. los comunicación posee para ser hecho en fuera que no crear bidireccional
dependencias desde los más bajo capas para los más alto unos.

Típicamente, esta señalización haría ser hecho a través de algunos tipo de evento mecanismo.
los Objetos de operaciones haría generar eventos cuando sea sus estado cambió. Política capa
objetos haría escucha para eventos de interés de las capas inferiores. Cuando ocurría un
evento que violaba una regla, la regla se ejecutar un acción (parte de los normas definición)
que hace los apropiado respuesta, o que podría generar un evento por los beneficio de algunos
todavía más alto capa.

En los bancario ejemplo, los valores de activos cambiar (Operaciones), cambiando los valores de
segmentos de una cartera. Cuando estos valores exceden los límites de asignación de cartera
(Política), tal vez se alerte a un comerciante, quién lata comprar o vender activos para
compensación los equilibrio.

Podríamos resolver esto caso por caso, o podríamos decidir un patrón consistente para que
todos lo sigan en las interacciones de objetos de capas particulares. Una estructura más
restrictiva aumenta uniformidad, haciendo los diseño más fácil para interpretar. Si los estructura
encaja, los normas están probablemente empujar desarrolladores hacia bien diseños Dispar
piezas están probable para encajar juntos mejor.

En los otro mano, los restricciones mayo llevar fuera flexibilidad que desarrolladores necesitar.
Muy las rutas de comunicación particulares pueden ser poco prácticas para aplicar a través de
C ONTEXTOS LÍMITES , especialmente en diferentes implementación tecnologías, en a heterogéneo
sistema.

Entonces usted tener para pelear los tentación para construir marcos y regimiento los
implementación de la gran escala estructura. los más importante contribución de los Gran
escala estructura es coherencia conceptual, y dar una idea del dominio. Cada regla estructural
debería facilitar el desarrollo.


[ Equipo LiB ]

[ Equipo LiB ]


Refactorización hacia una estructura adecuada
En un era Cuándo los industria es sacudida apagado excesivo en la delantera diseño, algunos
voluntad ver estructura a gran escala como a reversión para los malo viejo días de cascada
arquitectura. Pero en hecho, los solamente manera un útil estructura lata ser fundar es desde a
muy profundo comprensión de los dominio y los problema, y los práctico manera para que
comprensión es un iterativo desarrollo proceso.

A equipo comprometido para EN EVOLUC IÓN PEDIDO deber sin miedo repensar los Gran escala
estructura a lo largo del ciclo de vida del proyecto. El equipo no debe cargarse con una
estructura concebida desde el principio, cuando no una entendido los dominio o los requisitos
muy bien.

Desafortunadamente, que evolución medio que tu final estructura voluntad no ser disponible en
los comienzo, y eso medio que usted voluntad tener para refactorizar para imponer eso como
usted ir a lo largo de. Esta lata ser caro y difícil, pero eso es necesario _ Ahí están algunos
general formas de controlador los costo y maximizando el ganar.


Minimalismo

Una llave para acuerdo los costo abajo es para mantenerse los estructura sencillo y ligero. no
intento ser exhaustivo. Sólo habla a los más grave preocupaciones y salir los descanso para ser
manejado en un caso por caso base.

Temprano en, eso lata ser servicial para escoger a suelto estructura, tal como a SISTEMA
METÁFORA o a Pareja de RESPONSABILIDAD C APAS . A mínimo, suelto estructura lata sin embargo
proveer ligero directrices que voluntad ayuda evitar caos.


Comunicación y Autodisciplina

los completo equipo deber seguir los estructura en nuevo desarrollo y refactorización Para
hacer esta, la estructura deber ser entendido por los completo equipo. los terminología y
relaciones deber entrar en el ubicuo IDIOMA .

Gran escala estructura lata proveer a vocabulario por los proyecto para trato con los sistema
ampliamente, y por diferente gente independientemente para hacer armonioso decisiones
Pero porque más Gran escala estructuras están suelto conceptual pautas, los equipos deber
ejercicio autodisciplina.

Sin consistente adherencia por los muchos gente involucrado, estructuras tener a tendencia para
decaer. los relación de los estructura para detallado partes de los modelo o implementación es
no generalmente explícito en los código, y funcional pruebas hacer no confiar en los estructura.
Más, los estructura tiende ser resumen, entonces que consistencia de solicitud lata ser difícil
para mantener al otro lado de a grande equipo (o múltiples equipos).

los tipos de conversaciones que llevar lugar en más equipos están no suficiente para mantener a
consistente a gran escala estructura en a sistema. Eso es crítico para incorporar eso dentro los
UBIC UO IDIOMA de el proyecto, y por todo el mundo para ejercicio que idioma implacablemente.


La reestructuración produce un diseño flexible

Segundo, ninguna cambiar para los estructura mayo dirigir para a lote de refactorización los
estructura es evolucionando como sistema complejidad aumenta y comprensión profundiza
Cada hora los estructura cambios, la totalidad sistema posee para ser cambió para adherirse
para los nuevo pedido. Obviamente que es a lote de trabajo.

Esto no es tan malo como parece. He observado que un diseño con una estructura a gran
escala suele ser mucho más fácil de transformar que uno sin ella. Esto parece ser cierto incluso
cuando se cambia de una tipo de estructura para otro, decir desde METÁFORA para C APAS . I
hipocresía enteramente explicar esta. Parte de los responder es que eso es más fácil para
reorganizar algo Cuándo usted lata comprender su disposición actual, y los Preexistente
estructura hace que más fácil. Parcialmente eso es que los disciplina que Tomó para mantener los
más temprano estructura impregna todos aspectos de los sistema. Pero allí es algo más, I
pensar, porque eso es incluso más fácil para cambiar a sistema que posee tenido dos anterior
estructuras

Una chaqueta de cuero nueva es rígida e incómoda, pero después del primer día de uso, los
codos se han flexionado varias veces y se vuelven más fáciles de doblar. Después de algunos
usos más, los hombros tienen aflojado arriba, y los chaqueta es más fácil para poner en.
Después meses de tener puesto, los cuero se vuelve flexible y es cómodo y fácil de mover. Así
parece ser con los modelos que se transforman repetidamente con sonar transformaciones. cada
vez mayor conocimiento es incorporado en ellos y los principal hachas de cambiar tener estado
identificado y hecha flexible, tiempo estable aspectos tienen estado simplificado. los más amplio
C ONC EPTUAL C ONTORNOS de los subyacente dominio están emergente en el modelo estructura.


La destilación aligera la carga

Otro crucial fuerza que deberían ser aplicado para los modelo es continuo destilación. Esta reduce
la dificultad de cambiar la estructura de varias maneras. En primer lugar, al eliminar
mecanismos, SUBDOMINIOS GENÉRIC OS y otras estructuras de soporte del DOMINIO C ENTRAL , es
posible que simplemente quede menos para reestructurar.

Si es posible, estos elementos de soporte deben definirse para encajar en la estructura a gran
escala de una manera sencilla. Por ejemplo, en un sistema de C APAS DE RESPONSABILIDAD , se
podría definir un SUBDOMINIO GENÉRIC O en tal a manera que eso haría encajar dentro de a único
capa. Con ENC HUFABLE C OMPONENTES , a SUBDOMINIO GENÉRIC O pudo ser propiedad enteramente por
a único componente, o eso pudo ser a C OMPARTIDO NÚC LEO entre un conjunto de componentes
relacionados. Es posible que estos elementos de soporte deban refactorizarse para encontrar su
lugar en la estructura; pero se mueven independientemente del DOMINIO PRINC IPAL y tienden a
tener un enfoque más estrecho, lo que lo hace más fácil. Y, en última instancia, son menos
críticos, por lo que el refinamiento importa. menos.

los principios de destilación y refactorización hacia Más adentro visión aplicar incluso para los
estructura a gran escala en sí. Por ejemplo, las capas pueden elegirse inicialmente sobre la
base de una comprensión superficial de los dominio; ellos están gradualmente sustituido con
Más adentro abstracciones que expresar el fundamental responsabilidades de los sistema. Esta
afilado claridad vamos gente ver profundo en el diseño, cual es los meta. Eso es además parte de
los medio, como eso hace manipulación de los sistema encendido a grande escala más fácil y
más seguro

[ Equipo LiB ]

[ Equipo LiB ]


Capítulo diecisiete. Uniendo la estrategia
Los tres capítulos anteriores presentaron muchos principios y técnicas para la estrategia
impulsada por el dominio. diseño. En a grande, complejo sistema, usted mayo necesitar para
traer varios de ellos para oso sobre el mismo diseño. Cómo lo hace a Gran escala estructura
coexistir con a C ONTEXTO MAPA ? Donde hacer el edificio bloques encajar ¿en? Qué hacer usted
hacer ¿primero? ¿Segundo? ¿Tercera? Cómo hacer usted ir sobre ideando tu estrategia?


[ Equipo LiB ]

[ Equipo LiB ]


Combinando Estructuras a Gran Escala y C ONTEXTOS
LÍMITES


Figura 17.1.




los Tres básico principios de estratégico diseño (contexto, destilación, y Gran escala estructura)
no son sustitutos por cada otro; ellos están complementario y interactuar en muchos formas.
Para ejemplo, un Gran escala estructura lata existe dentro de una ENC ERRADO C ONTEXTO, o eso
lata Corte al otro lado de muchos de ellas y organizar los C ONTEXTO MAPA .

los anterior ejemplos de RESPONSABILIDAD C APAS fueron confinado para una ENC ERRADO C ONTEXTO .
Esta es Lo más fácil manera para explicar los idea, y es a común utilizar de los patrón. En tal a
sencillo escenario, el significados de capa nombres están restringido para que C ONTEXTO , como
están los nombres de modelo elementos o subsistema interfaces que existe dentro de que
C ONTEXTO .


Figura 17.2. Estructuración de un modelo dentro de un solo
CONTEXTO ALIMITADO

Tal a local estructura lata ser útil en a muy Complicado pero unificado modelo, levantamiento los
techo de complejidad en cómo mucho lata ser mantenido en a único ENC ERRADO C ONTEXTO .

Pero en muchos proyectos, los mayor que desafío es para comprender cómo dispar partes
encajar juntos. Pueden dividirse en C ONTEXTOS separados , pero ¿qué papel juega cada uno en
el conjunto integrado? sistema y cómo hacer los partes relacionar para cada ¿otro? Luego los
Gran escala estructura puede ser usado para organizar los C ONTEXTO MAPA . En esta caso, los
terminología de los estructura se aplica para El conjunto proyecto (o en menos algunos
claramente encerrado parte de eso).


Figura 17.3. Estructura impuesta a las relaciones de componentes de
distintos CONTEXTOS LÍMITES

Suponga que desea adoptar C APAS DE RESPONSABILIDAD , pero tiene un sistema heredado cuya
organización es inconsistente con tu deseado Gran escala estructura. Hacer usted tener para dar
arriba tus C APAS ? No, pero usted tener para reconocer los real lugar los legado posee dentro de
los estructura. De hecho, puede ayudar a caracterizar el legado. Los SERVIC IOS que
proporciona el legado pueden, de hecho, limitarse a unas pocas C APAS . Poder decir que el
sistema heredado encaja dentro de una RESPONSABILIDAD pa rticular C APAS concisamente describe
a llave aspecto de su alcance y papel.


Figura 17.4. Una estructura que permite que algunos componentes
abarquen capas

Si los legado subsistema capacidades están siendo accedido a través de a FAC HADA , usted
mayo ser poder para diseñar cada SERVIC IO Ofrecido por los FAC HADA para encajar dentro de
una capa.

los interior de los Transporte Coordinación solicitud, siendo a legado en esta ejemplo, es
presentado como un indiferenciado masa. Pero a equipo en a proyecto con a bien establecido
Gran escala estructura que abarca los C ONTEXTO MAPA pudo escoger, dentro de sus C ONTEXTO ,
para pedido sus modelo por los mismo familiar C APAS .


Figura 17.5. La misma estructura aplicada dentro de un CONTEXTO y a
través del
MAPA DE CONTEXTO en su conjunto

De curso, porque cada ENC ERRADO C ONTEXTO es su propio nombre espacio, una estructura pudo ser
usado organizar los modelo dentro de una C ONTEXTO , tiempo otro era usado en a vecino C ONTEXTO
, y Sigue siendo otra organizado los C ONTEXTO MAPA . Sin embargo, yendo también lejos abajo que
sendero lata erosionar los valor de El Gran escala estructura como a unificando colocar de
conceptos por los proyecto.

[ Equipo LiB ]

[ Equipo LiB ]


Combinación de estructuras a gran escala y
destilación
los conceptos de Gran escala estructura y destilación además complemento cada otro. los La
estructura a gran escala puede ayudar a explicar las relaciones dentro del DOMINIO PRINC IPAL y
entre los SUBDOMINIOS GENÉRIC OS .


Figura 17.6. M ÓDULOS del DOMINIO PRINCIPAL ( en negrita ) y SUBDOMINIOS
GENÉRICOS
se aclaran por capas.

Al mismo tiempo, la estructura a gran escala en sí misma puede ser una parte importante del
DOMINIO PRINCIPAL . Por ejemplo, distinguir las capas de soporte potencial, de operaciones, de
políticas y de decisiones destila una perspectiva que es fundamental para el problema
comercial que aborda el software. Esta idea es especialmente útil si a proyecto es tallado arriba
dentro muchos C ONTEXTOS LIMITADOS , entonces que los objetos modelo de los C ENTRO DOMINIO no
tener sentido sobre mucho de los proyecto.

[ Equipo LiB ]

[ Equipo LiB ]


Evaluación primero
Cuándo usted están abordar estratégico diseño en a proyecto, usted necesitar para comienzo
desde a claro evaluación de El Actual situación.

1. Dibujar a C ONTEXTO MAPA . Poder usted dibujar a consistente una, o están allí ambiguo
situaciones?

2. Atender para los utilizar de idioma en los proyecto. Es allí a UBIC UO IDIOMA ? Es eso
suficientemente rico para ayuda ¿desarrollo?

3. Entender qué es importante. Es los C ENTRO DOMINIO ¿identificado? Es allí a DOMINIO
DEC LARAC IÓN DE LA VISIÓN ? Poder usted escribe ¿una?

4. Lo hace los tecnología de los proyecto trabajo por o en contra a IMPULSADO POR MODELO DISEÑO
?

5. Hacer los desarrolladores en los equipo tener los necesario técnico ¿habilidades?

6. Están los desarrolladores experto sobre los ¿dominio? Están ellos interesado en los ¿dominio?

No encontrarás respuestas perfectas, por supuesto. Sabes menos sobre este proyecto en este
momento de lo que sabrás en el futuro. Pero estas preguntas le dan un sólido punto de partida.
En el momento en que tenga respuestas iniciales específicas a estas preguntas, habrá
comenzado a obtener una idea de lo que es más urgente. necesidades para ser hecho. Como
hora va a lo largo de, usted lata refinar los respuestas, especialmente los MAPA DE C ONTEXTO,
DEC LARAC IÓN DE VISIÓN DE DOMINIO y cualquier otro artefacto que haya creado, para reflejar
situaciones cambiadas y nuevo perspectivas.

[ Equipo LiB ]

[ Equipo LiB ]


¿Quién establece la estrategia?
Tradicionalmente, arquitectura es entregó abajo, creado antes de solicitud desarrollo
comienza, por un equipo que tiene más poder en la organización que el equipo de desarrollo
de aplicaciones. pero no tener para ser que manera. Que manera no generalmente trabajo
muy bien.

Estratégico diseño, por definición, deber aplicar al otro lado de los proyecto. Ahí están muchos
formas para organizar un proyecto, y I no querer para ser también preceptivo. Sin embargo, por
ninguna Toma de decisiones proceso para sea efectivo, algunos fundamentos están requerido.

Primero, vamos llevar a rápido Mira en dos estilos que He visto proveer algunos valor en práctica
(ignorando así los viejo "sabiduría-de-lo-alto" estilo).


Estructura emergente del desarrollo de aplicaciones

A Auto disciplinado equipo hecha arriba de muy bien comunicadores lata funcionar sin central
autoridad y seguir EN EVOLUC IÓN PEDIDO para llegar en a compartido colocar de principios,
entonces que pedido crece orgánicamente, no por fíat.

Esta es los típico modelo por un Extremo Programación equipo. En teoría, los estructura mayo
emergen completamente espontáneamente de la percepción de cualquier par de programación.
Más a menudo, tener un individuo o a subconjunto de los equipo con algunos vigilancia
responsabilidad por Gran escala estructura ayuda a mantener la estructura unificada. Este
enfoque funciona bien particularmente si un líder informal es un desarrollador práctico, un
árbitro y comunicador, y no la única fuente de ideas. En los equipos de Programación Extrema
que he visto, tal liderazgo de diseño estratégico parece haber surgido espontáneamente, con
frecuencia en los persona de los entrenador. Quien esta natural líder es, él o ella sigue siendo
miembro del equipo de desarrollo. De ello se deduce que el equipo de desarrollo debe tener al
menos algunas personas del calibre para tomar decisiones de diseño que afectarán a todo el
proyecto.

Cuando una estructura a gran escala abarca varios equipos, los equipos estrechamente
afiliados pueden comenzar a colaborar informalmente En tal a situación, cada solicitud equipo
todavía hace los descubrimientos que conducen a la idea de una estructura a gran escala, pero
luego las opciones particulares son discutidas por el informal comité, hecha arriba de
representantes de los varios equipos Después evaluando los impacto de los diseño, Participantes
mayo decidir para adoptar eso, modificar eso, o salir eso en los mesa. los los equipos intentan
moverse juntos en esta afiliación suelta. Este arreglo puede funcionar cuando hay
relativamente pocos equipos, cuando todos están comprometidos a coordinarse entre sí,
cuando su diseño capacidades están comparable, y Cuándo sus estructural necesidades están
similar suficiente para ser conocido por a único Gran escala estructura.


Una arquitectura centrada en el cliente Equipo

Cuándo a estrategia voluntad ser compartido entre varios equipos, algunos centralización de
decisión haciendo parece atractivo. El fallido modelo del arquitecto de la torre de marfil no es la
única posibilidad. Un equipo de arquitectura puede actuar como un par con varios equipos de
aplicaciones, ayudando a coordinar y armonizar sus estructuras a gran escala, así como los
límites del C ONTEXTO LIMITADO y otros equipos cruzados. técnico cuestiones. Para ser útil en esta,
ellos deber tener a mente colocar que enfatiza desarrollo de aplicaciones

En un organización gráfico, esta equipo mayo Mira sólo me gusta los tradicional arquitectura
equipo, pero eso en realidad es diferente en cada actividad. Los miembros del equipo son
verdaderos colaboradores con el desarrollo, descubren patrones junto con los
desarrolladores, experimentan con varios equipos para llegar a destilaciones, y consiguiendo
sus las manos sucio.

I tener visto esta guión a Pareja de veces, Cuándo a proyecto termina arriba con a dirigir
arquitecto quién hace la mayoría de los cosas en los siguiente lista.


[ Equipo LiB ]

[ Equipo LiB ]


Seis elementos esenciales para la toma de decisiones
de diseño estratégico

Las decisiones deben llegar a todo el equipo

Obviamente, si todo el mundo no saber los estrategia y seguir eso, eso es irrelevante. Esta
requisitos conduce gente para organizar alrededor centralizado arquitectura equipos con oficial
"autoridad"—entonces que el mismo normas voluntad ser aplicado En todas partes.
Irónicamente, Marfil torre arquitectos están con frecuencia ignorado o pasado por alto. Los
desarrolladores no tienen otra opción cuando los arquitectos carecen de comentarios de los
intentos prácticos. para aplicar sus propio normas para verdadero aplicaciones resultados en
poco práctico esquemas

En a proyecto con muy bien comunicación, a estratégico diseño que surge desde los equipo de
aplicación mayo Realmente alcanzar todo el mundo más efectivamente. los estrategia voluntad
ser pertinente, y eso voluntad tener el autoridad que adjunta para inteligente comunidad
decisiones

Lo que los sistema, ser menos preocupado con los autoridad otorgado por administración que
con el real relación los desarrolladores tener con los estrategia.


El proceso de decisión debe absorber la retroalimentación.

Creando un organizando principio, Gran escala estructura, o destilación de tal sutileza requiere
una realidad profundo comprensión de los necesidades de los proyecto y los conceptos de los
dominio. los solo personas quién tener que profundidad de conocimiento están los miembros de
los solicitud desarrollo equipo. Esta explica por qué solicitud arquitecturas creado por
arquitectura equipos están entonces raramente útil, a pesar de los innegable talento de muchos
de los arquitectos

a diferencia de técnico infraestructura y arquitecturas, estratégico diseño lo hace no sí mismo
involucrar escribiendo mucho de código, aunque eso influencias todos desarrollo. Qué eso lo
hace exigir es intervención con la aplicación desarrollo equipos Un experimentado arquitecto
mayo ser poder para escucha para ideas procedente de varios equipos y facilitar los desarrollo
de a generalizado solución.

Un equipo de arquitectura técnica con el que trabajé hizo circular a sus propios miembros a
través de los diversos solicitud desarrollo equipos que fueron intentando para utilizar su
estructura. Esta rotación tirada dentro los arquitectura equipo los las manos en experiencia de los
retos frente a los desarrolladores, mientras eso simultaneamente transferido los conocimiento de
cómo para aplicar los sutilezas de los estructura. Estratégico diseño posee esta mismo necesitar
de a ajustado realimentación lazo.


El plan debe permitir la evolución.

Eficaz software desarrollo es a muy dinámica proceso. Cuándo los más alto nivel de decisiones
Está establecido en Roca, los equipo posee menos opciones Cuándo eso deber responder para
cambiar. E VOLVENTE PEDIDO evita esta trampa al enfatizar el cambio continuo en la estructura a
gran escala en respuesta a una comprensión más profunda.

Cuándo también muchos diseño decisiones están predeterminado, los desarrollo equipo lata ser

Obstaculizado, sin el flexibilidad para resolver los problemas ellos están cargado con. Entonces,
tiempo a armonizando principio lata
ser valioso, eso deber crecer y cambiar con los en curso la vida de los desarrollo proyecto, y eso
no debe llevar también mucho energía fuera desde los solicitud desarrolladores, cuyo trabajo es
duro suficiente como eso es.

Con fuerte realimentación, innovaciones surgir como obstáculos están encontrado en edificio
aplicaciones y como inesperado oportunidades están descubierto.


Los equipos de arquitectura no deben desviar todo lo mejor y lo más
brillante

Diseño en esta nivel llamadas por sofisticación que es probablemente en pequeño suministro.
Gerentes tender para trasladar a los desarrolladores técnicamente más talentosos a equipos de
arquitectura e infraestructura, porque quieren aprovechar las habilidades de estos diseñadores
avanzados. Por su parte, los desarrolladores se sienten atraídos por la oportunidad de tener un
impacto más amplio o de trabajar en "más interesantes" problemas. Y allí es prestigio adjunto
para siendo a miembro de un élite equipo.

Estas efectivo con frecuencia salir detrás solamente los menos técnicamente sofisticado
desarrolladores para Realmente crear aplicaciones. Pero edificio bien aplicaciones toma diseño
habilidad; esta es a configuración por falla. Incluso si un equipo de estrategia crea un gran
diseño estratégico, el equipo de aplicación no tendrá la sofisticación del diseño para seguir eso.

Por el contrario, tal equipos casi Nunca incluir los desarrollador quién quizás posee más débiles
diseño habilidades pero que tiene la experiencia más amplia en el dominio. El diseño
estratégico no es puramente técnico tarea; corte ellos mismos apagado desde desarrolladores
con profundo dominio conocimiento cojea los arquitectos' esfuerzos más. Y dominio expertos
están necesario también.

Es esencial contar con diseñadores fuertes en todos los equipos de aplicación. Es esencial
tener conocimiento de dominio en cualquier equipo que intente un diseño estratégico. Puede
que simplemente sea necesario contratar equipos más avanzados diseñadores Eso mayo
ayuda para mantenerse arquitectura equipos medio tiempo. Yo soy Por supuesto allí están
Muchas maneras que trabajo, pero ninguna eficaz estrategia equipo posee para tener como a
compañero un eficaz equipo de aplicación.


El diseño estratégico requiere minimalismo y humildad

Destilación y minimalismo están esencial para ninguna bien diseño trabajo, pero minimalismo es
incluso más crítico por estratégico diseño. Incluso los lo más mínimo enfermo encajar posee a
terrible potencial por consiguiendo en los manera. Los equipos de arquitectura separados deben
tener especial cuidado porque tienen menos idea de los obstáculos que podrían estar poniendo
frente a los equipos de aplicaciones. Al mismo tiempo, el entusiasmo de los arquitectos por sus
primario responsabilidad hace ellos más probable para obtener transportado fuera. He visto esto
fenómeno muchos veces, y He incluso hecho eso. Una bien idea Guías para otro, y nosotros
terminar con un sobredimensionado arquitectura que es contraproducente.

En lugar de, nosotros tener para disciplina Nosotros mismos para Produce organizando principios
y centro modelos que están recortados abajo para Contiene nada que lo hace no
significativamente mejorar los claridad de los diseño. La verdad es, casi todo obtiene en los
manera de algo, entonces cada elemento tenido mejor ser valor eso. darse cuenta que tu mejor
idea es probable para obtener en alguien manera toma humildad.


Los objetos son especialistas; los desarrolladores son generalistas

los esencia de bien objeto diseño es para dar cada objeto a claro y estrecho responsabilidad y
reducir la interdependencia a un mínimo absoluto. A veces tratamos de hacer interacciones en
equipos. como ordenado como ellos deberían ser en nuestro software. A bien proyecto posee un
montón de gente pega su nariz en los asuntos de otras personas. Los desarrolladores juegan
con marcos. Los arquitectos escriben código de aplicación. Todo el mundo negociaciones para

todo el mundo. Eso es eficientemente caótico. Hacer los objetos dentro especialistas; dejar los
desarrolladores ser generalistas

Porque he hecho la distinción entre diseño estratégico y otros tipos de diseño para ayudar a
aclarar los Tareas involucrado, I deber punto fuera que teniendo dos tipos de diseño actividad lo
hace no significa tener dos tipos de personas. Crear un diseño flexible basado en un modelo
profundo es un diseño avanzado actividad, pero los detalles están entonces importante que eso
posee para ser hecho por alguien trabajando con el código. Estratégico diseño surge fuera de
solicitud diseño, aún eso requiere a cuadro grande vista de
actividad, posiblemente abarcando múltiple equipos Gente amor para encontrar formas para picar
arriba Tareas entonces que expertos en diseño no tener para saber los negocio y dominio expertos
no tener para comprender tecnología. Ahí es a límite para cómo mucho un individual lata
aprender, pero sobreespecialización toma los vapor fuera de dominio diseño.


Lo mismo ocurre con los marcos técnicos

Técnico marcos lata muy acelerar solicitud desarrollo, incluso los dominio capa, por Proporcionar
un infraestructura capa que libera los solicitud desde implementar básico servicios, y por Ayudar
para aislar los dominio desde otro preocupaciones. Pero allí es a riesgo que un la arquitectura
puede interferir con las implementaciones expresivas del modelo de dominio y el cambio fácil .
Esto puede suceder incluso cuando los diseñadores del marco no tenían intención de
aventurarse en el dominio o la aplicación. capas.

los mismo sesgos que límite los Abajo de estratégico diseño lata ayuda con técnico arquitectura.
La evolución, el minimalismo y la participación con el equipo de desarrollo de aplicaciones
pueden conducir a una continua refinado colocar de servicios y normas que verdaderamente
ayuda solicitud desarrollo sin interponerse en el camino. Las arquitecturas que no sigan este
camino sofocarán la creatividad del desarrollo de aplicaciones o encontrarán que su
arquitectura es eludida, dejando el desarrollo de aplicaciones, por práctico propósitos, con no
arquitectura en todos.

Hay una actitud particular que seguramente arruinará un marco.


No escriba marcos para tontos

Equipo divisiones que asumir algunos desarrolladores están no inteligente suficiente para
diseño están probable para fracasar porque ellos subestimar los dificultad de solicitud
desarrollo. Si esos gente están no son lo suficientemente inteligentes para diseñar, no
deberían ser asignados para desarrollar software. Si son lo suficientemente inteligentes,
luego los intentos para mimar ellos voluntad solamente poner arriba barreras Entre ellos y los
herramientas que necesitar.

Esta actitud además venenos los relación Entre equipos He terminado arriba en arrogante
equipos así y me encontré disculpándome con los desarrolladores en cada conversación,
avergonzado por mi asociación. (He Nunca administrado para cambiar tal a equipo, Yo soy
temeroso.)

Ahora, encapsulando irrelevante técnico detalle es completamente diferente desde los tipo de
preenvasado estoy despectivo. A estructura lata lugar poderoso abstracciones y herramientas en
desarrolladores las manos y liberarlos de la monotonía. Es difícil describir la diferencia de forma
generalizada, pero se nota los diferencia por pidiendo los estructura diseñadores qué ellos
suponer de los persona quién voluntad estar usando la herramienta/marco/componentes. Si los
diseñadores parecen tener un alto nivel de respeto por el usuario de los estructura, luego ellos
están probablemente en los Correcto pista.


Cuidado con el maestro Plan

A grupo de arquitectos (los tipo quién diseño físico edificios), LED por Cristóbal Alejandro, eran
defensores de poco a poco crecimiento en los reino de arquitectura y ciudad planificación. Ellos

explicado muy amable por qué Maestro planes fallar.

Sin a planificación proceso de algunos tipo, allí es no a oportunidad en los mundo
que la Universidad de Oregón voluntad siempre venir para poseer un pedido en
cualquier sitio cerca como profundo y armonioso como los pedido que subyace los
Universidad de Cambridge.

El plan maestro ha sido la forma convencional de abordar esta dificultad. El plan maestro
intentos para colocar abajo suficiente pautas para proveer por coherencia en los ambiente
como un todo—y todavía salir libertad por individual edificios y abierto espacios para
adaptar para necesidades locales.

. . . y todos los varios partes de esta futuro Universidad voluntad formulario a coherente
entero, porque ellos fueron simplemente atascado dentro los tragamonedas de los
diseño.

. . . en práctica Maestro planes fracasar—porque ellos crear totalitario pedido, no orgánico
pedido. Ellos están también rígido; ellos no poder fácilmente adaptar para los natural y
impredecible cambios que surgen inevitablemente en la vida de una comunidad. A
medida que ocurren estos cambios. . . el plan maestro se convierte obsoleto, y es no más
extenso seguido. Y incluso para los grado que Maestro planes son seguidos . . . ellos hacer
no especificar suficiente sobre conexiones Entre edificios, humano balanza, balanceada
función, etc para ayuda cada local Actuar de edificio y diseño volverse bien relacionado al
ambiente como a entero.

. . . los intento para dirigir tal a curso es bastante me gusta relleno en los colores en a del
niño libro de colorear . . . . En mejor, los pedido cual resultados desde tal a proceso es
banal.

. . . Por lo tanto, como a fuente de orgánico pedido, a Maestro plan es ambas cosas
también preciso, y no lo suficientemente preciso. los totalidad es también preciso: los
detalles están no preciso suficiente.

. . . los existencia de a Maestro plan enajena los usuarios [porque, por definición] los
miembros de la comunidad pueden tener poco impacto en la forma futura de su
comunidad porque la mayoría de los importante decisiones tener ya estado hecha.

—De The Oregon Experiment , págs. 16–28 ( Alexander et al. 1975 )

Alejandro y su colegas defendido en lugar de a colocar de principios por todos comunidad
miembros aplicar a cada acto de crecimiento gradual, de modo que surja un "orden
orgánico", bien adaptado a las circunstancias.


[ Equipo LiB ]

[ Equipo LiB ]


Conclusión
epílogos

Viendo hacia
adelante [ Equipo LiB
]

[ Equipo LiB ]


epílogos
Aunque eso es muy satisfactorio trabajando en a innovador proyecto y experimentando con ideas
interesantes y herramientas, por me eso es a hueco experiencia si los software lo hace no
encontrar productivo utilizar. De hecho, los cierto prueba de éxito es cómo los software sirve
sobre a período de hora. I tener estado poder seguir los cuentos de algunos de mi anterior
proyectos sobre los años.

Discutiré aquí cinco de ellos, cada uno de los cuales hizo un intento serio de diseño dirigido
por dominios, aunque no de manera sistemática y no con ese nombre, por supuesto. Todos
estos proyectos entregaron software: algunos administrado para llevar a través de y Produce a
basado en modelos diseño, tiempo una resbalado que pista. Algunos de los aplicaciones
continuado para crecer y cambiar por muchos años, tiempo uno se estancó y una fallecido
joven.

El software de diseño de PCB descrito en el Capítulo 1 fue un gran éxito entre los usuarios beta
en el campo. Desafortunadamente, la empresa emergente que había iniciado el proyecto
fracasó por completo en su función de marketing. y era finalmente sacrificado los software es
ahora usado por a puñado de tarjeta de circuito impreso ingenieros que tener viejo copias ellos
conservó desde los beta programa. Me gusta ninguna huérfano software, eso voluntad Seguir
trabajar Hasta que allí es algunos fatal cambiar para una de los programas con cual eso es
integrado.

El software de préstamo cuya historia se contó en el Capítulo 9 prosperó y evolucionó en la
misma dirección . por Tres años después los descubrimiento I escribió sobre. En que punto, los
proyecto era hilado apagado como un independiente empresa. En los confusión de esta
reorganización, los proyecto gerente quién había conducido los proyecto desde los comenzando
era expulsado, y algunos de los centro desarrolladores izquierda con él. El nuevo equipo tenido a
algo diferente diseño filosofía, no como completamente comprometido para objeto modelado.
Pero conservaron una capa de dominio distinta con un comportamiento complejo y continuaron
valorando el conocimiento del dominio. en los desarrollo equipo. Siete años después los escindir,
los software continúa para mejorarse con nuevas características. Es la aplicación líder en su
campo y atiende a un número cada vez mayor de cliente instituciones, como bien como siendo
los más grande ingresos Arroyo por los empresa.


Un olivar recién plantado

Hasta que el enfoque basado en el dominio esté más extendido, el software interesante en
muchos proyectos

se construirá en un intervalo corto y altamente productivo. Eventualmente el proyecto se
transformará en algo más convencional que mayo no ser poder para completamente explotar,
mucho menos mejorar, los el poder de los profundo modelos que fueron destilado más temprano.
I pudo deseo por más, pero verdaderamente esos están éxitos que entregar sostenido valor para
usuarios sobre muchos años.

En una proyecto I emparejado con otro desarrollador para escribe a utilidad los cliente necesario
para producir su producto principal. Las características eran bastante complicadas y se
combinaban de formas intrincadas. disfruté el proyecto trabajo y nosotros producido a flexible
diseño con un RESUMEN NÚC LEO . Cuándo esta software fue entregado apagado, que era los final de
intervención por todo el mundo quién tenido inicialmente desarrollado eso. Porque era tal un
abrupto transición, I previsto que los diseño caracteristicas cual soportado los los elementos
combinables pueden ser confusos y pueden ser reemplazados por una lógica de casos más
típica. Esto inicialmente no suceder. Cuándo nosotros entregó apagado, los paquete incluido a
exhaustivo prueba suite y a documento de destilacion. los nuevo equipo miembros usado que
documento para guía sus exploraciones, y como miraron las cosas, se entusiasmaron con las
posibilidades que presentaba el diseño. Cuando escuché sus comentarios un año después, me
di cuenta de que el LENGUAJE UBIC UO se había transmitido a los demás . equipo y permaneció
vivo, continuo para evolucionar.


Siete años despues



Luego, otro año luego, I oyó a diferente historia. los equipo tenido encontrado nuevo requisitos
que los desarrolladores no lo hizo ver ninguna manera para lograr dentro de los heredado diseño.
Ellos tenido sido forzado para cambiar los diseño casi más allá de reconocimiento. Como I
probado por más detalles, I pudo mira eso aspectos de nuestro modelo haría tener hecha
resolviendo esos problemas incómodo. Eso es precisamente durante esos momentos en los que
a menudo es posible un gran avance hacia un modelo más profundo, especialmente cuando,
como en este caso, los desarrolladores tenido acumulado profundo conocimiento y experiencia en
los dominio. En De hecho, habían tenido una avalancha de nuevos conocimientos y terminaron
transformando el modelo y el diseño en función de esos perspectivas.

Ellos dicho me esta historia con cuidado, diplomáticamente, esperando, I suponer, que I haría ser
decepcionado por su descarte de gran parte de mi trabajo. No soy tan sentimental con mis
diseños. El éxito de a diseño es no necesariamente marcado por su estasis. Llevar a sistema gente
depender en, hazlo opaco, y eso voluntad En Vivo Siempre como intocable legado. A profundo
modelo permite claro visión que puede rendir nuevo visión, tiempo a flexible diseño facilita en
curso cambiar. los modelo ellos llegó arriba con era Más adentro, mejor alineado con los
verdadero preocupaciones de los usuarios Sus diseño resuelto verdadero problemas. La
naturaleza del software es cambiar, y este programa ha seguido evolucionando en manos de
los equipo que posee eso.

Los ejemplos de envío dispersos a lo largo del libro se basan libremente en un proyecto para
un importante internacional envío de contenedores empresa. Temprano en, los liderazgo de los
proyecto era comprometidos con un enfoque impulsado por el dominio, pero nunca produjeron
una cultura de desarrollo que pudiera apoyar completamente eso. Varios equipos con
ampliamente diferente niveles de diseño habilidad y objeto experiencia colocar fuera de crear
módulos, flojamente coordinado por informal cooperación Entre equipo lideres y por a
cliente enfocado arquitectura equipo. Nosotros hizo desarrollar a razonablemente profundo
modelo de los C ENTRO DOMINIO , y allí era a viable UBIC UO IDIOMA .

Pero la cultura de la empresa se resistió ferozmente al desarrollo iterativo, y esperamos
demasiado para impulsar fuera a trabajando interno liberar. Por lo tanto, problemas fueron
expuesto en a tarde escenario, Cuándo Ellos eran más arriesgado y caro para reparar. En algunos
punto, nosotros descubierto específico aspectos de los modelo fueron causando rendimiento
problemas en los base de datos. A natural parte de IMPULSADO POR MODELO DISEÑO es la
retroalimentación de los problemas de implementación a los c ambios en el modelo, pero en
ese momento había una percepción de que estábamos demasiado lejos para cambiar el
modelo fundamental. En su lugar, se realizaron cambios en el código para hacerlo más
eficiente y se debilitó su conexión con el modelo. los inicial liberar además expuesto escalada
limitaciones en los técnico infraestructura que tiró a susto dentro administración. Pericia era trajo
en para reparar los infraestructura problemas, y el proyecto se recuperó. Pero el ciclo nunca se
cerró entre la implementación y el modelado del dominio.

A pocos equipos entregado multa software con complejo capacidades y expresivo modelos
Otros entregados rígido software que reducido los modelo para datos estructuras, aunque
incluso ellos vestigios retenidos del LENGUAJE UBIC UO . Quizás un MAPA DE C ONTEXTO nos
hubiera ayudado más que nada, como los relación Entre los producción de los varios equipos
era al azar. Aún ese NÚC LEO modelo transportado en los UBIC UO IDIOMA hizo ayuda los equipos
por último para pegamento juntos un sistema.

Aunque de alcance reducido, el proyecto reemplazó varios sistemas heredados. El todo se
mantuvo unido por a compartido colocar de conceptos, aunque más de los diseño era no muy
flexible. Eso posee en sí mismo en gran medida fosilizado dentro legado ahora, años luego, pero
eso todavía sirve los global negocio 24 horas a día. Aunque los más exitoso equipos' influencia
gradualmente untado, hora carreras fuera finalmente, incluso en el más rico empresa. los cultura
de los proyecto Nunca De Verdad absorbido IMPULSADO POR MODELO DISEÑO . El nuevo desarrollo
actual se encuentra en diferentes plataformas y solo está indirectamente influenciado por el
trabajo que hicimos, como los nuevo desarrolladores AJUSTARSE para sus legado.

En algunos círculos, se han desacreditado metas ambiciosas como las que se fijó inicialmente
la naviera. Mejor, eso parece, para hacer poco aplicaciones nosotros saber cómo para entregar.
Mejor para palo al más bajo común denominador de diseño para hacer sencillo cosas. Esta
conservador Acercarse posee su lugar, y permite proyectos de respuesta rápida con un alcance
claro. Pero los sistemas integrados basados en modelos promesa valor que esos mosaicos
hipocresía. Ahí es a tercera manera. Impulsado por el dominio el diseño permite poco a poco
crecimiento de grande sistemas con Rico funcionalidad, por edificio en a profundo modelo y
flexible diseño.

Cerraré esta lista con Evant, una empresa que desarrolla software de gestión de inventario,
donde desempeñé un papel de apoyo secundario y contribuí a una cultura de diseño ya sólida.
otros tienen escrito sobre esta proyecto como a póster niño de Extremo Programación, pero qué
es no generalmente comentado sobre es que los proyecto era intensamente impulsado por el
dominio. Siempre Más adentro modelos fueron destilado y expresado en siempre más flexible
diseños Esta proyecto prosperó Hasta que los "punto com" choque de 2001. Entonces, famélico
por inversión fondos, los empresa contratado, software desarrollo fuimos mayormente inactivo, y
eso pareció que los final era cerca. Pero en los el verano de 2002, Evento era abordado por uno
de los diez principales minoristas del mundo. A este cliente potencial le gustó el producto, pero
necesitaba diseño cambios para permitir los solicitud para escala arriba por un enorme inventario
planificación operación. Eso era de Evant último oportunidad.

Aunque reducido para cuatro desarrolladores, los equipo tenido activos. Ellos fueron experto,
con conocimiento del dominio, y un miembro tenía experiencia en problemas de escalado.

Tuvieron un desarrollo muy efectivo. cultura. Y ellos tenido a código base con a flexible diseño
que facilitado cambiar. Que

el verano, esos cuatro desarrolladores hecha a heroico desarrollo esfuerzo resultante en los
capacidad para manejar miles de millones de planificación elementos y cientos de usuarios En los
fuerza de esos capacidades, Evant ganó el cliente gigante y, poco después, fue comprada por
otra empresa que quería aprovechar sus software y sus probado capacidad para acomodar nuevo
demandas.

La cultura del diseño impulsada por el dominio (así como la cultura de la programación
extrema) sobrevivió a la transición y se revitalizó. Hoy, el modelo y el diseño continúan
evolucionando, mucho más ricos y flexibles. dos años luego que Cuándo I hecha mi
contribución. Y bastante que siendo asimilado en la empresa de compras, los miembros del
equipo de Evant parecen estar inspirando a los existentes de la empresa proyecto equipos para
seguir sus dirigir. Esta historia no es sobre aún.

Ningún proyecto empleará jamás todas las técnicas de este libro. Aun así, cualquier proyecto
comprometido con el dominio impulsado diseño voluntad ser reconocible en a pocos formas. los
definiendo característica es a prioridad sobre la comprensión los objetivo dominio y incorporando
que comprensión dentro los software.
Todo demás fluye desde que premisa. Equipo miembros están consciente de los utilizar de idioma
en el proyecto y cultivar su refinamiento. Son difíciles de satisfacer con la calidad del modelo
de dominio, porque ellos mantenerse aprendiendo más sobre los dominio. Ellos ver continuo
refinamiento como una oportunidad y un mal ajustado modelo como a riesgo. Ellos llevar diseño
habilidad seriamente porque eso no es facil de desarrollar calidad de la producción software que
claramente refleja los dominio modelo. Ellos tropezón sobre obstáculos, pero ellos sostener en
para sus principios como ellos elegir ellos mismos arriba y Seguir hacia adelante.

[ Equipo LiB ]

[ Equipo LiB ]


Viendo hacia adelante
Tiempo, ecosistemas, y biología usado para ser considerado sucio, "suave" campos en contraste
para física o química. Hace poco, sin embargo, gente tener Reconocido que los apariencia de
"desorden" de hecho presenta un profundo desafío técnico para descubrir y comprender el
orden en estos fenómenos tan complejos. El campo llamado "complejidad" es la vanguardia de
muchas ciencias. Aunque las tareas puramente tecnológicas generalmente han parecido más
interesantes y desafiantes para el software talentoso ingenieros, impulsado por el dominio
diseño abre arriba a nuevo área de desafío que es en menos igual. Negocio software lo hace no
tener para ser a atornillados juntos lío. Lucha a complejo dominio dentro un comprensible
software diseño es un excitante desafío por fuerte técnico gente.

No estamos ni cerca de la era de los laicos que crean software complejo que funciona. Ejércitos
de programadores con rudimentario habilidades lata Produce cierto tipos de software, pero no los
tipo que salva a empresa en su undécimo hora. Qué es necesario es por herramienta
constructores para poner sus mentes para la tarea de extensión los energía y productividad de
talentoso software desarrolladores Qué es necesario son más agudos formas de explorador
dominio modelos y expresando ellos en trabajando software. I Mira reenviar a experimentando
con nuevo herramientas y tecnologías ideado por esta propósito.

Pero aunque mejorado herramientas voluntad ser valioso, nosotros no debe obtener distraído
por ellos y perder visión de El centro hecho que creando bien software es a aprendiendo y
pensando actividad. Modelado requiere imaginación y autodisciplina. Herramientas que ayuda
nosotros pensar o evitar distracción están bueno. Esfuerzos automatizar qué deber ser los
producto de pensamiento están ingenuo y contraproducente.

Con las herramientas y la tecnología que ya tenemos, podemos construir sistemas mucho más
valiosos que la mayoría proyectos hacer hoy dia. Nosotros lata escribe software que es a Placer
para utilizar y a Placer para trabajo encendido, software que no nos encasilla a medida que
crece, sino que crea nuevas oportunidades y continúa agregando valor por su dueños


[ Equipo LiB ]

[ Equipo LiB ]


Apéndice El uso de patrones en este
libro
Mi primer "buen auto", que me regalaron poco después de la universidad, fue un Peugeot de
ocho años. A veces llamado los "Francés mercedes," esta coche era bien hecho a mano, era a
Placer para conducir, y tuvo estado muy de confianza. Pero por los hora I tiene eso, eso era
alcanzando los años Cuándo cosas comienzo para ir mal y más mantenimiento es requerido.

peugeot es un viejo empresa, y eso posee seguido su propio evolutivo sendero sobre muchos
décadas. Tiene su propia terminología mecánica y sus diseños son idiosincrásicos; incluso el
desglose de funciones dentro partes es a veces no estándar. los resultado es a coche que
solamente peugeot especialistas puede trabajar en, a potencial problema por alguien en a
graduado estudiante ingreso.

En una típico ocasión, I tomó los coche para a local mecánico para investigar a líquido fuga. Él
examinado el tren de aterrizaje y dicho me que petróleo era "fugas desde a poco caja sobre dos
tercios de los camino de vuelta que parece para tener algo para hacer con distribuido frenado
energía Entre parte delantera y trasero." El luego rechazado para tocar los coche y aconsejado
me para ir para los concesión, cincuenta millas fuera. Cualquiera puede trabajo en a Vado o a
honda; eso es por qué esos carros están más conveniente y menos caro poseer, incluso aunque
ellos están Igualmente mecánicamente complejo.

Me encantaba ese auto, pero nunca volveré a tener un auto extravagante. Llegó un día en
que una particularmente cara problema era diagnosticado, y I tenido tenido suficiente de
Peugeot. I tomó eso para a local caridad que aceptaba autos como donaciones. Luego compré
un viejo Honda Civic destartalado por lo que la reparación haría tener costo.

Estándar diseño elementos están carente por dominio desarrollo, y entonces cada dominio
modelo y correspondiente implementación es peculiar y duro para comprender. Es más, cada
equipo posee reinventar los rueda (o los engranaje, o los parabrisas limpiaparabrisas). En los
mundo de orientado a objetos diseño, todo es un objeto, a referencia, o a mensaje—que, de
curso, es a útil abstracción. Pero eso lo hace no suficientemente constreñir los rango de dominio
diseño elecciones y lo hace no apoyo un económico discusión de a dominio modelo.

Detenerse en "Todo es un objeto" sería como un carpintero o un arquitecto resumiendo casas
por diciendo "Todo es a habitación." Ahí haría ser los grande habitación con Alto voltaje enchufes
y un fregadero, donde podría cocinar. Habría una pequeña habitación arriba, donde podrías
dormir. Eso haría llevar paginas para describir un ordinario casa. Gente quién construir o utilizar
casas darse cuenta de que habitaciones seguir patrones, patrones con especial nombres, tal
como "cocina." Esta idioma permite económico discusión de casa diseño.

Además, no todas las combinaciones de funciones resultan prácticas. ¿Por qué no una
habitación donde te bañas? y ¿dormir? no lo haría que ser conveniente. Pero largo experiencia
posee precipitado dentro costumbre, y separamos nuestros "dormitorios" de nuestros "baños".
Después de todo, las instalaciones de baño tienden a ser compartidas. entre más gente que
dormitorios están, y ellos exigir máximo intimidad, incluso desde los demás que comparten el
mismo dormitorio. Y los baños tienen una infraestructura especializada y costosa. requisitos
Bañeras y baños típicamente final arriba en los mismo habitación porque ambos requieren los
mismo infraestructura (agua y drenaje) y ambas cosas están usado en privado.

Otro habitación que posee especial infraestructura requisitos es que habitación donde usted
puede que Preparar comidas, además conocido como los "cocina." En contraste para los baño, a
cocina posee no especial requisitos de privacidad. Porque de su gastos, allí es típicamente
solamente una, incluso en relativamente grande casas

Esta singularidad también facilita nuestras costumbres comunitarias de preparación y
alimentación de alimentos.

Cuándo I decir que I querer a tres habitaciones, dos baños casa con un plan abierto cocina,
I haber empacado a enorme Monto de información dentro a pequeño oración, y He evitado
a lote de errores tontos, como como poniendo a baño próximo para los refrigerador.

En cada área de diseño—casas, carros, botes de remos, o software—nosotros construir en
patrones que tener se ha descubierto que funcionaba en el pasado, improvisando dentro de
temas establecidos. A veces tenemos que inventar algo completamente nuevo. Pero al basar
los elementos estándar en patrones, evitamos desperdiciar nuestra energía en problemas con
soluciones conocidas para que podamos concentrarnos en nuestras necesidades inusuales.
Además, construir a partir de patrones convencionales nos ayuda a evitar un diseño tan
idiosincrásico que sea difícil de comunicar.

Aunque software dominio diseño es no como maduro como otro diseño campos—y en ninguna
caso mayo ser demasiado diversos para adaptarse a patrones tan específicos como los que se
utilizan para piezas de automóviles o habitaciones; no obstante, existe la necesidad de ir más
allá de "Todo es un objeto" al menos al equivalente de distinguir pernos desde muelles.

En la década de 1970, un grupo de arquitectos dirigido por Christopher Alexander ( Alexander
et al. 1977 ) introdujo una forma de compartir y estandarizar la percepción del diseño. Su
"lenguaje de patrones" entretejió soluciones de diseño probadas y verdaderas para problemas
comunes (mucho más sutilmente que mi "cocina" ejemplo, cual posee probablemente causado
algunos lectores de Alejandro para morir de vergüenza). los la intención era que constructores y
usuarios haría comunicar en esta idioma, y ellos haría ser guiado por los patrones para producir
hermosos edificios que funcionaban bien y se sentían bien para las personas que los usaban.

Independientemente de lo que los arquitectos puedan pensar sobre la idea, este lenguaje de
patrones ha tenido un gran impacto en el software. diseño. En los 1990 software patrones
fueron aplicado en muchos formas con algunos éxito, en particular en detallado diseño ( Gama
et Alabama. 1995 ) y técnico arquitecturas ( Buschmann et Alabama.
1996 ). Más recientemente, los patrones se han utilizado para documentar técnicas
básicas de diseño orientado a objetos. ( Larman 1998 ) y empresa arquitecturas (Cazador
de aves 2002, Alur et Alabama. 2001 ). El idioma de patrones es ahora a convencional
técnica por organizando software diseño ideas

los patrón nombres están quiso decir para volverse condiciones en los idioma de los equipo, y He
usado ellos que manera en esta libro. Cuándo a patrón nombre aparece en a discusión, eso es
FORMATO EN PEQUEÑA MAYÚSC ULAS para llamarlo fuera.

Aquí es cómo He formateado patrones en esta libro. Ahí es algunos variación alrededor esta básico
plan, como yo tener favorecido caso por caso claridad y legibilidad sobre rígido estructura. . . .


[ Equipo LiB ]

[ Equipo LiB ]


Nombre del patrón
[Ilustración del concepto. A veces una metáfora visual o un texto evocador.]

[Contexto. A breve explicación de cómo los concepto relaciona para otro patrones. En algunos
casos, a breve descripción de los patrón.

mucho de los contexto discusión en esta libro es en los capítulo introducciones y otra
narrativa segmentos, bastante que dentro de los patrones.

]

[Discusión del problema.]

Problema resumen.

Discusión de los resolución de problema efectivo dentro a
solución. Por lo tanto:
Solución resumen.

Consecuencias. Consideraciones de implementación. Ejemplos.


Contexto resultante: una breve explicación de cómo el patrón conduce a patrones posteriores.

[Discusión de los desafíos de implementación. En el formato original de Alexander, esta
discusión se habría incluido en la sección que describe la resolución del problema, y a menudo
he seguido de Alejandro organización en esta libro. Pero algunos patrones demanda más largo
discusiones de implementación. Para mantener la discusión del patrón central ajustada, he
movido una implementación tan larga discusiones fuera, después los patrón.

También, largo ejemplos, particularmente esos que combinar múltiple patrones, están con
frecuencia fuera de los patrones.]


[ Equipo LiB ]

[ Equipo LiB ]


GLOSARIO
Aquí hay definiciones breves de términos seleccionados, nombres de patrones y otros conceptos
utilizados en el libro.

AGREGAR

A grupo de asociado objetos que están tratado como a unidad por los propósito de datos
cambios. Externo referencias están restringido para una miembro de los AGREGADO ,
designado como los raíz. A colocar de consistencia normas se aplica dentro de los
AGREGADOS límites.



patrón de análisis

A grupo de conceptos que representa a común construcción en negocio modelado. Eso
mayo Se relevante para solamente una dominio o mayo lapso muchos dominios ( cazador
1997 , pags. 8).



AFIRMACIÓN

A declaración de los correcto estado de a programa en algunos punto, independiente de
cómo eso lo hace eso. Normalmente, una ASSERC IÓN especifica el resultado de una
operación o una invariante de un elemento de diseño.



CONTEXTO LÍMITE

los delimitado aplicabilidad de a especial modelo. LÍMITE _ C ONTEXTOS da equipo miembros
una comprensión clara y compartida de lo que tiene que ser coherente y lo que puede
desarrollarse de forma independiente.



cliente

Un elemento de programa que está llamando al elemento bajo diseño, usando sus
capacidades.



cohesión

Acuerdo lógico y dependencia.



comando (también conocido como modificador )

Un operación que efectos algunos cambiar para los sistema (por ejemplo, ajuste a
variable). Una operación que intencionalmente crea a lado efecto.

CONTORNO CONCEPTUAL

Un subyacente consistencia de los dominio sí mismo, cual, si reflejado en a modelo, lata
ayuda el diseño acomodar cambiar más naturalmente.



contexto

los ajuste en cual a palabra o declaración aparece que determina su sentido.
Ver además [ LÍMITE CONTEXTO ]

MAPA DE CONTEXTO

A representación de los ENC ERRADO C ONTEXTOS involucrado en a proyecto y los real
relaciones entre ellos y sus modelos



DOMINIO PRINCIPAL

los distintivo parte de los modelo, central para los del usuario objetivos, que
diferencia la aplicación y hace eso valioso.



declarativo diseño

A formulario de programación en cual a preciso descripción de propiedades Realmente
control S El software. Un ejecutable especificación.



modelo profundo

Una expresión incisiva de las principales preocupaciones de los expertos del dominio y
sus más relevantes conocimiento. A profundo modelo mudas apagado superficial
aspectos de los dominio y interpretaciones ingenuas.



patrón de diseño

A descripción de comunicado objetos y clases que están personalizado para resolver a
diseño general problema en a especial contexto. ( Gama et Alabama. 1995 , pags. 3)



destilación

A proceso de separando los componentes de a mezcla para extraer los esencia en a
formulario lo que hace eso más valioso y útil. En software diseño, los abstracción de llave
aspectos en un modelo, o los fraccionamiento de a más grande sistema para traer los
C ENTRO DOMINIO para los delantero.



dominio

Una esfera de conocimiento, influencia o actividad.



experto en dominios

A miembro de a software proyecto cuyo campo es los dominio de los solicitud, bastante
que el software desarrollo. No sólo ninguna usuario de los software, los dominio
experto posee profundo conocimiento de los tema.



capa de dominio

Que parte de los diseño y implementación responsable por dominio lógica dentro de a
ARQUITEC TURA EN C APAS . los dominio capa es donde los software expresión de los dominio
modelo vive.



ENTIDAD

Un objeto fundamentalmente definido no por su atributos, pero por a hilo de
continuidad e identidad.



FÁBRICA

A mecanismo por encapsulando complejo creación lógica y abstrayendo los escribe de a
objeto creado por los motivo de a cliente.



función

Una operación que calcula y devuelve un resultado sin efectos secundarios
observables.



inmutable

La propiedad de nunca cambiar el estado observable después de la creación.



concepto implícito

A concepto que es necesario para comprender los sentido de a modelo o diseño pero es
nunca mencionado



INTERFAZ QUE REVELA LA INTENCIÓN

A diseño en cual los nombres de clases, métodos, y otro elementos transmitir ambas
cosas el original del desarrollador propósito en creando ellos y sus valor para a cliente
desarrollador.

invariante

Un AFIRMAC IÓN sobre algunos diseño elemento que deber ser cierto en todos veces,
excepto durante específicamente transitorio situaciones tal como los medio de los
ejecución de a método, o la mitad de un no comprometido base de datos transacción.



iteración

A proceso en cual a programa es repetidamente mejorado en pequeña pasos. también
, una de esos pasos



Gran escala estructura

A colocar de nivel alto conceptos, normas, o ambas cosas que establece a patrón de diseño
por un sistema entero. A idioma que permite los sistema para ser discutido y entendido en
amplio trazos



ARQUITECTURA EN CAPAS

A técnica por separando los preocupaciones de a software sistema, aislando a dominio
capa, entre otro cosas.



ciclo vital

A secuencia de estados un objeto lata llevar en Entre creación y supresión, típicamente
con restricciones para garantizar la integridad al cambiar de un estado a otro. Puede
incluir migración de un ENTIDAD Entre sistemas y diferente ENC ERRADO C ONTEXTOS .



modelo

A sistema de abstracciones que describe seleccionado aspectos de a dominio y lata ser
usado resolver problemas relacionados para que dominio.



DISEÑO IMPULSADO POR MODELOS

A diseño en cual algunos subconjunto de software elementos corresponde cercanamente
para elementos de un modelo. También, a proceso de codesarrollando a modelo y un
implementación que Quédate alineado con cada otro.



paradigma de modelado

Un estilo particular de tallar conceptos en un dominio, combinado con herramientas
para crear software. análogos de esos conceptos (por ejemplo, orientado a objetos
programación y programación lógica).

REPOSITORIO

A mecanismo por encapsulando almacenamiento, recuperación, y búsqueda conducta
cual emula Una colección de objetos.



responsabilidad

Obligación de realizar una tarea o conocer información ( Wirfs-Brock et al. 2003 , p. 3).



SERVICIO

Un operación Ofrecido como un interfaz que soportes solo en los modelo, con no estado
encapsulado.



efecto secundario

Ninguna observable cambiar de estado resultante desde un operación, ya sea intencional o
no, incluso un deliberar actualizar.



FUNCIÓN SIN EFECTOS SECUNDARIOS
Ver [ función ]
CLASE INDEPENDIENTE

A clase que lata ser entendido y probado sin referencia para ninguna otros, excepto
primitivas del sistema y básico bibliotecas



apátrida

La propiedad de un elemento de diseño que permite a un cliente utilizar cualquiera de
sus operaciones sin tener en cuenta para los elementos historia. A apátrida elemento
mayo utilizar información que es accesible globalmente y mayo incluso cambiar que global
información (que es, eso mayo tener lado efectos) pero aguanta no privado estado que
afecta su conducta.



diseño estratégico

Modelado y diseño decisiones que aplicar para grande partes de los sistema. Tal decisiones
afectar el completo proyecto y tener para ser decidido en equipo nivel.



diseño flexible

A diseño que pone los energía inherente en a profundo modelo dentro los las manos de a
cliente desarrollador a hacer claro, flexible expresiones que dar previsto resultados
robustamente. Igualmente importante, aprovecha que mismo profundo modelo para hacer
los diseño sí mismo fácil por los implementador para molde

y reformar para acomodar nuevos conocimientos.



LENGUAJE UBICUO

A idioma estructurado alrededor los dominio modelo y usado por todos equipo miembros
para conectar todo los ocupaciones de los equipo con los software.



unificación

los interno consistencia de a modelo tal que cada término es inequívoco y no las
reglas se contradicen.



OBJETO DE VALOR

Un objeto que describe alguna característica o atributo pero no lleva ningún concepto de
identidad.



VALOR ENTERO

Un objeto que modela un concepto único y completo.



[ Equipo LiB ]

[ Equipo LiB ]


Referencias
Alejandro, C., METRO. plateado, S. Ángel, S. ishikawa, y D. Abrams. 1975. los
Experimento de Oregón . oxford Universidad Prensa.

Alejandro, C., S. ishikawa, y METRO. Silverstein. 1977. A Patrón Idioma: Pueblos, Edificios,
Construcción . oxford Universidad Prensa.

Alur, D., j crupí, y D. Malcas. 2001. Centro J2EE patrones _ sol microsistemas
Prensa. Arroyo, k 1997. Charla Mejor Práctica patrones _ Aprendiz salón PTR.
———. 2000. Explicación de la programación extrema: aceptar el cambio . Addison-Wesley.

———. 2003. Desarrollo basado en pruebas: por ejemplo . Addison-Wesley.

buschmann, F., r Meunier, h Rohnert, pags. sommerlad, y METRO. establo 1996. Software
orientado a patrones Arquitectura: A Sistema de patrones _ Wiley.

quemadura de gallo, UN. 1998. Sobreviviente Orientado a objetos Proyectos: A del gerente
guía _ Addison-Wesley. evans, MI., y METRO. Cazador de aves. 1997. "Especificaciones."
Actas de Plaf 97 Conferencia.
fayad, METRO., y r Johnson. 2000. Específico del dominio Solicitud marcos _
Wiley. Cazador de aves, METRO. 1997. Análisis Patrones: reutilizable Objeto
modelos _ Addison-Wesley.
———. 1999. Refactorización: Mejora del diseño del código existente . Addison-Wesley.

———. 2003. Patrones de arquitectura de aplicaciones empresariales . Addison-Wesley.

Gamma, E., R. Helm, R. Johnson y J. Vlissides. 1995. Patrones de diseño . Addison-Wesley.

Kerievski, j 2003. "Continuo Aprendiendo," en Extremo Programación perspectivas ,
michele marchesi et Alabama. Addison-Wesley.

———. 2003. Sitio web: http://www.industriallogic.com/xp/refactoring .

larman, C. 1998. Aplicar UML y Patrones: Un Introducción para Orientado a objetos Análisis y
Diseño . Aprendiz salón PTR.

Merriam Webster. 1993. Merriam-Webster's Colegial Diccionario . Décimo edición.
Merriam- Webster.

Meyer, B. 1988. Construcción de software orientada a objetos . PTR de Prentice Hall.

Murray-Rust, PAGS., h Rzepa, y C. Filtrar. 1995. Resumen 40 . presentado como a póster en los
210a AEC Reunión en chicago en agosto 21, 1995. http://www.ch.ic.ac.uk/cml/

Pinker, S. 1994. El instinto del lenguaje: cómo la mente crea el lenguaje . HarperCollins.

succi, GRAMO. j, D. pozos, METRO. marquesi, y l Williams. 2002. Extremo Programación
Perspectivas _ Pearson Educación.

Más cálido, j, y UN. Kleppe. 1999. los Objeto Restricción Idioma: Preciso Modelado con UML .
Addison-Wesley.

Wirfs-Brock, r, B. wilkerson, y l Salchicha. 1990. Diseño Orientado a objetos software _ Prentice
Hall PTR.

Wirfs-Brock, r, y UN. McKean. 2003. Objeto Diseño: papeles, Responsabilidades, y
colaboraciones _ Addison-Wesley.

[ Equipo LiB ]

[ Equipo LIB ]


CRÉDITOS FOTOGRÁFICOS
Todas las fotografías que aparecen en este libro han sido utilizadas con permiso.

Richard A. Paselk, Universidad Estatal de Humboldt
Astrolabio ( Capítulo 3 , página 47)

© Libre de regalías/Corbis
Huella dactilar ( Capítulo 5 , página 89), Servicio Estación ( Capítulo 5 , página 104), Auto Fábrica
( Capítulo 6 , página 136), bibliotecario ( Capítulo 6 , página 147)

martin jousset
Uvas ( Capítulo 6 , página 125), Olivos (jóvenes y viejos) (Conclusión, páginas 500–501)

Biophoto Associates/Photo Researchers, Inc.
Micrografía electrónica de Oscillatoria ( Capítulo 14 , página 335)

Ross J. Venables
Remeros (grupales e individuales) ( Capítulo 14 , páginas 341 y 371)

Fotodisco verde/Getty Images
Corredores ( Capítulo 14 , página 356), Niño ( Capítulo 14 , página 361)

Administración Nacional Oceánica y Atmosférica de EE. UU.
Gran Muralla China ( Capítulo 14 , página 364)

© 2003 NOMBRES Proyecto Fundación, atlanta,
Georgia. El fotógrafo Paul Margolies. www.aidsquilt.org
SIDA Edredón ( Capítulo 16 ,
página 439) [ Equipo LiB ]
Tags