From bb9146b5424e604a09899f44e1920636aded9921 Mon Sep 17 00:00:00 2001 From: ansgarz Date: Fri, 6 Sep 2024 22:30:01 +0200 Subject: [PATCH] [skip ci] add doc about modules --- doc/Modularization.md | 20 ++++++++++++++++++++ doc/resources/modularization.png | Bin 0 -> 46316 bytes 2 files changed, 20 insertions(+) create mode 100644 doc/Modularization.md create mode 100644 doc/resources/modularization.png diff --git a/doc/Modularization.md b/doc/Modularization.md new file mode 100644 index 0000000..da7d1f8 --- /dev/null +++ b/doc/Modularization.md @@ -0,0 +1,20 @@ +# Modules + +## Modules and their possible relations + +![modularization.png](resources/modularization.png) + + +#### Modules + +A,B,C: Modules with both domain and infrastructure layer code - common type of modules +D: Module with only domain: can sometimes make sense if only domain logic and no infrastructure logic is required +E: Module with only infrastructure: usually utility modules that just provide a collection of infrastructure functionality + +#### Interactions + +1. Domain calls (a function in) the infrastructure of the same module - common practice within a module +1. Domain calls (a function in) the domain another module - common practice between modules +1. Infrastructure calls infrastructure of another module - usually not recommended +1. Domain calls infrastructure in another module - can make sense in some cases e.g. if module D just needs some low-level function of module D. However where possible calling domain of module C should be preferred +1. Domain calls infrastructure in another module, which only has infrastructure - common practice for calling utility modules, which don't have a domain. \ No newline at end of file diff --git a/doc/resources/modularization.png b/doc/resources/modularization.png new file mode 100644 index 0000000000000000000000000000000000000000..9c470e7b7191ac154261d443a5656746e5180a5c GIT binary patch literal 46316 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 literal 0 HcmV?d00001