|
2 | 2 |
|
3 | 3 | ## Issues / Pull Requests |
4 | 4 |
|
5 | | -- You should discuss new features and behavior changes in an issue before starting with the implementation |
| 5 | +- You should discuss new features and behavior changes in an issue before starting with the |
| 6 | + implementation |
6 | 7 |
|
7 | 8 | ## Commit messages |
8 | 9 |
|
9 | 10 | - Commit messages must strictly follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/#specification) |
10 | 11 | - Commit messages must be `Signed-off-by` |
11 | | -- Commit messages must contain `Co-authored-by` mentioning the used LLM in case a LLM was involved in the code changes |
12 | | -- Commit messages should focus on the motivation behind a change, not be a summary of what was changed |
| 12 | +- Commit messages must contain `Co-authored-by` mentioning the used LLM in case a LLM was involved |
| 13 | + in the code changes |
| 14 | +- Commit messages should focus on the motivation behind a change, not be a summary of what was |
| 15 | + changed |
13 | 16 |
|
14 | 17 | # Technical overview |
15 | 18 |
|
|
28 | 31 | ## Architecture |
29 | 32 |
|
30 | 33 | - Clean Architecture with encapsulated UseCases in Domain layers |
| 34 | +- Follow the [Command Query Responsibility Segregation](https://martinfowler.com/bliki/CQRS.html)-Pattern with one exception: |
| 35 | + The caller is allowed to know when a command execution is "completed" by returning a completable |
| 36 | + type like `CompletableFuture` or `Flow.Publisher`. *UseCases should either read data for the UI |
| 37 | + *or* write data (this includes reading necessary entities), but not both |
31 | 38 | - Threading |
32 | 39 | - Applications usually have one main thread and expect to apply data on the main thread |
33 | 40 | - *UseCases should be executed on IO threads |
|
37 | 44 | - Reactive and immutable Programming |
38 | 45 | - Strong typed business properties |
39 | 46 | - Business properties like IDs should always be strictly typed (instead of using a primitive) |
40 | | - - If an `ID` is bound hard to another domain object like `Card`, declare the `ID` record as within this domain object. |
41 | | -- Avoid reflection access at runtime for performance reasons, prefer compile time annotation frameworks |
| 47 | + - If an `ID` is bound hard to another domain object like `Card`, declare the `ID` record as |
| 48 | + within this domain object. |
| 49 | +- Avoid reflection access at runtime for performance reasons, prefer compile time annotation |
| 50 | + frameworks |
42 | 51 |
|
43 | 52 | ## Implement Unit-Tests |
44 | 53 |
|
|
0 commit comments