List of Figures xvii List of Tables xxv Foreword xxvii Preface xxix About the Authors xxxv Chapter 1 Domain-Specific Development 1 Introduction 1 Domain-Specific Development 2 Examples 4 Benefits 10 Languages 11 Textual DSLs 15 Graphical DSLs 20 Aspects of Graphical DSLs 23 DSLs in Visual Studio 27 The Customization Pit 32 UML 34 Summary 40 Chapter 2 Creating and Using DSLs 41 Introduction 41 Process: Incremental Development of DSLs 41 Creating a DSL in Visual Studio 57 A Second DSL: The Project Definition DSL 77 Architecture of the DSL Tools 78 Summary 85 Chapter 3 Domain Model Definition 87 Introduction 87 The Domain Model Designer 88 The In-Memory Store 89 Domain Classes 92 Domain Relationships 98 Generating a Designer with No Shapes 108 The Generated Code 109 More about Domain Classes 115 More about Domain Properties 119 More on Domain Relationships and Roles 122 More about the Store 129 Summary 131 Chapter 4 Presentation 133 Introduction 133 Graphical Notation--Overview 134 Diagram and Editor 137 Shapes 146 Connectors 164 Decorators 167 Customizing the Graphical Notation in Code 173 Explorer 180 Properties Window 188 Summary 195 Chapter 5 Creation, Deletion, and Update Behavior 197 Introduction 197 Element Creation 197 Connection Builders 216 Element Deletion 229 Summary 234 Chapter 6 Serialization 237 Introduction 237 Saving and Loading Models and Diagrams 238 Model XML File Format 239 Elements and Properties 242 Relationships 243 Cross-Referencing 245 Diagram XML File Format 251 Versioning and Migration 254 The XML Schema 257 Customization 258 Generated Serialization Code 264 Summary 273 Chapter 7 Constraints and Validation 275 Introduction 275 Choosing Hard or Soft Constraints? 277 Soft Constraints in the DSL Tools 280 Hard Constraints in the DSL Tools 295 Rules 296 Putting Together Hard and Soft Constraints 299 Summary 307 Chapter 8 Generating Artifacts 309 Introduction 309 Artifact Generation Styles 311 Complex Relationships and Round-Tripping 321 The Templatization Process 325 Syntax of a Text Template 341 Problems of Large-Scale, Real-World Artifact Generation 349 Advanced Customizations 351 Summary 366 Chapter 9 Deploying a DSL 369 Introduction 369 Files Needed to Install a Designer 370 Getting Started--Creating a Setup Project 373 Setup Project Contents 376 Customizing Setup 377 The .dslsetup Format 378 Refreshing the Installation Files 387 Package Load Key 388 Deploying Text Templates for Code Generation 390 Summary 396 Chapter 10 Advanced DSL Customization 397 Introduction 397 Tools for Customization 397 Responding to Changes 402 DSL Shell Architecture 426 How to Add a Menu Command 429 Building the DSL Diagram into Another Interface 435 Implementing Copy and Paste 437 Shape Containers 442 Summary 453 Chapter 11 Designing a DSL 455 Introduction 455 Identifying Variability 456 Developing the Domain Model 460 Developing the Notation 468 Defining Validation Constraints 475 Developing and Evolving the Framework 479 Testing 484 Evolving a DSL 489 What Makes a Good DSL? 491 Summary 498 Conclusion 499 Index 503
Domain Specific Languages (DSL) and Domain-Driven Design (DDD) are two related concepts that have been kicking around the edges of the software engineering world for a few years, but have recently started to move much more towards center stage. A DSL is a language specially geared to working within a particular area of interest: it might be a vertical domain such as telephone design, or a horizontal one like workflow. Some well-known examples of DSLs are HTML and SQL. What is radically new is the idea of creating your own DSL for your own project. Microsoft has actually been at the forefront of promoting the use of DSLs, and has recently announced the Microsoft DSL Tools. The Microsoft DSL Tools will help developers create their own languages more easily, and work together very closely with Visual Studio Team System. This book's authors are the main designers of the Microsoft DSL Tools. They've written a book that is straightforwardly focused on understanding and using these tools; it intends to provide a detailed yet readable reference to the tools.
Steve Cook joined Microsoft in 2003 to work on the DSL Tools. Previously, he was a Distinguished Engineer at IBM, which he represented in the UML 2.0 specification process at the OMG. He has worked in the IT industry for 30 years, as architect, programmer, author, consultant, and teacher. He was one of the first people to introduce object-oriented programming into the UK, and has concentrated on languages, methods, and tools for modeling since the early 1990s. Gareth Jones is a lead developer in the DSL Tools team. He's been at Microsoft since 1997 doing various developer jobs such as building bespoke enterprise solutions, running the development of Microsoft UK's small business portal, and managing a consultancy team. Before joining Microsoft, he spent seven years leading development projects in the intelligence analysis, simulation, and aerospace industries. Stuart Kent joined Microsoft in 2003 to work on the DSL Tools. Previously, he was an academic and consultant, with a reputation in modeling and model-driven development. He has over 50 publications to his name and made significant contributions to the UML 2.0 and MOF 2.0 specifications. He is a member of the editorial board of the journal Software and Systems Modeling, and on the steering committee for the MoDELS series of conferences. He has a Ph.D. in computing from Imperial College, London. Alan Cameron Wills was a methodology consultant for almost a decade, and used to get very frustrated when people asked about good tools to support the methods. So he was very pleased to join Microsoft in 2003 to help in the DSL Tools project. He has a Ph.D. in computer science, and was joint creator of the Catalysis approach to component-based development. He gets excited about software factories, photography, sailing, and hills.