Predpokladáme, že máme N vrstvovú architektúru(Príklad: Prezentácia, Doména, Perzistencia). Prezentačná vrstva je webová aplikácia, ale musíme mať na pamäti, že by sme mohli chcieť znovu použiť doménu a vytrvalosť pre inú prezentačnú vrstvu (podobne ako webová služba alebo aplikácia Window).
Doména musí implementovať všetky obchodné logiky pri zohľadnení oprávnení používateľa. Teraz moja otázka je, ako doména vie o relácii používateľa a ktorý používateľ volá na svoje služby?
Služba My Domain Service (alebo kontrakty) vo všetkých jeho metódach bude obsahovať vstupný parameter UserId poskytovaný Presentation Layer (doména by mala byť dôvera v prezentačnej vrstve):
- GetProfileInfo (userid)
- GetUserPendingOrders (userid)
OR .. Mala by užívateľská relácia komponent CrossCutting? Ak áno, doména by vedel, ktorý používateľ volá svoju službu, takže rozhranie bude:
- GetProfileInfo ()
- GetUserPendingOrders ()
Ako sme ju mohli implementovať? Existuje nejaký návrhový vzor?
Musíme uložiť reláciu používateľa v aplikácii Storage? alebo existuje iný spôsob, ako to urobiť?
odpovede:
0 pre odpoveď č. 1Užívateľská relácia v klasickom webovom kontexte je niečím, o čom pozná webový server.
Môžete mať koncept User Session v rámcivaša aplikácia (ako len iný druh doménového objektu, s vlastným úložiskom dát, atď.), ale vy by ste chceli dávať pozor, aby ste neviazali / pevne spájali to, čo sa týka koncepcie webových serverov v relácii.
To isté platí pre iné druhy aplikácií (WinForms, atď.).
Myšlienka UserId nemá vzťah k používateľovirelácie; že používateľ môže používať systém (vytvoriť novú reláciu a možno by ste mohli spojiť obe veci dohromady. (Vaše príklady vyššie ma zarážali, či ste ich zmätili).
Je to prierezový problém?
Ak vytvoríte používateľskú reláciu ako objekt formálnej domény - potom odpoveď je "áno", pretože doménové objekty (alebo koncepty, ktoré reprezentujú) sú prierezové ale nie v tom istom zmysle, ako je zaznamenávanie alebo spracovanie chýb.
V opačnom prípade, ak relácie používateľov nie sú viac ako (napríklad) relácie založené na webovom serveri, potom odpoveď je "nie", ide o koncept špecifický pre prezentačnú vrstvu - bežiacu na webovom serveri.
Potom tu je tretia možnosť, druh polovicedoména: môžete preniesť okolo používateľa SessionID, rovnako ako by ste prešli inými primitívnymi údajmi - ale nikdy vlastne nemali doménový domén User Session. Stačí si byť opatrný, napríklad jeden typ webového servera použite GUID, iný môže použiť int alebo reťazec - preto buďte opatrní, ako idete.