57 lines
3.0 KiB
Markdown
57 lines
3.0 KiB
Markdown
# Keep the assignment's flat module layout and console output
|
|
|
|
## Metadata
|
|
| Key | Value |
|
|
| --- | --- |
|
|
| ID | ADR-0001 |
|
|
| CrossReference | [BC-001], [SA-001] |
|
|
|
|
## Version History
|
|
| Date | Status | Author | Reviewer | Change | Commit |
|
|
| --- | --- | --- | --- | --- | --- |
|
|
| 2026-10-24 | Accepted | Jens Tirsvad Nielsen | AI as stand-in for S01 | Initial version | [52afb36] |
|
|
|
|
Allowed Status values: `Proposed`, `Accepted`, `Rejected`, `Deprecated`, `Superseded by ADR-NNNN`.
|
|
|
|
---
|
|
|
|
## Context
|
|
|
|
The Day 40 program is an assignment solution. Stakeholder S02 wants the assignment's file and class names (`main.py`, `data_manager.py`, `flight_search.py`, `flight_data.py`, `notification_manager.py`), and S03 wants a small repository ([SA-001] conflicts). The Python checklist (`QC-PY-001`) asks for the layer folders `domain`, `application`, `infrastructure` and `presentation`, for logging instead of `print`, and for a Design Class Diagram.
|
|
|
|
Options considered:
|
|
|
|
1. Full clean-architecture layout with a `logging` set-up and a DCD. Cleanest on paper, but it hides the assignment's names behind layers and adds about four packages for five small classes.
|
|
2. Keep the Day 39 flat package `src/flight_club/` with one module per assignment class, console output through `print`, no DCD. Small and recognisable; the layers are merged.
|
|
3. A middle way with `domain/` only. Splits the two data classes from the rest and still breaks the assignment's file names.
|
|
|
|
The forces: the program is a one-shot console script whose output *is* the user interface ("Print a message" in the assignment), has about 300 lines and five classes, and has one delivery mechanism.
|
|
|
|
## Decision
|
|
|
|
Keep option 2: one flat package with the assignment's module and class names. The modules still depend inward in practice (`constants` imports nothing and `flight_data` imports only `constants`; `main` is the composition root and the only module that wires them), console messages use `print` because they are the program's output, and the assignment's class list serves as the design instead of a separate DCD.
|
|
|
|
## Consequences
|
|
|
|
**Positive:**
|
|
|
|
- S02 finds the assignment's names; S03 sees a small repository with no extra packages.
|
|
- The Day 39 code and tests carry over without a restructuring.
|
|
|
|
**Negative:**
|
|
|
|
- The layers `domain`, `application`, `infrastructure` and `presentation` are merged; `QC-PY-001` criterion 17 is met only by this ADR.
|
|
- `print` is used for the program's output, so there is no log level or log file; secrets are kept out of the output by printing error types instead of error texts.
|
|
- If the program grows (a second delivery mechanism, a database), this decision must be revisited and the layers split.
|
|
|
|
## Affected Artifacts
|
|
|
|
- [BC-001] — keeps the Business Case scope of the assignment's classes and names.
|
|
- [SA-001] — resolves the conflict between S02 and S03 and the clean-architecture folders.
|
|
|
|
---
|
|
|
|
[BC-001]: ../business-case.md
|
|
[SA-001]: ../stakeholder-analysis.md
|
|
[52afb36]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/040-personal-flight-club/commit/52afb369a77cdd37c8ddc652a1495b4a3f4f59d6
|