Skip to content

Commit

Permalink
Release notes and doc updates for v6.1.0 (#48)
Browse files Browse the repository at this point in the history
  • Loading branch information
stefan-ka authored Oct 8, 2020
1 parent ecd5a2d commit e08c4f6
Show file tree
Hide file tree
Showing 11 changed files with 257 additions and 0 deletions.
47 changes: 47 additions & 0 deletions _cmls/team-map-generator-example-1.cml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
ContextMap InsuranceTeamMap {
type = ORGANIZATIONAL
state = TO_BE

/* Add contexts that represent subsystems/components to this organizational map: */
contains CustomerManagementContext, CustomerSelfServiceContext, PolicyManagementContext, RiskManagementContext

/* Add teams to this organizational map: */
contains CustomersBackofficeTeam, CustomersFrontofficeTeam, ContractsTeam

/* Define the subsystem/component relationships: */

CustomerSelfServiceContext [D,C]<-[U,S] CustomerManagementContext

PolicyManagementContext [D,CF]<-[U,OHS,PL] CustomerManagementContext

PolicyManagementContext [P]<->[P] RiskManagementContext

/* Define the team relationships: */

CustomersBackofficeTeam [U,S]->[D,C] CustomersFrontofficeTeam

CustomersBackofficeTeam [U]->[D] ContractsTeam

}

/* Team Definitions */
BoundedContext CustomersBackofficeTeam realizes CustomerManagementContext {
type = TEAM
domainVisionStatement = "This team is responsible for implementing the customers module in the back-office system."
}

BoundedContext CustomersFrontofficeTeam realizes CustomerSelfServiceContext {
type = TEAM
domainVisionStatement = "This team is responsible for implementing the front-office application for the insurance customers."
}

BoundedContext ContractsTeam realizes PolicyManagementContext, RiskManagementContext {
type = TEAM
domainVisionStatement = "This team is responsible for implementing the contract-, policy-, and risk-management modules in the back-office system."
}

/* Subsystem/component definitions */
BoundedContext CustomerManagementContext
BoundedContext CustomerSelfServiceContext
BoundedContext PolicyManagementContext
BoundedContext RiskManagementContext
49 changes: 49 additions & 0 deletions _cmls/team-map-generator-example-1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<div class="highlight"><pre><span></span><span class="k">ContextMap</span> InsuranceTeamMap {
<span class="k">type</span> = <span class="k">ORGANIZATIONAL</span>
<span class="k">state</span> = <span class="k">TO_BE</span>

<span class="c">/* Add contexts that represent subsystems/components to this organizational map: */</span>
<span class="k">contains</span> CustomerManagementContext, CustomerSelfServiceContext, PolicyManagementContext, RiskManagementContext

<span class="c">/* Add teams to this organizational map: */</span>
<span class="k">contains</span> CustomersBackofficeTeam, CustomersFrontofficeTeam, ContractsTeam

<span class="c">/* Define the subsystem/component relationships: */</span>

CustomerSelfServiceContext [<span class="k">D</span>,<span class="k">C</span>]&lt;-[<span class="k">U</span>,<span class="k">S</span>] CustomerManagementContext

PolicyManagementContext [<span class="k">D</span>,<span class="k">CF</span>]&lt;-[<span class="k">U</span>,<span class="k">OHS</span>,<span class="k">PL</span>] CustomerManagementContext

PolicyManagementContext [<span class="k">P</span>]&lt;-&gt;[<span class="k">P</span>] RiskManagementContext

<span class="c">/* Define the team relationships: */</span>

CustomersBackofficeTeam [<span class="k">U</span>,<span class="k">S</span>]-&gt;[<span class="k">D</span>,<span class="k">C</span>] CustomersFrontofficeTeam

CustomersBackofficeTeam [<span class="k">U</span>]-&gt;[<span class="k">D</span>] ContractsTeam

}

<span class="c">/* Team Definitions */</span>
<span class="k">BoundedContext</span> CustomersBackofficeTeam <span class="k">realizes</span> CustomerManagementContext {
<span class="k">type</span> = <span class="k">TEAM</span>
<span class="k">domainVisionStatement</span> = <span class="s">&quot;This team is responsible for implementing the customers module in the back-office system.&quot;</span>
}

<span class="k">BoundedContext</span> CustomersFrontofficeTeam <span class="k">realizes</span> CustomerSelfServiceContext {
<span class="k">type</span> = <span class="k">TEAM</span>
<span class="k">domainVisionStatement</span> = <span class="s">&quot;This team is responsible for implementing the front-office application for the insurance customers.&quot;</span>
}

<span class="k">BoundedContext</span> ContractsTeam <span class="k">realizes</span> PolicyManagementContext, RiskManagementContext {
<span class="k">type</span> = <span class="k">TEAM</span>
<span class="k">domainVisionStatement</span> = <span class="s">&quot;This team is responsible for implementing the contract-, policy-, and risk-management modules in the back-office system.&quot;</span>
}

<span class="c">/* Subsystem/component definitions */</span>
<span class="k">BoundedContext</span> CustomerManagementContext
<span class="k">BoundedContext</span> CustomerSelfServiceContext
<span class="k">BoundedContext</span> PolicyManagementContext
<span class="k">BoundedContext</span> RiskManagementContext
</pre></div>

59 changes: 59 additions & 0 deletions _docs/generators/context-map-generator.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,65 @@ Our generator produces the following graphical result for the above Context Map:

<a href="/img/context-map-generator-insurance-sample.png">![Insurance Company Example Context Map](/img/context-map-generator-insurance-sample.png)</a>

Besides Context Maps of the type _SYSTEM\_LANDSCAPE_, CML allows you to create maps that illustrate which development teams work on which subsystems or components (Context Map type _ORGANZATIONAL_). The following CML example illustrates how this can be done:

<div class="highlight"><pre><span></span><span class="k">ContextMap</span> InsuranceTeamMap {
<span class="k">type</span> = <span class="k">ORGANIZATIONAL</span>
<span class="k">state</span> = <span class="k">TO_BE</span>

<span class="c">/* Add contexts that represent subsystems/components to this organizational map: */</span>
<span class="k">contains</span> CustomerManagementContext, CustomerSelfServiceContext, PolicyManagementContext, RiskManagementContext

<span class="c">/* Add teams to this organizational map: */</span>
<span class="k">contains</span> CustomersBackofficeTeam, CustomersFrontofficeTeam, ContractsTeam

<span class="c">/* Define the subsystem/component relationships: */</span>

CustomerSelfServiceContext [<span class="k">D</span>,<span class="k">C</span>]&lt;-[<span class="k">U</span>,<span class="k">S</span>] CustomerManagementContext

PolicyManagementContext [<span class="k">D</span>,<span class="k">CF</span>]&lt;-[<span class="k">U</span>,<span class="k">OHS</span>,<span class="k">PL</span>] CustomerManagementContext

PolicyManagementContext [<span class="k">P</span>]&lt;-&gt;[<span class="k">P</span>] RiskManagementContext

<span class="c">/* Define the team relationships: */</span>

CustomersBackofficeTeam [<span class="k">U</span>,<span class="k">S</span>]-&gt;[<span class="k">D</span>,<span class="k">C</span>] CustomersFrontofficeTeam

CustomersBackofficeTeam [<span class="k">U</span>]-&gt;[<span class="k">D</span>] ContractsTeam

}

<span class="c">/* Team Definitions */</span>
<span class="k">BoundedContext</span> CustomersBackofficeTeam <span class="k">realizes</span> CustomerManagementContext {
<span class="k">type</span> = <span class="k">TEAM</span>
<span class="k">domainVisionStatement</span> = <span class="s">&quot;This team is responsible for implementing the customers module in the back-office system.&quot;</span>
}

<span class="k">BoundedContext</span> CustomersFrontofficeTeam <span class="k">realizes</span> CustomerSelfServiceContext {
<span class="k">type</span> = <span class="k">TEAM</span>
<span class="k">domainVisionStatement</span> = <span class="s">&quot;This team is responsible for implementing the front-office application for the insurance customers.&quot;</span>
}

<span class="k">BoundedContext</span> ContractsTeam <span class="k">realizes</span> PolicyManagementContext, RiskManagementContext {
<span class="k">type</span> = <span class="k">TEAM</span>
<span class="k">domainVisionStatement</span> = <span class="s">&quot;This team is responsible for implementing the contract-, policy-, and risk-management modules in the back-office system.&quot;</span>
}

<span class="c">/* Subsystem/component definitions */</span>
<span class="k">BoundedContext</span> CustomerManagementContext
<span class="k">BoundedContext</span> CustomerSelfServiceContext
<span class="k">BoundedContext</span> PolicyManagementContext
<span class="k">BoundedContext</span> RiskManagementContext
</pre></div>

Depending on how you configure the the generator (clustering parameter), it will generate one of the following visualizations for you. Not clustered:

<a href="/img/TeamMap-Illustration-1.png">![Team Map Example (Unclustered)](/img/TeamMap-Illustration-1.png)</a>

... or clustered:

<a href="/img/TeamMap-Illustration-2.png">![Team Map Example (Clustered)](/img/TeamMap-Illustration-2.png)</a>

## Generating Context Maps
The generators can be called from the context menus of the CML editors in VS Code or Eclipse. A documentation how to call the generators can also be found [here](/docs/generators/#using-the-generators).

Expand Down
102 changes: 102 additions & 0 deletions _news/2020-10-08-v6.1.0-released.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
layout: news
title: "v6.1.0 Release Notes"
author: Stefan Kapferer
image: /img/TeamMap-Illustration-1.png
---

Today we released Context Mapper 6.1.0 🥳

With this release we improved the graphical Context Map generator to produce team maps that illustrate the relations between development teams and system, application, or feature Bounded Contexts. In addition, we improved the generated PlantUML class diagrams and added a quick fix for missing Bounded Contexts on Context Maps.

## Summary of Changes

* [Team Maps](#team-maps)
* The graphical Context Map generator can now visualize the relations between development teams and system, application, or feature Bounded Contexts.
* [PlantUML Generator](#plantuml-generator)
* The PlantUML class diagrams generator respects inheritance between Entities, Value Objects, and Domain Events.
* In addition, the generator makes use of the relation type _aggregation_ in case a CML object contains a list or set of referenced objects of another type.
* [Missing Bounded Context Quick Fix](#missing-bounded-context-quick-fix)
* When creating Context Maps it is sometimes tedious to create all the Bounded Contexts first. With our new quick fix you can simply write the name of your context in the Context Map and then create it with one click.

As always, if you have any issues or other feedback, please [let us know](/getting-involved/).

## Team Maps
We enhanced the [graphical Context Map generator](/docs/context-map-generator/) so that users can illustrate the relations between development teams and the systems or components they work on. You can find an exemplary CML file modeling such a team map [here](https://github.com/ContextMapper/context-mapper-examples/blob/master/src/main/cml/insurance-example/Insurance-Example_Team-Map.cml).

The generator visualizes such a team map as follows:

<a href="/img/TeamMap-Illustration-1.png">![Team Map Example (Unclustered)](/img/TeamMap-Illustration-1.png)</a>

The generator UI in Eclipse and the extension settings in VS Code further allow you to influence the layout so that teams and system contexts are clustered:

<a href="/img/TeamMap-Illustration-2.png">![Team Map Example (Clustered)](/img/TeamMap-Illustration-2.png)</a>

## PlantUML Generator
The class diagram generator respects undefined base types now (inheritance). The generator already respected inheritance when it was given as a reference:

```
Entity BaseEntity {
long id
}
Entity Customer extends @BaseEntity {
aggregateRoot
String firstname
String lastname
}
```

However, now it also respects a base type that is only given as a name (no reference) as follows:

```
Entity Customer extends BaseEntity {
aggregateRoot
String firstname
String lastname
}
```

The generator always illustrates the base type now:

![Base Type (PlantUML) Example](/img/base-type-example-inheritance.png)

In addition to this fix, we also make use of the relation type _aggregation_. In case you have a reference list, shown in the CML example here:

```
Entity Customer {
aggregateRoot
String firstname
String lastname
- List<Address> addresses
}
Entity Address {
String street
String city
}
```

... we generate an aggregation now:

![Aggregation Example](/img/aggregation-example-plantuml.png)

**Hint:** In some indiviual cases this might not be correct and you may prefer the simple arrow we generated earlier. In this case, you can just replace the `o--` with a `-->` in the generated `*.puml` file.

## Missing Bounded Context Quick Fix
Up to now Context Mapper users always had to create Bounded Contexts before they could reference them in a CML Context Map. With our new quick fix, you can start with the Context Map and create the corresponding Bounded Contexts with a single click. Here a simple example... You started with a Context Map and want to create a new relationship, but one of the contexts does not exist:

<a href="/img/missing-context-quickfix-screenshot-1.png" target="_blank">![Missing Bounded Context on a Context Map](/img/missing-context-quickfix-screenshot-1.png)</a>

From now on, you can just use the quick fix Context Mapper suggests:

<a href="/img/missing-context-quickfix-screenshot-2.png" target="_blank">![Create Missing Bounded Context Quick Fix](/img/missing-context-quickfix-screenshot-2.png)</a>

... and Context Mapper creates the Bounded Context for you:

<a href="/img/missing-context-quickfix-screenshot-3.png" target="_blank">![Created Bounded Context](/img/missing-context-quickfix-screenshot-3.png)</a>

Thats it for this new release of Context Mapper. As always, if you have any issues or other feedback, please [let us know](/getting-involved/).
Binary file added img/TeamMap-Illustration-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/TeamMap-Illustration-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/aggregation-example-plantuml.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/base-type-example-inheritance.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/missing-context-quickfix-screenshot-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/missing-context-quickfix-screenshot-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/missing-context-quickfix-screenshot-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit e08c4f6

Please sign in to comment.