好书推荐 好书速递 排行榜 读书文摘

Implementing Domain-Driven Design

Implementing Domain-Driven Design
作者:Vaughn Vernon
出版社:Addison-Wesley Professional
出版年:2013-02
ISBN:9780321834577
行业:其它
浏览数:55

内容简介

"For software developers of all experience levels looking to improve their results, and design and implement domain-driven enterprise applications consistently with the best current state of professional practice, Implementing Domain-Driven Design will impart a treasure trove of knowledge hard won within the DDD and enterprise application architecture communities over the last couple decades." -Randy Stafford, Architect At-Large, Oracle Coherence Product Development "This book is a must-read for anybody looking to put DDD into practice." -Udi Dahan, Founder of NServiceBus Implementing Domain-Driven Design presents a top-down approach to understanding domain-driven design (DDD) in a way that fluently connects strategic patterns to fundamental tactical programming tools. Vaughn Vernon couples guided approaches to implementation with modern architectures, highlighting the importance and value of focusing on the business domain while balancing technical considerations. Building on Eric Evans' seminal book, Domain-Driven Design, the author presents practical DDD techniques through examples from familiar domains. Each principle is backed up by realistic Java examples-all applicable to C# developers-and all content is tied together by a single case study: the delivery of a large-scale Scrum-based SaaS system for a multitenant environment. The author takes you far beyond "DDD-lite" approaches that embrace DDD solely as a technical toolset, and shows you how to fully leverage DDD's "strategic design patterns" using Bounded Context, Context Maps, and the Ubiquitous Language. Using these techniques and examples, you can reduce time to market and improve quality, as you build software that is more flexible, more scalable, and more tightly aligned to business goals. Coverage includes * Getting started the right way with DDD, so you can rapidly gain value from it* Using DDD within diverse architectures, including Hexagonal, SOA, REST, CQRS, Event-Driven, and Fabric/Grid-Based* Appropriately designing and applying Entities-and learning when to use Value Objects instead* Mastering DDD's powerful new Domain Events technique* Designing Repositories for ORM, NoSQL, and other databases

......(更多)

作者简介

作者:Vaughn Vernon是一个经验丰富的软件工匠,在软件设计、开发和架构方面拥有超过25年的从业经验。他提倡通过创新来简化软件的设计和实现。从20世纪80年代开始,他便开始使用面向对象语言进行编程;在 20世纪 90年代早期,他便在领域建模中应用了领域驱动设计,那时他使用的是Smalltalk语言。他在很多业务领域都有从业经验,包括航空、环境、地理、保险、医学和电信等领域。同时,Vaughn在技术上也取得了很大的成功,包括开发可重用的框架和类库等。他在全球范围之内提供软件咨询和演讲,此外,他还在许多国家教授《实现领域驱动设计》的课程。你可以通过www.VaughnVernon.co访问到他的最新研究成果。他的Twitter:@VaughnVernon。

......(更多)

目录

Foreword xvii

Preface xix

Acknowledgments xxix

About the Author xxxiii

Guide to This Book xxxv

Chapter 1: Getting Started with DDD 1

Can I DDD? 2

Why You Should Do DDD 6

How to Do DDD 20

The Business Value of Using DDD 25

The Challenges of Applying DDD 29

Fiction, with Bucketfuls of Reality 38

Wrap-Up 41

Chapter 2: Domains, Subdomains, and Bounded Contexts 43

Big Picture 43

Why Strategic Design Is So Incredibly Essential 53

Real-World Domains and Subdomains 56

Making Sense of Bounded Contexts 62

Sample Contexts 72

Wrap-Up 84

Chapter 3: Context Maps 87

Why Context Maps Are So Essential 87

Wrap-Up 111

Chapter 4: Architecture 113

Interviewing the Successful CIO 114

Layers 119

Hexagonal or Ports and Adapters 125

Service-Oriented 130

Representational State Transfer–REST 133

Command-Query Responsibility Segregation, or CQRS 138

Event-Driven Architecture 147

Data Fabric and Grid-Based Distributed Computing 163

Wrap-Up 168

Chapter 5: Entities 171

Why We Use Entities 171

Unique Identity 173

Discovering Entities and Their Intrinsic Characteristics 191

Wrap-Up 217

Chapter 6: Value Objects 219

Value Characteristics 221

Integrate with Minimalism 232

Standard Types Expressed as Values 234

Testing Value Objects 239

Implementation 243

Persisting Value Objects 248

Wrap-Up 263

Chapter 7: Services 265

What a Domain Service Is (but First, What It Is Not) 267

Make Sure You Need a Service 268

Modeling a Service in the Domain 272

Testing Services 281

Wrap-Up 284

Chapter 8: Domain Events 285

The When and Why of Domain Events 285

Modeling Events 288

Publishing Events from the Domain Model 296

Spreading the News to Remote Bounded Contexts 303

Event Store 307

Architectural Styles for Forwarding Stored Events 312

Implementation 318

Wrap-Up 331

Chapter 9: Modules 333

Designing with Modules 333

Basic Module Naming Conventions 336

Module Naming Conventions for the Model 337

Modules of the Agile Project Management Context 340

Modules in Other Layers 343

Module before Bounded Context 344

Wrap-Up 345

Chapter 10: Aggregates 347

Using Aggregates in the Scrum Core Domain 348

Rule: Model True Invariants in Consistency Boundaries 353

Rule: Design Small Aggregates 355

Rule: Reference Other Aggregates by Identity 359

Rule: Use Eventual Consistency Outside the Boundary 364

Reasons to Break the Rules 367

Gaining Insight through Discovery 370

Implementation 380

Wrap-Up 388

Chapter 11: Factories 389

Factories in the Domain Model 389

Factory Method on Aggregate Root 391

Factory on Service 397

Wrap-Up 400

Chapter 12: Repositories 401

Collection-Oriented Repositories 402

Persistence-Oriented Repositories 418

Additional Behavior 430

Managing Transactions 432

Type Hierarchies 437

Repository versus Data Access Object 440

Testing Repositories 441

Wrap-Up 448

Chapter 13: Integrating Bounded Contexts 449

Integration Basics 450

Integration Using RESTful Resources 458

Integration Using Messaging 469

Wrap-Up 508

Chapter 14: Application 509

User Interface 512

Application Services 521

Composing Multiple Bounded Contexts 531

Infrastructure 532

Enterprise Component Containers 534

Wrap-Up 537

Appendix A: Aggregates and Event Sourcing: A+ES 539

Inside an Application Service 541

Command Handlers 549

Lambda Syntax 553

Concurrency Control 554

Structural Freedom with A+ES 558

Performance 558

Implementing an Event Store 561

Relational Persistence 565

BLOB Persistence 568

Focused Aggregates 569

Read Model Projections 570

Use with Aggregate Design 573

Events Enrichment 573

Supporting Tools and Patterns 576

Contract Generation 580

Unit Testing and Specifications 582

Event Sourcing in Functional Languages 583

Bibliography 585

Index 589

......(更多)

读书文摘

为了分配任务而拆分限界上下文是一种错误的上下文建模方式

......(更多)

猜你喜欢

点击查看