<#list domain.modules as module>

${domain.name} Domain Model

Version ${domain.version}

<#if includeGenerationDate>

Generated on ${generationDate?datetime?iso_utc}

${domain.name} Domain Model

Table of Contents

  1. Table of Contents
  2. Introduction
  3. ${domain.name} Domain
    1. <#list domain.modules as module>
    2. ${module.name}
      1. <#if module.aggregates?size gt 0>
      2. Aggregates
        1. <#list module.aggregates as aggregate>
        2. ${aggregate.name}
        <#if module.services?size gt 0>
      3. Services
        1. <#list module.services as service>
        2. ${service.name}
        <#if module.domainProcesses?size gt 0>
      4. Domain Processes
        1. <#list module.domainProcesses as process>
        2. ${process.name}
  4. Ubiquitous Language

Introduction

This document describes ${domain.name} domain using concepts defined by Domain-Driven Design (DDD) methodology. It was generated directly from source code and can be considered as a close summary of what is actually implemented.

The following DDD elements are described in the remainder and shortly defined below. For more precise and complete definitions, please refer to the litterature:

The identity of an entity is generally represented by a special value object called the key. An aggregate is identified by its root's key.

An additional non-DDD component is also described in next sections: the Domain Process. Domain processes are responsible for calling commands on aggregates (and therefore, starting transactions when necessary). Expect for some commands initiating a process, most of them are called when handling a Domain Event.

The following conventions are being used:

The rest of the document is split in two parts:

  1. the description of the different modules and their components,
  2. the ubiquitous language, presented in the form of a glossary. Each entry is composed of a name, the module (if relevant), the type of component and a short description.

${domain.name} Domain

<#list domain.modules as module>

${module.name}

<#if module.description??> ${module.description}
<#if module.aggregates?size gt 0>

Aggregates

<#list module.aggregates as aggregate>

${aggregate.name}

${aggregate.description} <#if aggregate.valueObjects?size gt 0>
Value Objects
<#if aggregate.entities?size gt 0>
Entities
Relations
Events
<#if module.services?size gt 0>

Services

<#list module.services as service>

${service.name}

${service.description} <#if module.domainProcesses?size gt 0>

Domain Processes

<#list module.domainProcesses as process>

${process.name}

${process.description}

Ubiquitous Language

    <#list ubiquitousLanguage as entry>
  1. ${entry.name}, ${entry.type}, ${entry.description}