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/