实现领域驱动设计(英文版)

实现领域驱动设计(英文版)
作 者: Vaughn
出版社: 电子工业出版社
丛编项:
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: 程序设计 计算机/网络
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  (美)Vaughn Vernon(沃恩.弗农)

内容简介

领域驱动设计(DDD)是教我们如何做好软件的,同时也是教我们如何更好地使用面向对象技术的。它为我们提供了设计软件的全新视角,同时也给开发者留下了一大难题:如何将领域驱动设计付诸实践?Vaughn Vernon 的这本《实现领域驱动设计》为我们给出了全面的解答。本书分别从战略和战术层面详尽地讨论了如何实现 DDD,其中包含了大量的优秀实践、设计准则和对一些问题的折中性讨论。全书共分为 14 章。DDD 战略部分讲解了领域、限界上下文、上下文映射图和架构等内容;战术部分包括实体、值对象、领域服务、领域事件、聚合和资源库等内容。一个虚构的案例研究贯穿全书,这对于实例讲解 DDD 实现来说非常有用。本书在 DDD 的思想和实现之间建立起了一座桥梁,架构师和程序员均可阅读,同时也可以作为一本 DDD 参考书。

图书目录

目录序前言致谢关于作者如何使用本书、Chapter

Getting

Started

with

DDDCan

I

DDD?Why

You

Should

Do

DDDHow

to

Do

DDDThe

Business

Value

of

Using

DDD1.

The

Organization

Gains

a

Useful

Model

of

Its

Domain2.

A

Refined,

Precise

Definition

and

Understanding

of

the

Business

Is

Developed3.

Domain

Experts

Contribute

to

Software

Design4.

A

Better

User

Experience

Is

Gained5.

Clean

Boundaries

Are

Placed

around

Pure

Models6.

Enterprise

Architecture

Is

Better

Organized7.

Agile,

Iterative,

Continuous

Modeling

Is

Used8.

New

Tools,

Both

Strategic

and

Tactical,

Are

EmployedThe

Challenges

of

Applying

DDDFiction,

with

Bucketfuls

of

RealityWrap-UpChapter

Domains,

Subdomains,

and

Bounded

ContextsBig

PictureSubdomains

and

Bounded

Contexts

at

WorkFocus

on

the

Core

DomainWhy

Strategic

Design

Is

So

Incredibly

EssentialReal-World

Domains

and

SubdomainsMaking

Sense

of

Bounded

ContextsRoom

for

More

than

the

ModelSize

of

Bounded

ContextsAligning

with

Technical

ComponentsSample

ContextsCollaboration

Context.Identity

and

Access

Context.Agile

Project

Management

ContextWrap-UpChapter

Context

MapsWhy

Context

Maps

Are

So

EssentialDrawing

Context

MapsProjects

and

Organizational

RelationshipsMapping

the

Three

ContextsWrap-UpChapter

ArchitectureInterviewing

the

Successful

CIOLayersDependency

Inversion

PrincipleHexagonal

or

Ports

and

AdaptersService-OrientedRepresentational

State

Transfer—RESTREST

as

an

Architectural

StyleKey

Aspects

of

a

RESTful

HTTP

ServerKey

Aspects

of

a

RESTful

HTTP

ClientREST

and

DDDWhy

REST?Command-Query

Responsibility

Segregation,

or

CQRSExamining

Areas

of

CQRSDealing

with

an

Eventually

Consistent

Query

ModelEvent-Driven

ArchitecturePipes

and

FiltersLong-Running

Processes,

aka

SagasEvent

SourcingData

Fabric

and

Grid-Based

Distributed

ComputingData

ReplicationEvent-Driven

Fabrics

and

Domain

EventsContinuous

QueriesDistributed

ProcessingWrap-UpChapter

EntitiesWhy

We

Use

EntitiesUnique

Identity.User

Provides

IdentityApplication

Generates

IdentityPersistence

Mechanism

Generates

IdentityAnother

Bounded

Context

Assigns

IdentityWhen

the

Timing

of

Identity

Generation

MattersSurrogate

IdentityIdentity

Stability.Discovering

Entities

and

Their

Intrinsic

CharacteristicsUncovering

Entities

and

PropertiesDigging

for

Essential

BehaviorRoles

and

ResponsibilitiesConstructionValidationChange

TrackingWrap-UpChapter

Value

ObjectsValue

CharacteristicsMeasures,

Quantifies,

or

DescribesImmutableConceptual

WholeReplaceabilityValue

Equality.Side-Effect-Free

BehaviorIntegrate

with

Minimalism.Standard

Types

Expressed

as

ValuesTesting

Value

ObjectsImplementation.Persisting

Value

ObjectsReject

Undue

Influence

of

Data

Model

Leakage.ORM

and

Single

Value

ObjectsORM

and

Many

Values

Serialized

into

a

Single

ColumnORM

and

Many

Values

Backed

by

a

Database

Entity.ORM

and

Many

Values

Backed

by

a

Join

Table.ORM

and

Enum-as-State

ObjectsWrap-UpChapter

ServicesWhat

a

Domain

Service

Is

(but

First,

What

It

Is

Not)Make

Sure

You

Need

a

Service.Modeling

a

Service

in

the

DomainIs

Separated

Interface

a

Necessity?A

Calculation

ProcessTransformation

Services.Using

a

Mini-Layer

of

Domain

ServicesTesting

Services.Wrap-UpChapter

Domain

EventsThe

When

and

Why

of

Domain

EventsModeling

EventsWith

Aggregate

CharacteristicsIdentityPublishing

Events

from

the

Domain

ModelPublisherSubscribersSpreading

the

News

to

Remote

Bounded

ContextsMessaging

Infrastructure

ConsistencyAutonomous

Services

and

SystemsLatency

TolerancesEvent

StoreArchitectural

Styles

for

Forwarding

Stored

EventsPublishing

Notifications

as

RESTful

ResourcesPublishing

Notifications

through

Messaging

MiddlewareImplementationPublishing

the

NotificationLogPublishing

Message-Based

NotificationsWrap-UpChapter

ModulesDesigning

with

ModulesBasic

Module

Naming

ConventionsModule

Naming

Conventions

for

the

Model.Modules

of

the

Agile

Project

Management

ContextModules

in

Other

LayersModule

before

Bounded

ContextWrap-UpChapter

AggregatesUsing

Aggregates

in

the

Scrum

Core

DomainFirst

Attempt:

Large-Cluster

AggregateSecond

Attempt:

Multiple

AggregatesRule:

Model

True

Invariants

in

Consistency

BoundariesRule:

Design

Small

AggregatesDon’t

Trust

Every

Use

CaseRule:

Reference

Other

Aggregates

by

IdentityMaking

Aggregates

Work

Together

through

IdentityReferencesModel

NavigationScalability

and

DistributionRule:

Use

Eventual

Consistency

Outside

the

BoundaryAsk

Whose

Job

It

IsReasons

to

Break

the

RulesReason

One:

User

Interface

ConvenienceReason

Two:

Lack

of

Technical

MechanismsReason

Three:

Global

TransactionsReason

Four:

Query

PerformanceAdhering

to

the

RulesGaining

Insight

through

Discovery.Rethinking

the

Design,

AgainEstimating

Aggregate

CostCommon

Usage

ScenariosMemory

ConsumptionExploring

Another

Alternative

DesignImplementing

Eventual

Consistency.Is

It

the

Team

Member’s

Job?Time

for

DecisionsImplementationCreate

a

Root

Entity

with

Unique

IdentityFavor

Value

Object

PartsUsing

Law

of

Demeter

and

Tell,

Don’t

AskOptimistic

Concurrency.Avoid

Dependency

Injection.Wrap-UpChapter

FactoriesFactories

in

the

Domain

ModelFactory

Method

on

Aggregate

RootCreating

CalendarEntry

InstancesCreating

Discussion

InstancesFactory

on

ServiceWrap-UpChapter

RepositoriesCollection-Oriented

RepositoriesHibernate

ImplementationConsiderations

for

a

TopLink

ImplementationPersistence-Oriented

RepositoriesCoherence

ImplementationMongoDB

ImplementationAdditional

BehaviorManaging

TransactionsA

WarningType

HierarchiesRepository

versus

Data

Access

ObjectTesting

RepositoriesTesting

with

In-Memory

ImplementationsWrap-UpChapter

Integrating

Bounded

ContextsIntegration

BasicsDistributed

Systems

Are

Fundamentally

DifferentExchanging

Information

across

System

BoundariesIntegration

Using

RESTful

ResourcesImplementing

the

RESTful

ResourceImplementing

the

REST

Client

Using

an

Anticorruption

LayerIntegration

Using

MessagingStaying

Informed

about

Product

Owners

and

Team

MembersCan

You

Handle

the

Responsibility?Long-Running

Processes,

and

Avoiding

ResponsibilityProcess

State

Machines

and

Time-out

TrackersDesigning

a

More

Sophisticated

ProcessWhen

Messaging

or

Your

System

Is

UnavailableWrap-UpChapter

Application.User

InterfaceRendering

Domain

Objects

Render

Data

Transfer

Object

from

Aggregate

InstancesUse

a

Mediator

to

Publish

Aggregate

Internal

StateRender

Aggregate

Instances

from

a

Domain

Payload

Object

State

Representations

of

Aggregate

InstancesUse

Case

Optimal

Repository

Queries.Dealing

with

Multiple,

Disparate

ClientsRendition

Adapters

and

Handling

User

EditsApplication

ServicesSample

Application

ServiceDecoupled

Service

OutputComposing

Multiple

Bounded

ContextsInfrastructureEnterprise

Component

ContainersWrap-UpAppendix

A

Aggregates

and

Event

Sourcing:

A+ESInside

an

Application

ServiceCommand

HandlersLambda

SyntaxConcurrency

Control.Structural

Freedom

with

A+ESPerformanceImplementing

an

Event

StoreRelational

PersistenceBLOB

PersistenceFocused

AggregatesRead

Model

ProjectionsUse

with

Aggregate

DesignEvents

EnrichmentSupporting

Tools

and

PatternsEvent

SerializersEvent

ImmutabilityValue

ObjectsContr