update readme
This commit is contained in:
14
README.md
14
README.md
@@ -6,6 +6,8 @@ An example to show how you could use clean architecture and DDD elements with Ca
|
||||
|
||||
The [BPMN process](./assets/loan_agreement.png) is a tiny process just to demonstrate the architecture.
|
||||
|
||||
### 🛫Start the process
|
||||
|
||||
With the following POST request you could start the process:
|
||||
|
||||
```curl
|
||||
@@ -24,23 +26,25 @@ Using the admin user (`username: admin` and `password: pw`) you could log in to
|
||||
|
||||
## 🏗Architecture
|
||||
|
||||
In the following sections contains some small aspects explaining the advantages of Domain-driven Design (DDD) and clean architecture.
|
||||
The following sections contain some small aspects explaining the advantages of Domain-driven Design (DDD) and clean architecture.
|
||||
|
||||

|
||||
|
||||
### DDD
|
||||
|
||||
Using Domain-driven Design or to be more precise tactical DDD you could be way more expressive and closer to your business domain. Beside that the focus in *immutability* and building object that know all about their *invariants* helps you to structure your code. Such DDD Elements can be found in our [domain-primitives](https://github.com/domain-primitives/domain-primitives-java) library.
|
||||
Using Domain-driven Design you focus on you core business domain and the domain logic. With this fact in mind you build your complex design around your domain. Keeping your domain as close to the real business as possible you need collaborate constantly with your business experts.
|
||||
|
||||
Beside that the focus in *immutability* and building object that know all about their *invariants* helps you to structure your code. Such DDD Elements can be found in our [domain-primitives](https://github.com/domain-primitives/domain-primitives-java) library.
|
||||
|
||||
Structuring your code functional and brining more context to your object with, e.g. Value Object does not only help you to keep your code expressive, it also helps keeping it close to you business as your BPMN model.
|
||||
|
||||
### Clean
|
||||
|
||||
Using clean architecture as architecture style combines perfectly with Domain-driven Design, because we completely focus on our domain, by using the [Dependency Inversion Principle](https://en.wikipedia.org/wiki/Dependency_inversion_principle).
|
||||
Using clean architecture as architecture style combines perfectly with Domain-driven Design because we completely focus on our domain, as shown in the image by placing it in the center.
|
||||
|
||||
Flexibility around your domain is the main focus I want to show you in this little example.
|
||||
Flexibility around your domain (switching from Camunda 7 to Camunda 8) is the main focus I want to show you in this little example.
|
||||
|
||||
The main advantage is the independence of any framework. Due to this fact the architecture allows, compared to the conventional layer-architecture, exchange for example you Camunda Framework. So you could migrate to Camunda 8 without even touching your business code.
|
||||
The main advantage is the independence of any framework. Due to this fact the architecture allows (and by using the [Dependency Inversion Principle](https://en.wikipedia.org/wiki/Dependency_inversion_principle)), compared to the conventional layer-architecture, exchange for example you Camunda Framework. So you could migrate to Camunda 8 without even touching your business code.
|
||||
|
||||
[The origin of clean architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html).
|
||||
|
||||
|
||||
@@ -3,6 +3,32 @@
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"id": "dO73O9eeT8OFsiTUooSpT",
|
||||
"type": "ellipse",
|
||||
"x": 165.47236495581967,
|
||||
"y": 484.3031628982044,
|
||||
"width": 669,
|
||||
"height": 669,
|
||||
"angle": 0,
|
||||
"strokeColor": "#fff",
|
||||
"backgroundColor": "#fff",
|
||||
"fillStyle": "solid",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"seed": 2090233024,
|
||||
"version": 141,
|
||||
"versionNonce": 1487306560,
|
||||
"isDeleted": false,
|
||||
"boundElements": null,
|
||||
"updated": 1652073145002,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "ellipse",
|
||||
"version": 425,
|
||||
@@ -538,8 +564,8 @@
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 101,
|
||||
"versionNonce": 738746487,
|
||||
"version": 103,
|
||||
"versionNonce": 1988486336,
|
||||
"isDeleted": false,
|
||||
"id": "tnSu5RK3WUVsB4V6xVEB_",
|
||||
"fillStyle": "cross-hatch",
|
||||
@@ -558,17 +584,17 @@
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1651492436099,
|
||||
"updated": 1652073186161,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"text": "Camudna",
|
||||
"text": "Camunda",
|
||||
"baseline": 18,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "Camudna"
|
||||
"originalText": "Camunda"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
@@ -673,30 +699,35 @@
|
||||
"originalText": "Database"
|
||||
},
|
||||
{
|
||||
"id": "HPLsoqNTUAa59obKhxgFW",
|
||||
"type": "arrow",
|
||||
"x": 780.8409587500314,
|
||||
"y": 788.8310372713305,
|
||||
"width": 80.50163028766883,
|
||||
"height": 0,
|
||||
"angle": 0,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f39000",
|
||||
"version": 256,
|
||||
"versionNonce": 68449826,
|
||||
"isDeleted": false,
|
||||
"id": "HPLsoqNTUAa59obKhxgFW",
|
||||
"fillStyle": "cross-hatch",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 780.8409587500314,
|
||||
"y": 788.8310372713305,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f39000",
|
||||
"width": 80.50163028766883,
|
||||
"height": 0,
|
||||
"seed": 307211938,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "round",
|
||||
"seed": 307211938,
|
||||
"version": 256,
|
||||
"versionNonce": 68449826,
|
||||
"isDeleted": false,
|
||||
"boundElements": null,
|
||||
"boundElements": [],
|
||||
"updated": 1651486834502,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": null,
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
@@ -706,12 +737,7 @@
|
||||
-80.50163028766883,
|
||||
0
|
||||
]
|
||||
],
|
||||
"lastCommittedPoint": null,
|
||||
"startBinding": null,
|
||||
"endBinding": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.6 MiB After Width: | Height: | Size: 5.4 MiB |
Reference in New Issue
Block a user