| Preface | p. xv |
| Who This Book is For | p. xvi |
| How the Book is Organized | p. xvii |
| Case Study and Exercises | p. xviii |
| Conventions | p. xix |
| Further Resources | p. xix |
| Tools | p. 1 |
| Getting Started | p. 3 |
| Understanding Domain-Driven Design | p. 3 |
| The Essentials of DDD | p. 4 |
| Introducing Naked Objects | p. 8 |
| Naked Objects in About Five Minutes | p. 10 |
| How Naked Objects Helps with DDD | p. 16 |
| The Big Picture | p. 19 |
| Identifying the Domain Concepts | p. 23 |
| Introducing CarServ | p. 23 |
| Getting Ready | p. 25 |
| Creating the Domain Classes | p. 27 |
| Using Repositories to Locate Objects | p. 31 |
| Identifying Objects to the User | p. 35 |
| Capturing Simple Business Rules | p. 41 |
| Providing Choices for Properties | p. 43 |
| Relating Objects Together | p. 47 |
| Associating Objects | p. 47 |
| Adding Describing Concepts | p. 54 |
| Capturing Business Rules for Collections | p. 60 |
| Rapid Prototyping | p. 63 |
| Fixtures for Setting Up Domain Objects | p. 64 |
| Fixtures for Setting Up the Clock | p. 67 |
| Fixtures for Setting Up User Sessions | p. 70 |
| Organizing Fixtures into Hierarchies | p. 74 |
| Creating Behaviorally Complete Objects | p. 79 |
| Adding Behavior to Domain Objects | p. 80 |
| Validating Action Arguments | p. 82 |
| Making Actions Friendlier to Use | p. 85 |
| Adding Finders to Repositories | p. 87 |
| Implementing Business Rules | p. 91 |
| Validation Recap | p. 92 |
| Disabling Class Members | p. 95 |
| Hiding Class Members | p. 98 |
| Declarative Rules and the Object Life Cycle | p. 102 |
| Validating the Entire Object | p. 105 |
| Using Value Types | p. 109 |
| Identifying Value Types | p. 110 |
| Pushing Business Rules onto a Value Type | p. 111 |
| Adding a Third-Party Value Type | p. 114 |
| Specifying Defaults and Other Characteristics | p. 122 |
| Isolating Infrastructure Services | p. 125 |
| A Taxonomy of Services | p. 126 |
| The Domain Object Container | p. 128 |
| Dependency Injection | p. 130 |
| Using Services in Fixtures | p. 131 |
| Requirements for Writing Services | p. 132 |
| Using Interfaces for Repositories | p. 134 |
| Implementing a Calendar Service | p. 136 |
| Hints and Tips for Writing Services | p. 139 |
| Techniques | p. 143 |
| Distributing Class Responsibilities | p. 145 |
| Applying Coad Colors | p. 146 |
| Factoring Out Objects | p. 148 |
| Balancing Responsibilities | p. 152 |
| Representing Large Collections with Finder | p. 155 |
| Contributing Actions from Services | p. 158 |
| Applying Domain Patterns | p. 163 |
| Type as Factory Pattern | p. 164 |
| Knowledge Level Pattern | p. 170 |
| Null Object Pattern | p. 173 |
| Role Object Pattern | p. 175 |
| User Peer Object Pattern | p. 180 |
| Strategy Pattern | p. 181 |
| Process Object Pattern | p. 186 |
| Keeping the Model Maintainable | p. 193 |
| Analyzing the Structure of CarServ | p. 194 |
| Decoupling by Moving Responsibilities | p. 197 |
| Decoupling by Introducing Interfaces | p. 199 |
| Layering Modules | p. 206 |
| Decoupling by Splitting Classes | p. 208 |
| Introducing an Application Package | p. 209 |
| An Application Architecture Blueprint | p. 212 |
| Scenario Testing | p. 217 |
| Writing Developer Tests | p. 218 |
| Scenario Testing Using FitNesse | p. 223 |
| Getting Ready to Write Scenario Tests | p. 224 |
| Writing Scenario Tests | p. 229 |
| Hints and Tips | p. 236 |
| Practices | p. 239 |
| Developing Domain Applications | p. 241 |
| The Layered Architecture | p. 242 |
| Deployment Options | p. 243 |
| Which Option to Choose? | p. 246 |
| Development Activities | p. 249 |
| Configuration Management | p. 252 |
| Working Effectively | p. 255 |
| Naked Objects as a Design Tool | p. 259 |
| Using Naked Objects Only in Development | p. 259 |
| Decoupling from the Framework | p. 260 |
| Programming Model Interaction Protocol | p. 264 |
| Changing the Programming Model | p. 266 |
| Integrating with Web Frameworks | p. 269 |
| Deploying an Embedded Metamodel | p. 270 |
| Integrating Layers with the Custom Presentation Option | p. 281 |
| Integrating with the Database | p. 287 |
| Configuring XML Persistence | p. 288 |
| Mapping Entities Using JPA Annotations | p. 290 |
| Mapping Value Objects Using JPA Annotations | p. 296 |
| Mapping Relationships | p. 298 |
| Porting over Repositories | p. 302 |
| Deploying and Running the Application | p. 305 |
| Integrating Within the Enterprise | p. 311 |
| Bounded Context Patterns | p. 312 |
| Exposing a RESTful Web Service for Other Systems | p. 314 |
| Integrating Using an Enterprise Service Bus | p. 320 |
| Deploying the Full Runtime | p. 333 |
| Deploying the Application | p. 333 |
| Securing the Application | p. 342 |
| Deploying the Sister Projects | p. 347 |
| A CarServ Retrospective | p. 352 |
| The DSFA Application | p. 353 |
| Closing Thoughts | p. 354 |
| Appendixes | p. 363 |
| Programming Model Cheat Sheet | p. 365 |
| Eclipse Templates | p. 369 |
| Bibliography | p. 373 |
| Index | p. 377 |
| Table of Contents provided by Ingram. All Rights Reserved. |