Programovanie

Ako používať objekty na prenos dát v ASP.NET Core 3.1

Objekt prenosu údajov (všeobecne známy ako DTO) je zvyčajne inštanciou triedy POCO (obyčajný starý objekt CLR), ktorá sa používa ako kontajner na zapuzdrenie údajov a ich prenos z jednej vrstvy aplikácie do druhej. Spravidla by ste našli DTO, ktoré sa používajú v servisnej vrstve na vrátenie údajov späť do prezentačnej vrstvy. Najväčšou výhodou použitia DTO je odpojenie klientov od vašich interných dátových štruktúr.

Tento článok pojednáva o tom, prečo by sme mali používať objekty na prenos dát a ako s nimi môžeme pracovať v ASP.NET Core 3.1. Ak chcete pracovať s príkladmi kódu uvedenými v tomto článku, mali by ste mať vo svojom systéme nainštalovanú aplikáciu Visual Studio 2019. Ak ešte nemáte kópiu, môžete si tu stiahnuť Visual Studio 2019.

Vytvorte projekt rozhrania ASP.NET Core 3.1 API

Najprv si vytvoríme projekt ASP.NET Core v Visual Studio. Za predpokladu, že je vo vašom systéme nainštalované Visual Studio 2019, vytvorte nový projekt ASP.NET Core API v Visual Studio podľa krokov uvedených nižšie.

  1. Spustite Visual Studio IDE.
  2. Kliknite na „Vytvoriť nový projekt“.
  3. V okne „Vytvoriť nový projekt“ zo zoznamu zobrazených šablón vyberte možnosť „Webová aplikácia ASP.NET Core“.
  4. Kliknite na Ďalej.
  5. V okne „Konfigurácia nového projektu“ zadajte názov a umiestnenie nového projektu.
  6. Kliknite na tlačidlo Vytvoriť.
  7. V nasledujúcom okne „Vytvorenie novej webovej aplikácie ASP.NET Core“ vyberte z rozbaľovacieho zoznamu v hornej časti .NET Core ako runtime a ASP.NET Core 3.1 (alebo novší).
  8. Vyberte „API“ ako šablónu projektu a vytvorte novú aplikáciu API ASP.NET Core.
  9. Skontrolujte, či nie sú začiarknuté políčka „Povoliť podporu Docker“ a „Konfigurovať pre HTTPS“, pretože tu nebudeme tieto funkcie používať.
  10. Skontrolujte, či je overenie nastavené na „Bez overenia“, pretože tiež nebudeme používať overenie.
  11. Kliknite na tlačidlo Vytvoriť.

Týmto sa vytvorí nový projekt rozhrania ASP.NET Core API v Visual Studio. Tento projekt použijeme na prácu s objektmi na prenos údajov v ďalších častiach tohto článku.

Prečo používať objekty na prenos dát (DTO)?

Ak pri navrhovaní a vývoji aplikácie používate modely na prenos údajov medzi vrstvami a na odosielanie údajov späť do prezentačnej vrstvy, odhalíte vnútorné dátové štruktúry svojej aplikácie. Toto je veľká chyba v dizajne vašej aplikácie.

Oddelením vrstiev vám DTO uľahčia život pri implementácii rozhraní API, aplikácií MVC a tiež vzorov správ, ako je Message Broker. DTO je skvelá voľba, keď chcete preniesť ľahký objekt po drôte - najmä keď prechádzate objektom cez médium s obmedzenou šírkou pásma.

Na abstrakciu použite DTO

Môžete využiť DTO na abstrahovanie doménových objektov vašej aplikácie z používateľského rozhrania alebo prezentačnej vrstvy. Pritom sa oddelí prezentačná vrstva vašej aplikácie od servisnej vrstvy. Takže ak chcete zmeniť prezentačnú vrstvu, môžete to urobiť ľahko, zatiaľ čo aplikácia bude pokračovať v práci s existujúcou doménovou vrstvou. Podobne môžete zmeniť doménovú vrstvu svojej aplikácie bez toho, aby ste museli meniť prezentačnú vrstvu aplikácie.

Na skrytie údajov použite DTO

Ďalším dôvodom, prečo by ste chceli použiť DTO, je skrývanie údajov. To znamená, že pomocou DTO môžete vrátiť iba požadované údaje. Ako príklad predpokladajme, že máte metódu s názvom GetAllEmployees (), ktorá vracia všetky údaje týkajúce sa všetkých zamestnancov. Poďme si to ilustrovať napísaním kódu.

V projekte, ktorý sme vytvorili skôr, vytvorte nový súbor s názvom Employee.cs. Do tohto súboru zadajte nasledujúci kód, ktorý definuje modelovú triedu s názvom Zamestnanec.

verejná trieda Zamestnanec

    {

public int Id {get; sada; }

verejný reťazec FirstName {get; sada; }

verejný reťazec Priezvisko {get; sada; }

verejný reťazec DepartmentName {get; sada; }

verejné desatinné miesto Basic {get; sada; }

verejné desatinné miesto DA {get; sada; }

verejné desatinné miesto HRA {get; sada; }

public decimal NetSalary {get; sada; }

    }

Všimnite si, že trieda Employee obsahuje vlastnosti vrátane Id, FirstName, LastName, Department, Basic, DA, HRA a NetSalary. Prezentačná vrstva však možno bude potrebovať iba Id, meno, priezvisko a meno oddelenia zamestnancov z metódy GetAllEmployees (). Ak táto metóda vráti zoznam, potom by ktokoľvek mohol vidieť podrobnosti o plate zamestnanca. To nechceš.

Ak sa chcete vyhnúť tomuto problému, môžete navrhnúť triedu DTO s názvom EmployeeDTO, ktorá bude obsahovať iba požadované vlastnosti (napríklad Id, meno, priezvisko a názov oddelenia).

Vytvorte triedu DTO v C #

Aby ste to dosiahli, vytvorte súbor s názvom EmployeeDTO.cs a vpíšte tam nasledujúci kód.

verejná trieda EmployeeDTO

    {

public int Id {get; sada; }

verejný reťazec FirstName {get; sada; }

verejný reťazec Priezvisko {get; sada; }

verejný reťazec DepartmentName {get; sada; }

    }

Teraz, keď sú k dispozícii triedy objektov modelu a dátového prenosu, môžete vytvoriť triedu prevodníka, ktorá obsahuje dve metódy: jednu na prevod inštancie triedy modelu Employee na inštanciu EmployeeDTO a (naopak) na prevod inštancie of EmployeeDTO na inštanciu triedy modelu Employee. Môžete tiež využiť AutoMapper, populárnu knižnicu mapovania medzi objektmi, na mapovanie týchto dvoch odlišných typov. Viac informácií o nástroji AutoMapper si môžete prečítať tu.

Mali by ste vytvoriť zoznam vo servisnej vrstve svojej aplikácie a vrátiť kolekciu späť do prezentačnej vrstvy.

Nezmeniteľnosť DTO

DTO je určený na prenos údajov z jednej vrstvy aplikácie do inej vrstvy. Spotrebiteľ DTO môže byť zabudovaný do .NET / C # / Java alebo dokonca do JavaScriptu / TypeScript. DTO je často serializovaný, aby mohol byť nezávislý od technológie použitej v prijímači. Vo väčšine prípadov príjemca údajov nemusí tieto údaje po prijatí upravovať - ​​v ideálnom prípade by to tak nemalo!

Toto je klasický príklad dôležitosti nemennosti. A práve preto by mal byť DTO nemenný!

Existuje niekoľko spôsobov, ako môžete implementovať nemenné DTO v C #. Môžete použiť ReadOnlyCollection alebo nemenné kolekcie bezpečné pre vlákna, ktoré sa nachádzajú v mennom priestore System.Collections.Immutable. Môžete využiť výhody typov záznamov v C # 9 aj na implementáciu nemenných DTO.

Návrh založený na doménach očakáva, že objekty domény budú navonok nemenné. To je dobrý dôvod, aby boli vaše DTO nezmeniteľné, nie?

Výzvy na serializáciu DTO

Mali by ste byť schopní bezproblémovo serializovať / deserializovať DTO, aby ho bolo možné prenášať ďalej. V praxi však možno budete musieť pri práci s DTO vyriešiť niektoré problémy so serializáciou. V aplikácii v reálnom svete môžete mať niekoľko entít alebo modelových tried a každá z nich môže obsahovať vzájomné odkazy.

Povedzme, že ste vytvorili systém správy dochádzky pre zamestnancov vo vašej organizácii. Spravidla môžete mať vo svojej aplikácii triedu nazvanú Zamestnanec, ktorá odkazuje na triedu používateľov (t. J. Zamestnanec je používateľom aplikácie), ktorá zase odkazuje na triedu rolí. Trieda roly môže odkazovať na triedu povolení, ktorá zase môže odkazovať na triedy PermissionType a PermissionGroup. Teraz, keď serializujete inštanciu triedy Employee, skončíte tiež so serializáciou týchto objektov. Je ľahké vidieť, že v niektorých komplikovaných prípadoch môžete skončiť sériovým pripojením niekoľkých typov.

Tu prichádza na rad lenivé načítanie alebo asynchrónne načítanie. Toto je funkcia, ktorá vám môže pomôcť načítať entity, iba ak o to budete požiadaní. Viac informácií o tom, ako vykonávať lenivé načítanie, sa dozviete v mojom článku o lenivej inicializácii v C #.

Objekty prenosu dát zvyčajne neobsahujú žiadnu obchodnú logiku - obsahujú iba údaje. Pri práci s DTO je žiadanou vlastnosťou nemennosť. Existuje niekoľko spôsobov, ako môžete implementovať nemenné DTO. Viac o nemennosti v C # sa budem venovať v neskoršom príspevku tu.

Ako urobiť viac v ASP.NET Core:

  • Ako spracovať chyby 404 v ASP.NET Core MVC
  • Ako používať vkladanie závislostí do filtrov akcií v ASP.NET Core 3.1
  • Ako používať vzor možností v ASP.NET Core
  • Ako používať smerovanie koncového bodu v ASP.NET Core 3.0 MVC
  • Ako exportovať údaje do programu Excel v ASP.NET Core 3.0
  • Ako používať LoggerMessage v ASP.NET Core 3.0
  • Ako posielať e-maily v ASP.NET Core
  • Ako prihlásiť údaje na server SQL Server v ASP.NET Core
  • Ako plánovať úlohy pomocou Quartz.NET v ASP.NET Core
  • Ako vrátiť dáta z webového rozhrania ASP.NET Core Web API
  • Ako formátovať údaje odpovedí v ASP.NET Core
  • Ako konzumovať webové rozhranie API ASP.NET Core pomocou nástroja RestSharp
  • Ako vykonávať asynchronné operácie pomocou nástroja Dapper
  • Ako používať príznaky funkcií v ASP.NET Core
  • Ako používať atribút FromServices v ASP.NET Core
  • Ako pracovať s cookies v ASP.NET Core
  • Ako pracovať so statickými súbormi v ASP.NET Core
  • Ako používať middleware na prepisovanie adries URL v ASP.NET Core
  • Ako implementovať obmedzenie rýchlosti v ASP.NET Core
  • Ako používať Azure Application Insights v ASP.NET Core
  • Používanie pokročilých funkcií NLog v ASP.NET Core
  • Ako spracovať chyby v webovom rozhraní API ASP.NET
  • Ako implementovať globálne spracovanie výnimiek v ASP.NET Core MVC
  • Ako spracovať nulové hodnoty v ASP.NET Core MVC
  • Pokročilé spravovanie verzií v webovom rozhraní API ASP.NET Core
  • Ako pracovať s pracovnými službami v ASP.NET Core
  • Ako používať rozhranie Data Protection API v ASP.NET Core
  • Ako používať podmienený middleware v ASP.NET Core
  • Ako pracovať so stavom relácie v ASP.NET Core
  • Ako písať efektívne radiče v ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found