TLDR: Hľadám akú architektúru/organizáciu kódu použiť v projektoch s Minimal API v prevažne CRUP aplikácii (e-Shop). MediatR ukázal dobrý smer, ale s Minmal API by sme sa mali architektonicky posunúť, ale kam?
Dlhý obkec:
Skúšam si HTMX v kombinácii s Minimal API, PicoCSS a Razor komponentami na klone reálneho e-shopu (Martinus).
Kód som štruktúroval tak, že som adresár so stránkou a všetkými jej invektívnymi komponetami, co ma viedlo k myšlienke použiť vertical slice architektúru.
V projektoch, kde mam kontrolery pre API, alebo aj stránky zo statickým renderovaním som úspešne používal servisnú architektúru (IBasketService
, IBookManager
,…),
tento prístup mi vyhovoval, lebo súvisiaca logika bola na jednom mieste, zdieľaný kód bol v privátnych metódach, v kontrolleroch sa to používalo prirodzene. No mám pocit, že tento prístup sa nehodí k Minimal API, hlavne, keď tých služieb potrebujem v endpointe viac.
Na architektúre používanej pri MediatR (alebo MediatR like knižníc - neimplementujú CQRS, ale určujú spôsob štruktúrovania kódu) mi vadí niekoľko vecí:
-
Runtime binding - v podstate hádam parameter a návratovú hodnotu, proste by som chcel viac typové riešenie.
-
Do delegáta v Minimal API by som chcel dávať niečo špecifickejšie ako len
IMediator
(má to pach ako service lokátor) - skôrIMediator<SpecificHanlder>
(už ste niekedy menili implementaciu handlera kvôli testom?) aleboIMediator<ISpecificHandler>
- takmer vždy sa volá len jedna metóda. -
Nie je jasne ako jednoducho zdieľať kód medzi rôznymi handlermi.
-
(osobná skúsenosť) Pri použití MediatR vidím jeho výhody, no súčasne mám pocit, že niečo z architektonického hľadiska nerobím dobre.
Hľadám akú architektúru/organizáciu kódu použiť v projektoch s Minimal API v prevažne CRUP aplikácii (e-Shop). Nejde mi ani tak o Clean Architekturu, ktora riesi trochu iné veci, ale práve architektúru medzi vrstvov Minimal API a biznis logikou.
V podstate riesim ako by mal vyzerat MediatR, keby vznikol dnes, ale cistejsie, lepsie, krajsie.
Túto otázku som polozil aj na redite: https://www.reddit.com/r/dotnet/comments/1lcux41/beyond_mediatr/