Vaughn Vernon
Principal Architect, Consultant - ShiftMethod
Presentations
Developing a Complex External DSL
The use of a domain-specific language, or DSL, is becoming a realistic and even necessary solution for software developers on all sorts of projects. You've heard about DSLs, and you may know that DSLs are divided into a few different styles, internal and external. But what is an internal DSL and external DSL? When would you decide to use one or the other? And, primarily, how would you go about developing a complex external DSL? This presentation answers these questions, with a focus on developing a complex external DSL.
Learn about the important distinction between internal DSLs and external DSLs and why you would use one or the other, or both. Following this basic foundation, details on the development of a complex external DSL are presented. Covered are subjects such as, how complex might a language become and how complexity is managed; conceptualizing and designing a language syntax; understanding, designing, and developing the metamodel; defining a multi-model parser; understanding, designing, and developing the output artifact generator.
Implementing Domain-Driven Designs
Eric Evans' masterful book, Domain-Driven Design, is deep in theory and pattern language, but light on implementation guidance. With so much to offer, DDD should be put to use by many more teams seeking to tackle complexity in the heart of their software systems. However, without clear examples of how behavior-rich domain model implementations are achieved, many who could benefit greatly, instead shy away. Here's your chance to grasp DDD as Vaughn shares his experience through three practical example domain models implemented in Java.
Gain the insight you need to practice domain-driven design on your projects. Uses of patterns for strategic design include Bounded Context with its Ubiquitous Language, Context Map, Anticorruption Layer, Open Host System, and Published Language. The tactical patterns used for core model implementation include Modules, Value Objects, Entities, Aggregates, Services, Events, Factories, and Repositories backed by persistence mapping techniques. Integration between multiple Bounded Contexts is also demonstrated. Learn methods for managing aggregate boundaries, complexity, and correctness from the inside using Tell-Don't-Ask, Law of Demeter, Command-Query Separation, command-based editing models, validating domain objects, and business rules execution.
The Domain-Driven Design Metamodel
Is there a metamodel behind domain-driven design? Is it possible to blend a complex external DSL and the concepts of domain-driven design patterns to produce a tool to rapidly implement advanced domain models that strictly adhere to Eric Evans' DDD pattern language? Absolutely, and Vaughn demonstrates how this has been achieved and why the repeatable method is important to you.
Follow along with this presentation to find out how you can design a complex external DSL to realize advanced application code generation that produces error free results. Using the patterns of domain-driven design as his requirements, Vaughn shows you how a DDD-based language model and metamodel are developed. Then when the DDD-based language source code is parsed and translated, see the resulting flawless code and configuration of a Bounded Context's core domain model appear. Use similar techniques to accomplish far-reaching goals of problem domain abstraction and zero-defect component generation. Unless you have in-depth knowledge of domain-driven design and complex external DSLs, it would be helpful to attend Vaughn's previous two presentations.




