برای استفاده از امکانات سیستم، گزینه جاوا اسکریپت در مرورگر شما باید فعال باشد
صفحه
از
0
Learning domain-driven design : aligning software architecture and business strategy
Khononov, Vlad.
اطلاعات کتابشناختی
Learning domain-driven design : aligning software architecture and business strategy
Author :
Khononov, Vlad.
Publisher :
O'Reilly,
Pub. Year :
2022
Subjects :
Application software -- Development.
Call Number :
QA 76 .76 .D47 .K56 2022
جستجو در محتوا
ترتيب
شماره صفحه
امتياز صفحه
فهرست مطالب
Copyright
(6)
Table of Contents
(7)
Foreword
(15)
Preface
(17)
Why I Wrote This Book
(18)
Who Should Read This Book
(18)
Navigating the Book
(19)
Example Domain: WolfDesk
(20)
Conventions Used in This Book
(21)
Using Code Examples
(21)
O’Reilly Online Learning
(22)
How to Contact Us
(23)
Acknowledgments
(23)
Introduction
(25)
Part I. Strategic Design
(27)
Chapter 1. Analyzing Business Domains
(29)
What Is a Business Domain?
(29)
What Is a Subdomain?
(30)
Types of Subdomains
(30)
Comparing Subdomains
(33)
Identifying Subdomain Boundaries
(37)
Domain Analysis Examples
(40)
Gigmaster
(40)
BusVNext
(41)
Who Are the Domain Experts?
(43)
Conclusion
(44)
Exercises
(44)
Chapter 2. Discovering Domain Knowledge
(47)
Business Problems
(47)
Knowledge Discovery
(48)
Communication
(48)
What Is a Ubiquitous Language?
(50)
Language of the Business
(51)
Scenarios
(51)
Consistency
(52)
Model of the Business Domain
(53)
What Is a Model?
(53)
Effective Modeling
(54)
Modeling the Business Domain
(54)
Continuous Effort
(55)
Tools
(55)
Challenges
(56)
Conclusion
(57)
Exercises
(58)
Chapter 3. Managing Domain Complexity
(59)
Inconsistent Models
(59)
What Is a Bounded Context?
(61)
Model Boundaries
(62)
Ubiquitous Language Refined
(63)
Scope of a Bounded Context
(63)
Bounded Contexts Versus Subdomains
(64)
Subdomains
(65)
Bounded Contexts
(65)
The Interplay Between Subdomains and Bounded Contexts
(65)
Boundaries
(67)
Physical Boundaries
(67)
Ownership Boundaries
(68)
Bounded Contexts in Real Life
(68)
Semantic Domains
(69)
Science
(69)
Buying a Refrigerator
(70)
Conclusion
(72)
Exercises
(72)
Chapter 4. Integrating Bounded Contexts
(75)
Cooperation
(76)
Partnership
(76)
Shared Kernel
(76)
Customer–Supplier
(79)
Conformist
(79)
Anticorruption Layer
(80)
Open-Host Service
(81)
Separate Ways
(82)
Communication Issues
(82)
Generic Subdomains
(82)
Model Differences
(82)
Context Map
(83)
Maintenance
(84)
Limitations
(84)
Conclusion
(85)
Exercises
(85)
Part II. Tactical Design
(87)
Chapter 5. Implementing Simple Business Logic
(89)
Transaction Script
(89)
Implementation
(90)
It’s Not That Easy!
(90)
When to Use Transaction Script
(94)
Active Record
(95)
Implementation
(96)
When to Use Active Record
(97)
Be Pragmatic
(98)
Conclusion
(98)
Exercises
(98)
Chapter 6. Tackling Complex Business Logic
(101)
History
(101)
Domain Model
(102)
Implementation
(103)
Building Blocks
(103)
Managing Complexity
(120)
Conclusion
(121)
Exercises
(122)
Chapter 7. Modeling the Dimension of Time
(125)
Event Sourcing
(125)
Search
(130)
Analysis
(131)
Source of Truth
(133)
Event Store
(133)
Event-Sourced Domain Model
(134)
Advantages
(136)
Disadvantages
(137)
Frequently Asked Questions
(138)
Performance
(138)
Deleting Data
(140)
Why Can’t I Just…?
(140)
Conclusion
(141)
Exercises
(142)
Chapter 8. Architectural Patterns
(143)
Business Logic Versus Architectural Patterns
(143)
Layered Architecture
(144)
Presentation Layer
(144)
Business Logic Layer
(145)
Data Access Layer
(145)
Communication Between Layers
(146)
Variation
(147)
When to Use Layered Architecture
(150)
Ports & Adapters
(151)
Terminology
(152)
Dependency Inversion Principle
(152)
Integration of Infrastructural Components
(153)
Variants
(154)
When to Use Ports & Adapters
(154)
Command-Query Responsibility Segregation
(154)
Polyglot Modeling
(155)
Implementation
(155)
Projecting Read Models
(156)
Challenges
(158)
Model Segregation
(159)
When to Use CQRS
(159)
Scope
(160)
Conclusion
(161)
Exercises
(161)
Chapter 9. Communication Patterns
(163)
Model Translation
(163)
Stateless Model Translation
(164)
Stateful Model Translation
(167)
Integrating Aggregates
(169)
Outbox
(171)
Saga
(173)
Process Manager
(176)
Conclusion
(180)
Exercises
(180)
Part III. Applying Domain-Driven Design in Practice
(183)
Chapter 10. Design Heuristics
(185)
Heuristic
(185)
Bounded Contexts
(186)
Business Logic Implementation Patterns
(187)
Architectural Patterns
(189)
Testing Strategy
(190)
Testing Pyramid
(191)
Testing Diamond
(191)
Reversed Testing Pyramid
(191)
Tactical Design Decision Tree
(192)
Conclusion
(193)
Exercises
(193)
Chapter 11. Evolving Design Decisions
(195)
Changes in Domains
(195)
Core to Generic
(196)
Generic to Core
(196)
Supporting to Generic
(197)
Supporting to Core
(197)
Core to Supporting
(198)
Generic to Supporting
(198)
Strategic Design Concerns
(198)
Tactical Design Concerns
(199)
Transaction Script to Active Record
(200)
Active Record to Domain Model
(200)
Domain Model to Event-Sourced Domain Model
(202)
Generating Past Transitions
(202)
Modeling Migration Events
(203)
Organizational Changes
(204)
Partnership to Customer–Supplier
(205)
Customer–Supplier to Separate Ways
(205)
Domain Knowledge
(205)
Growth
(206)
Subdomains
(206)
Bounded Contexts
(207)
Aggregates
(208)
Conclusion
(208)
Exercises
(209)
Chapter 12. EventStorming
(211)
What Is EventStorming?
(211)
Who Should Participate in EventStorming?
(212)
What Do You Need for EventStorming?
(212)
The EventStorming Process
(213)
Step 1: Unstructured Exploration
(213)
Step 2: Timelines
(214)
Step 3: Pain Points
(215)
Step 4: Pivotal Events
(216)
Step 5: Commands
(216)
Step 6: Policies
(217)
Step 7: Read Models
(218)
Step 8: External Systems
(219)
Step 9: Aggregates
(220)
Step 10: Bounded Contexts
(220)
Variants
(221)
When to Use EventStorming
(222)
Facilitation Tips
(222)
Watch the Dynamics
(223)
Remote EventStorming
(223)
Conclusion
(224)
Exercises
(224)
Chapter 13. Domain-Driven Design in the Real World
(227)
Strategic Analysis
(228)
Understand the Business Domain
(228)
Explore the Current Design
(229)
Modernization Strategy
(230)
Strategic Modernization
(231)
Tactical Modernization
(233)
Cultivate a Ubiquitous Language
(233)
Pragmatic Domain-Driven Design
(236)
Selling Domain-Driven Design
(237)
Undercover Domain-Driven Design
(237)
Conclusion
(239)
Exercises
(240)
Part IV. Relationships to Other Methodologies and Patterns
(241)
Chapter 14. Microservices
(243)
What Is a Service?
(243)
What Is a Microservice?
(244)
Method as a Service: Perfect Microservices?
(245)
Design Goal
(246)
System Complexity
(247)
Microservices as Deep Services
(248)
Microservices as Deep Modules
(249)
Domain-Driven Design and Microservices’ Boundaries
(251)
Bounded Contexts
(251)
Aggregates
(253)
Subdomains
(254)
Compressing Microservices’ Public Interfaces
(255)
Open-Host Service
(255)
Anticorruption Layer
(256)
Conclusion
(257)
Exercises
(258)
Chapter 15. Event-Driven Architecture
(259)
Event-Driven Architecture
(259)
Events
(260)
Events, Commands, and Messages
(260)
Structure
(261)
Types of Events
(262)
Designing Event-Driven Integration
(267)
Distributed Big Ball of Mud
(267)
Temporal Coupling
(268)
Functional Coupling
(269)
Implementation Coupling
(269)
Refactoring the Event-Driven Integration
(269)
Event-Driven Design Heuristics
(271)
Conclusion
(272)
Exercises
(273)
Chapter 16. Data Mesh
(275)
Analytical Data Model Versus Transactional Data Model
(275)
Fact Table
(276)
Dimension Table
(278)
Analytical Models
(279)
Analytical Data Management Platforms
(280)
Data Warehouse
(280)
Data Lake
(283)
Challenges of Data Warehouse and Data Lake Architectures
(284)
Data Mesh
(285)
Decompose Data Around Domains
(285)
Data as a Product
(287)
Enable Autonomy
(288)
Build an Ecosystem
(288)
Combining Data Mesh and Domain-Driven Design
(289)
Conclusion
(290)
Exercises
(291)
Closing Words
(293)
Problem
(293)
Solution
(294)
Implementation
(295)
Further Reading
(295)
Advanced Domain-Driven Design
(295)
Architectural and Integration Patterns
(296)
Modernization of Legacy Systems
(296)
EventStorming
(297)
Conclusion
(297)
Appendix A. Applying DDD: A Case Study
(299)
Five Bounded Contexts
(299)
Business Domain
(299)
Bounded Context #1: Marketing
(301)
Bounded Context #2: CRM
(302)
Bounded Context #3: Event Crunchers
(305)
Bounded Context #4: Bonuses
(306)
Bounded Context #5: The Marketing Hub
(308)
Discussion
(309)
Ubiquitous Language
(309)
Subdomains
(310)
Boundaries of Bounded Contexts
(312)
Conclusion
(313)
Appendix B. Answers to Exercise Questions
(315)
Chapter 1
(315)
Chapter 2
(316)
Chapter 3
(316)
Chapter 4
(317)
Chapter 5
(317)
Chapter 6
(318)
Chapter 7
(318)
Chapter 8
(318)
Chapter 9
(319)
Chapter 10
(319)
Chapter 11
(319)
Chapter 12
(320)
Chapter 13
(320)
Chapter 14
(320)
Chapter 15
(320)
Chapter 16
(321)
Bibliography
(323)
Index
(325)
About the Author
(339)
Colophon
(339)