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

实现领域驱动设计(英文版) pdf epub mobi txt 电子书 下载 2025

[美] Vaughn Vernon(沃恩·弗农) 著
图书标签:
  • 领域驱动设计
  • DDD
  • 软件架构
  • 设计模式
  • 微服务
  • 企业应用
  • 软件开发
  • 代码质量
  • 业务建模
  • UML
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121272745
版次:1
商品编码:11901449
品牌:Broadview
包装:平装
丛书名: 原味精品书系
开本:16开
出版时间:2016-03-01
用纸:胶版纸
页数:648
正文语种:英文

具体描述

产品特色

内容简介

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

目录


前言
致谢
关于作者
如何使用本书、
Chapter 1 Getting Started with DDD
Can I DDD?
Why You Should Do DDD
How to Do DDD
The Business Value of Using DDD
1. The Organization Gains a Useful Model of Its Domain
2. A Refined, Precise Definition and Understanding of the Business Is Developed
3. Domain Experts Contribute to Software Design
4. A Better User Experience Is Gained
5. Clean Boundaries Are Placed around Pure Models
6. Enterprise Architecture Is Better Organized
7. Agile, Iterative, Continuous Modeling Is Used
8. New Tools, Both Strategic and Tactical, Are Employed
The Challenges of Applying DDD
Fiction, with Bucketfuls of Reality
Wrap-Up
Chapter 2 Domains, Subdomains, and Bounded Contexts
Big Picture
Subdomains and Bounded Contexts at Work
Focus on the Core Domain
Why Strategic Design Is So Incredibly Essential
Real-World Domains and Subdomains
Making Sense of Bounded Contexts
Room for More than the Model
Size of Bounded Contexts
Aligning with Technical Components
Sample Contexts
Collaboration Context.
Identity and Access Context.
Agile Project Management Context
Wrap-Up
Chapter 3 Context Maps
Why Context Maps Are So Essential
Drawing Context Maps
Projects and Organizational Relationships
Mapping the Three Contexts
Wrap-Up
Chapter 4 Architecture
Interviewing the Successful CIO
Layers
Dependency Inversion Principle
Hexagonal or Ports and Adapters
Service-Oriented
Representational State Transfer―REST
REST as an Architectural Style
Key Aspects of a RESTful HTTP Server
Key Aspects of a RESTful HTTP Client
REST and DDD
Why REST?
Command-Query Responsibility Segregation, or CQRS
Examining Areas of CQRS
Dealing with an Eventually Consistent Query Model
Event-Driven Architecture
Pipes and Filters
Long-Running Processes, aka Sagas
Event Sourcing
Data Fabric and Grid-Based Distributed Computing
Data Replication
Event-Driven Fabrics and Domain Events
Continuous Queries
Distributed Processing
Wrap-Up
Chapter 5 Entities
Why We Use Entities
Unique Identity.
User Provides Identity
Application Generates Identity
Persistence Mechanism Generates Identity
Another Bounded Context Assigns Identity
When the Timing of Identity Generation Matters
Surrogate Identity
Identity Stability.
Discovering Entities and Their Intrinsic Characteristics
Uncovering Entities and Properties
Digging for Essential Behavior
Roles and Responsibilities
Construction
Validation
Change Tracking
Wrap-Up
Chapter 6 Value Objects
Value Characteristics
Measures, Quantifies, or Describes
Immutable
Conceptual Whole
Replaceability
Value Equality.
Side-Effect-Free Behavior
Integrate with Minimalism.
Standard Types Expressed as Values
Testing Value Objects
Implementation.
Persisting Value Objects
Reject Undue Influence of Data Model Leakage.
ORM and Single Value Objects
ORM and Many Values Serialized into a Single Column
ORM and Many Values Backed by a Database Entity.
ORM and Many Values Backed by a Join Table.
ORM and Enum-as-State Objects
Wrap-Up
Chapter 7 Services
What a Domain Service Is (but First, What It Is Not)
Make Sure You Need a Service.
Modeling a Service in the Domain
Is Separated Interface a Necessity?
A Calculation Process
Transformation Services.
Using a Mini-Layer of Domain Services
Testing Services.
Wrap-Up
Chapter 8 Domain Events
The When and Why of Domain Events
Modeling Events
With Aggregate Characteristics
Identity
Publishing Events from the Domain Model
Publisher
Subscribers
Spreading the News to Remote Bounded Contexts
Messaging Infrastructure Consistency
Autonomous Services and Systems
Latency Tolerances
Event Store
Architectural Styles for Forwarding Stored Events
Publishing Notifications as RESTful Resources
Publishing Notifications through Messaging Middleware
Implementation
Publishing the NotificationLog
Publishing Message-Based Notifications
Wrap-Up
Chapter 9 Modules
Designing with Modules
Basic Module Naming Conventions
Module Naming Conventions for the Model.
Modules of the Agile Project Management Context
Modules in Other Layers
Module before Bounded Context
Wrap-Up
Chapter 10 Aggregates
Using Aggregates in the Scrum Core Domain
First Attempt: Large-Cluster Aggregate
Second Attempt: Multiple Aggregates
Rule: Model True Invariants in Consistency Boundaries
Rule: Design Small Aggregates
Don’t Trust Every Use Case
Rule: Reference Other Aggregates by Identity
Making Aggregates Work Together through Identity
References
Model Navigation
Scalability and Distribution
Rule: Use Eventual Consistency Outside the Boundary
Ask Whose Job It Is
Reasons to Break the Rules
Reason One: User Interface Convenience
Reason Two: Lack of Technical Mechanisms
Reason Three: Global Transactions
Reason Four: Query Performance
Adhering to the Rules
Gaining Insight through Discovery.
Rethinking the Design, Again
Estimating Aggregate Cost
Common Usage Scenarios
Memory Consumption
Exploring Another Alternative Design
Implementing Eventual Consistency.
Is It the Team Member’s Job?
Time for Decisions
Implementation
Create a Root Entity with Unique Identity
Favor Value Object Parts
Using Law of Demeter and Tell, Don’t Ask
Optimistic Concurrency.
Avoid Dependency Injection.
Wrap-Up
Chapter 11 Factories
Factories in the Domain Model
Factory Method on Aggregate Root
Creating CalendarEntry Instances
Creating Discussion Instances
Factory on Service
Wrap-Up
Chapter 12 Repositories
Collection-Oriented Repositories
Hibernate Implementation
Considerations for a TopLink Implementation
Persistence-Oriented Repositories
Coherence Implementation
MongoDB Implementation
Additional Behavior
Managing Transactions
A Warning
Type Hierarchies
Repository versus Data Access Object
Testing Repositories
Testing with In-Memory Implementations
Wrap-Up
Chapter 13 Integrating Bounded Contexts
Integration Basics
Distributed Systems Are Fundamentally Different
Exchanging Information across System Boundaries
Integration Using RESTful Resources
Implementing the RESTful Resource
Implementing the REST Client Using an Anticorruption Layer
Integration Using Messaging
Staying Informed about Product Owners and Team Members
Can You Handle the Responsibility?
Long-Running Processes, and Avoiding Responsibility
Process State Machines and Time-out Trackers
Designing a More Sophisticated Process
When Messaging or Your System Is Unavailable
Wrap-Up
Chapter 14 Application.
User Interface
Rendering Domain Objects
Render Data Transfer Object from Aggregate Instances
Use a Mediator to Publish Aggregate Internal State
Render Aggregate Instances from a Domain Payload Object
State Representations of Aggregate Instances
Use Case Optimal Repository Queries.
Dealing with Multiple, Disparate Clients
Rendition Adapters and Handling User Edits
Application Services
Sample Application Service
Decoupled Service Output
Composing Multiple Bounded Contexts
Infrastructure
Enterprise Component Containers
Wrap-Up
Appendix A Aggregates and Event Sourcing: A+ES
Inside an Application Service
Command Handlers
Lambda Syntax
Concurrency Control.
Structural Freedom with A+ES
Performance
Implementing an Event Store
Relational Persistence
BLOB Persistence
Focused Aggregates
Read Model Projections
Use with Aggregate Design
Events Enrichment
Supporting Tools and Patterns
Event Serializers
Event Immutability
Value Objects
Contract Generation
Unit Testing and Specifications
Event Sourcing in Functional Languages
Bibliography
Index

前言/序言

  序
  在本书中,Vaughn Vernon以一种特有的方式向我们展示了领域驱动设计(Domain-Driven Design,DDD)的各个方面,其中包括对新概念的解释、新的例子和原创的话题组织方式。我相信,这种新颖的方式可以帮助大家掌握DDD的各种微妙之处,特别是非常抽象的聚合和限界上下文。不同的人习惯用不同的方式来理解这些概念,而在缺少多种解释的情况下,想要了解这些微妙的抽象概念是非常困难的。
  本书包含了在过去9年中出现在各种论文和讲稿中的对DDD的深层剖析,而这些是在之前的书籍中没有的。本书将领域事件与实体和值对象一道看作是模型的基础部件。另外,书中还讨论了“大泥球”(Big Ball of Mud)架构和如何将其放置在上下文映射图(Context Map)中。Vaughn还向我们阐述了六边形架构(Hexagonal Architecture),这种新兴的架构与分层架构相比,能够更好地描述我们要完成的事情。
  我是在将近两年前第一次接触到本书内容的,那时Vaughn已经开始撰写本书有一段时间了。在第一次DDD峰会上,我们中的几个编写了关于DDD的若干话题,比如有关DDD的新知识,或者DDD社区所期待的一些针对性建议等。Vaughn负责写聚合部分,这一写便是一个有关聚合的文章系列,并且写得非常出色,最后,这个系列成为了本书中的一个章节。
  在那次峰会上,与会人员们一致认为:一套更加具有规约性的DDD模式是大有裨益的。诚实地讲,对于软件开发中的任何问题,答案都是“得看情况”。然而,这对于那些希望学到实际应用技术的人来说却没多大用处。人们需要更加实际的指导。经验法则不见得一定要放之四海而皆准,但在通常情况下,它们可以工作得很好,也应该被首先尝试。出于自身的果决性,这些经验法则蕴含着解决问题的思想方法。Vaughn的这本《实现领域驱动设计》将各种明晰的建议很好地融合在一起,同时又给出了一些折中性的讨论,从而避免了将这些建议过于简单化。
  一些额外的DDD模式,比如领域事件,已经成为了DDD的主流模式,人们也学会了如何应用这些模式,并尝试着在新架构和新技术中采用这些模式。在我的《领域驱动设计:软件核心复杂性应对之道》出版9年后,有太多关于DDD的新知识需要谈及,Vaughn的这本书则是最全面的阐述。
  Eric Evans
  Domain Language, Inc.

《实现领域驱动设计》是一本深度探讨如何运用领域驱动设计(DDD)方法论来构建复杂软件系统的著作。本书旨在为软件开发者、架构师和技术领导者提供一套切实可行的指南,帮助他们理解并实践DDD的核心原则和模式,从而设计出更具适应性、可维护性和业务价值的软件。 本书并非一本纯粹的理论书籍,它更侧重于如何将DDD的理念转化为实际的代码和系统设计。作者通过一系列丰富的案例和深入的剖析,带领读者一步步走向“代码即设计”的境界,让业务逻辑在软件中得到清晰、准确的体现。 核心理念与方法论的深度剖析: 首先,本书会系统地介绍DDD的基础概念。这包括: 领域(Domain)与子域(Subdomain)的划分: 讲解如何识别和界定软件系统的核心业务边界,以及如何将复杂的领域分解成更易于管理的子域。理解这一点是DDD的基石,它帮助团队聚焦于最重要的业务问题。 通用语言(Ubiquitous Language): 强调领域专家与开发团队之间建立共同语言的重要性。本书会详细阐述如何发现、定义和维护这一语言,并将其贯穿于整个开发流程,从需求讨论到代码实现。通用语言的建立能够极大地减少沟通成本和误解,确保软件真正满足业务需求。 限界上下文(Bounded Context): 这是DDD中一个至关重要的概念。本书会深入讲解什么是限界上下文,它如何定义了领域模型的边界,以及在不同限界上下文之间如何进行集成。理解限界上下文是处理大型、分布式系统中复杂业务逻辑的关键,它允许团队在各自的上下文中自由演进,同时保持整体的一致性。 模式与实践的落地指南: 在奠定坚实的概念基础后,本书将重点介绍DDD的核心战术模式(Tactical Patterns),并详细阐述如何在实践中应用它们: 实体(Entity): 介绍实体的概念,即拥有唯一标识且生命周期独立的领域对象。本书会讲解如何识别实体,如何设计其行为和状态,以及如何管理实体之间的关系。 值对象(Value Object): 阐述值对象的特点,即它们是通过其属性来定义的,并且是不可变的。本书会探讨值对象的优势,如提高代码的清晰度和可靠性,并给出如何在设计中恰当使用值对象的建议。 聚合(Aggregate): 这是一个相对复杂但极其重要的模式。本书会详细解释聚合的概念,即一组相互关联的实体和值对象,它们被视为一个整体,并通过聚合根(Aggregate Root)进行外部访问。理解和设计好聚合是保证领域模型一致性和数据完整性的关键。作者会提供大量的例子来帮助读者理解如何划分聚合边界,以及如何通过聚合根来强制执行业务规则。 领域服务(Domain Service): 讲解在某些情况下,一些重要的领域操作不适合归属于任何一个特定的实体或值对象,这时就需要使用领域服务。本书会区分领域服务与应用服务,并提供如何设计和实现领域服务的指导。 仓储(Repository): 介绍仓储的概念,它负责处理领域对象(特别是聚合根)的持久化和检索。本书会讲解仓储接口的设计,以及如何将其与具体的持久化技术解耦,从而实现对底层数据存储的抽象。 工厂(Factory): 讲解在创建复杂领域对象时,使用工厂模式的优势。本书会展示如何设计和实现工厂,以封装对象的创建逻辑,并确保创建过程符合业务规则。 领域事件(Domain Event): 这是一个更高级的模式,用于表示领域中发生的、对其他部分有意义的事件。本书会深入探讨领域事件的机制,如何发布和订阅领域事件,以及它们在实现解耦和异步通信中的作用。 战略设计模式的宏观视野: 除了战术模式,本书还会引导读者关注战略设计模式(Strategic Patterns),从而在更高层面上规划和组织软件系统: 上下文映射(Context Map): 讲解如何描绘不同限界上下文之间的关系,以及如何通过上下文映射来指导大型系统的设计和集成。本书会介绍多种上下文映射模式,如客户/供应商、共享内核、防腐层等,并指导读者如何根据实际情况选择和应用。 开放主机服务(Open Host Service)与发布订阅(Publish-Subscribe): 介绍在不同限界上下文之间进行通信的模式,强调如何定义清晰的集成接口,以及如何实现异步的通信机制。 其他战略模式: 还会涉及如“客户/供应商”、“代码共享”、“反腐层”等多种战略模式,帮助读者理解如何在不同的限界上下文之间建立有效、清晰的集成关系,避免系统间的紧耦合。 实战演练与最佳实践: 本书的价值在于其丰富的实践指导。作者并非仅仅罗列概念,而是通过贯穿全书的实际案例,演示如何将DDD的原则和模式应用到真实的软件开发场景中。读者将看到: 如何从需求出发,逐步构建领域模型。 如何在代码中体现通用语言。 如何设计和实现清晰的限界上下文。 如何运用战术模式来组织领域逻辑,使其易于理解和修改。 如何处理领域模型与基础设施(如数据库、UI)的隔离。 本书强调迭代式开发,鼓励团队在实践中不断学习和调整。它会分享在实际项目中可能遇到的挑战,以及应对这些挑战的策略。作者还会探讨与DDD相关的开发流程和文化,例如如何与产品经理、业务分析师等合作,如何建立测试驱动的开发(TDD)文化,以及如何进行持续重构以保持领域模型的健康。 目标读者与本书的价值: 本书适合以下人群: 经验丰富的软件开发者: 希望提升设计能力,构建更健壮、更易于维护的系统的开发者。 软件架构师: 需要为复杂系统设计清晰、可扩展架构的架构师。 技术领导者和项目经理: 想要理解并推动团队采用DDD方法论,从而提高项目成功率和产品质量的领导者。 对软件设计有深入追求的任何技术人员: 渴望掌握一套系统性的方法来解决软件复杂性问题的读者。 阅读《实现领域驱动设计》将帮助读者: 显著提升代码质量和可维护性。 更有效地与业务方沟通,确保软件真正解决业务痛点。 构建具有长期生命力的软件系统,能够轻松应对业务变化。 减少返工和技术债务,提高开发效率。 培养一种以业务为中心、以领域模型为核心的软件开发思维。 总而言之,本书是一本实践导向的、深刻的DDD指南,它不仅会传授知识,更会激发思维,赋能读者在复杂的软件开发领域中,构建出真正有价值、有韧性的系统。它是一次通往卓越软件设计的旅程,邀请您一同探索DDD的强大力量。

用户评价

评分

这本《实现领域驱动设计》英文版,从标题上就带着一种沉甸甸的期待感。读完后,我首先想到的不是具体的技术实现,而是一种思维模式的颠覆。在项目实践中,我们常常陷入技术细节的泥潭,忽略了业务本身的复杂性和核心价值。这本书就像一股清流,引导我们跳出“怎么做”的陷阱,去思考“我们到底要做什么”。它教会我如何更深入地理解业务需求,如何用一种更具表现力、更贴近业务语言的方式来构建软件。书中关于“限界上下文”的概念,对我触动尤其大。过去,我们常常在项目初期就尝试构建一个大而全的系统,结果往往是越到后期越难以维护,不同模块之间的耦合像藤蔓一样缠绕不清。而“限界上下文”提供了一种解耦的思路,让我意识到将复杂的领域划分成更小、更自治的单元是多么重要。这不仅能提高开发效率,更能保证系统的可扩展性和可维护性。虽然我还没完全消化书中的所有概念,但仅仅是这种对软件设计理念的重塑,就足以让我觉得这次阅读物超所值。它让我重新审视了过去的一些项目,理解了为什么有些项目会走向失败,也为我未来的项目设计指明了一个更清晰的方向。这本书更像是一本哲学著作,它探讨的是如何用更聪明、更有效的方式去应对软件开发的本质挑战。

评分

阅读《实现领域驱动设计》这本书,就像是在一个高维度的空间里俯瞰整个软件开发过程。它让我跳出了日常编码的琐碎,站在更高的视角去审视软件的架构和设计。书中关于“战术模式”和“战略模式”的区分,给了我非常大的启发。战略模式,如限界上下文、上下文映射图,帮助我理解如何将庞大的业务领域划分成易于管理的模块,并理清它们之间的关系。而战术模式,如实体、值对象、聚合,则提供了在每个模块内部进行细粒度设计的具体方法。我特别喜欢书中关于“聚合根”的解释,它强调了数据一致性的重要性,并提供了一种管理复杂对象图的方式。在实际开发中,我们常常会遇到数据不一致的问题,导致系统出现各种意想不到的错误。而通过识别聚合根,并围绕它来设计数据访问,可以有效地避免这些问题。这本书的逻辑性非常强,每一章的内容都建立在前一章的基础上,形成了一个完整的知识体系。它不像一些技术书籍那样,只是罗列一些零散的技巧,而是提供了一个系统性的方法论,让我能够从根本上提升软件设计的水平。

评分

我一直认为,好的软件设计不仅仅是代码的堆砌,更是对业务的深刻理解和巧妙的抽象。而《实现领域驱动设计》这本书,恰恰在这两方面都做得非常出色。它并没有仅仅停留在理论层面,而是用大量的实例和代码片段,演示了如何将DDD的原则转化为实际可用的解决方案。我尤其欣赏书中对于“领域事件”的讲解。过去,我们常常通过直接调用来处理业务流程中的各个环节,这种方式容易造成紧耦合,一旦某个环节发生变化,整个流程都可能受到影响。而引入领域事件,则提供了一种异步、解耦的通信方式,让系统更具弹性和可扩展性。想象一下,当一个“订单已创建”的事件发生时,不同的服务可以各自响应,比如通知库存系统、支付系统、物流系统等等,而它们之间无需直接感知对方的存在。这种设计思想,彻底改变了我对系统间通信的看法。这本书的语言虽然是英文,但作者的表达清晰流畅,结构也非常合理,即使是对于非母语读者来说,也并不构成太大的障碍。它教会我如何用更少的代码实现更强大的功能,如何构建一个真正面向业务、易于演进的软件系统。

评分

说实话,一开始被《实现领域驱动设计》这本书的厚度吓了一跳,以为会是一本晦涩难懂的学术著作。然而,在深入阅读后,我发现它远比我想象的要实用和易懂得多。这本书并非是教你如何写出“炫酷”的代码,而是教你如何写出“聪明”的代码,如何让代码真正反映业务的本质。书中对于“充血模型”和“贫血模型”的讨论,让我对过去的一些设计决策有了新的认识。我们过去常常习惯于将业务逻辑放在服务层,而领域模型仅仅是数据的载体。这种“贫血模型”虽然在初期开发可能显得效率高,但随着业务逻辑的复杂化,维护起来会变得非常困难。这本书强调将业务逻辑内聚在领域模型中,让领域对象拥有自己的行为,从而构建一个更具表现力和可维护性的系统。这不仅仅是一种编码风格的改变,更是一种对软件设计理念的重塑。它让我明白,软件不仅仅是代码,更是对业务领域知识的体现。这本书的价值在于,它提供了一套经过实践检验的、能够帮助我们构建更健壮、更易于演进的软件系统的思想和方法。

评分

坦白说,在翻开《实现领域驱动设计》这本英文原版之前,我对“领域驱动设计”(DDD)这个概念其实是有些模糊的。听过一些讲座,看过一些零散的文章,总觉得有些抽象,难以落地。这本书的出现,就像是在一片迷雾中点亮了一盏灯。它没有直接抛出晦涩难懂的术语,而是通过大量的案例和循序渐进的讲解,将DDD的核心思想一点一点地剖析开来。最让我印象深刻的是关于“领域模型”的阐述。过去,我们习惯于将数据模型和业务逻辑混为一谈,导致模型臃肿且难以理解。而这本书强调,领域模型应该是业务的核心,是软件的灵魂。它不仅仅是数据库的表结构,更是对业务领域知识的深度提炼和抽象。书中对“聚合”、“实体”、“值对象”等概念的解释,让我明白了如何构建一个清晰、有生命力的领域模型。我开始尝试在自己的项目中运用这些概念,虽然起初有些生涩,但很快就体会到了其带来的好处。代码的可读性大大提高,业务逻辑也变得更加清晰。这本书不是那种看完就能立即成为专家的秘籍,它需要时间和实践去消化和领悟。但它提供了一个坚实的基础和一套行之有效的方法论,让我能够以一种更系统、更专业的方式去思考和设计软件。

评分

书质量不错~~~值得购买

评分

还行了

评分

早就想买,刚到手

评分

书不错,但这个包装也太差了,表面灰尘和摩擦痕迹非常严重,擦了好久都不干净,相当于二手书了,不过书能看也懒得折腾了

评分

还行了

评分

早就想买,刚到手

评分

书不错,但这个包装也太差了,表面灰尘和摩擦痕迹非常严重,擦了好久都不干净,相当于二手书了,不过书能看也懒得折腾了

评分

除了贵没毛病

评分

除了贵没毛病

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有