0001 — Strict DDD z czystym Core
Kontekst
Ta aplikacja przenosi rzeczywiste pieniądze. Reguły biznesowe rozsiane po endpointach, usługach w tle i komponentach Razor rozkładają się w nienadające się do testów, niespójne zachowanie — dokładnie tam, gdzie błąd kosztuje użytkownika kapitał.
Decyzja
Logika domeny żyje na agregatach, obiektach wartości i usługach domenowych w src/Core, które kompilują się z zerem zależności infrastrukturalnych (bez EF, HttpClient, Docker lub ASP.NET). Endpointy, narzędzia MCP, komponenty i BackgroundServices orkiestrują — nigdy nie decydują. Reguły:
- Brak publicznych setterów; zmiany stanu przez metody ujawniające intencję, które chronią niezmienniki.
- Agregaty odwołują się do siebie przez silne ID, nie właściwość nawigacyjną.
- Jeden
SaveChangesmutuje jeden agregat; przepływy między agregatami używają zdarzeń domenowych. - Prymitywy przecinające granicę domeny są opakowane w obiekty wartości.
- Naruszenia niezmiennika rzucają Core
DomainException, nie wyjątek frameworku.
Konsekwencje
- Reguły domeny są testowalne jednostkowo bez bazy danych lub hosta internetowego.
- Czystość
Corejest wymuszana maszynowo przezArchitectureGuardTestsi byłaby nie przebąka kompilacji, gdyby została złamana. - Jest więcej ceremonii (obiekty wartości, silne ID, zdarzenia domenowe) niż w modelu beztkliwym — jest to celkowy koszt utrzymania reguł przenoszących pieniądze w prawidłowy sposób i w jednym miejscu.