Programavimas

Kaip naudoti duomenų perdavimo objektus ASP.NET Core 3.1

Duomenų perdavimo objektas (paprastai žinomas kaip DTO) paprastai yra POCO (paprasto seno CLR objekto) klasės egzempliorius, naudojamas kaip talpykla duomenims kaupti ir perduoti iš vieno programos sluoksnio į kitą. Paprastai DTO naudojate paslaugų lygmenyje, kad duomenys būtų grąžinti į pateikimo sluoksnį. Didžiausias DTO naudojimo pranašumas yra klientų atsiejimas nuo vidinių duomenų struktūrų.

Šiame straipsnyje aptariama, kodėl turėtume naudoti duomenų perdavimo objektus ir kaip su jais dirbti ASP.NET Core 3.1. Norėdami dirbti su šiame straipsnyje pateiktais kodų pavyzdžiais, sistemoje turite būti įdiegę „Visual Studio 2019“. Jei dar neturite kopijos, galite atsisiųsti „Visual Studio 2019“ čia.

Sukurkite ASP.NET Core 3.1 API projektą

Pirmiausia sukurkime ASP.NET Core projektą „Visual Studio“. Darant prielaidą, kad „Visual Studio 2019“ yra įdiegta jūsų sistemoje, atlikite toliau nurodytus veiksmus, kad sukurtumėte naują „ASP.NET Core API“ projektą „Visual Studio“.

  1. Paleiskite „Visual Studio IDE“.
  2. Spustelėkite „Sukurti naują projektą“.
  3. Lange „Kurti naują projektą“ rodomų šablonų sąraše pasirinkite „ASP.NET Core Web Application“.
  4. Spustelėkite Pirmyn.
  5. Lange „Konfigūruoti naują projektą“ nurodykite naujo projekto pavadinimą ir vietą.
  6. Spustelėkite Sukurti.
  7. Vėliau rodomame lange „Kurti naują ASP.NET pagrindinę žiniatinklio programą“ viršuje esančiame išskleidžiamajame sąraše pasirinkite .NET Core kaip vykdymo laiką ir ASP.NET Core 3.1 (ar naujesnę).
  8. Pasirinkite „API“ kaip projekto šabloną, kad sukurtumėte naują ASP.NET Core API programą.
  9. Įsitikinkite, kad nepažymėti žymės langeliai „Įgalinti„ Docker “palaikymą“ ir „Konfigūruoti HTTPS“, nes čia nenaudosime tų funkcijų.
  10. Įsitikinkite, kad autentifikavimas nustatytas kaip „Be autentifikavimo“, nes mes taip pat nenaudosime autentifikavimo.
  11. Spustelėkite Sukurti.

Tai sukurs naują ASP.NET Core API projektą „Visual Studio“. Šį projektą naudosime dirbdami su duomenų perdavimo objektais tolesniuose šio straipsnio skyriuose.

Kodėl verta naudoti duomenų perdavimo objektus (DTO)?

Kurdami ir kurdami programą, jei naudojate modelius duomenims perduoti tarp sluoksnių ir duomenis siunčiate atgal į pateikimo sluoksnį, atskleidžiate savo programos vidines duomenų struktūras. Tai yra pagrindinis jūsų programos dizaino trūkumas.

Atsieję savo sluoksnius, DTO palengvina gyvenimą, kai diegiate API, MVC programas ir pranešimų šablonus, pvz., „Message Broker“. DTO yra puikus pasirinkimas, kai norėtumėte praleisti lengvą daiktą per laidą, ypač kai praleidžiate objektą per riboto pralaidumo terpę.

Abstrakcijai naudokite DTO

Galite pasinaudoti DTO pranašumais, kad iš vartotojo sąsajos ar pateikimo sluoksnio išvestumėte savo programos domeno objektus. Tokiu būdu jūsų programos pateikimo sluoksnis yra atsietas nuo paslaugų sluoksnio. Taigi, jei norite pakeisti pateikimo sluoksnį, galite tai padaryti lengvai, o programa toliau dirbs su esamu domeno sluoksniu. Panašiai galite pakeisti savo programos domeno sluoksnį nekeisdami programos pateikimo sluoksnio.

Duomenims slėpti naudokite DTO

Kita priežastis, dėl kurios norėtumėte naudoti DTO, yra duomenų slėpimas. Tai yra, naudodamiesi DTO galite grąžinti tik prašomus duomenis. Tarkime, kad turite metodą pavadinimu „GetAllEmployees“ (), kuris pateikia visus duomenis, susijusius su visais darbuotojais. Paaiškinkime tai parašydami kodą.

Anksčiau sukurtame projekte sukurkite naują failą pavadinimu „Employee.cs“. Įveskite šį kodą šiame faile, kad apibrėžtumėte modelio klasę pavadinimu Darbuotojas.

visuomenės klasės darbuotojas

    {

public int Id {get; rinkinys; }

public string FirstName {get; rinkinys; }

vieša eilutė Pavardė {get; rinkinys; }

viešoji eilutė „DepartmentName“ {get; rinkinys; }

public decimal Basic {get; rinkinys; }

viešasis dešimtainis DA {get; rinkinys; }

visuomenės dešimtainis HRA {get; rinkinys; }

viešasis dešimtainis „NetSalary“ {get; rinkinys; }

    }

Atkreipkite dėmesį, kad „Employee“ klasėje yra ypatybių, įskaitant Id, FirstName, LastName, Department, Basic, DA, HRA ir NetSalary. Tačiau pristatymo sluoksniui gali reikėti tik „GetAllEmployees“ () metodo darbuotojų ID, vardo, pavardės ir skyriaus pavadinimo. Jei šis metodas pateikia Sąrašą, bet kas galės matyti išsamią informaciją apie darbuotojo atlyginimą. Jūs to nenorite.

Norėdami išvengti šios problemos, galite sukurti DTO klasę pavadinimu „EmployeeDTO“, kurioje būtų tik reikalaujamos ypatybės (pvz., Id, FirstName, LastName ir Department Name).

Sukurkite DTO klasę C #

Norėdami tai pasiekti, sukurkite failą pavadinimu EmployeeDTO.cs ir įrašykite ten šį kodą.

viešoji klasė DarbuotojasDTO

    {

public int Id {get; rinkinys; }

public string FirstName {get; rinkinys; }

vieša eilutė Pavardė {get; rinkinys; }

viešoji eilutė „DepartmentName“ {get; rinkinys; }

    }

Dabar, kai modelio ir duomenų perdavimo objektų klasės yra prieinamos, galbūt norėsite sukurti keitiklio klasę, kurioje yra du metodai: vienas konvertuoti „Employee model“ klasės egzempliorių į „EmployeeDTO“ egzempliorių ir (atvirkščiai) vienas - paversti egzempliorių. iš „EmployeeDTO“ į „Employee model“ klasės egzempliorių. Taip pat galite pasinaudoti „AutoMapper“, populiarios objektų susiejimo bibliotekos pranašumais, kad atvaizduotumėte šiuos du skirtingus tipus. Daugiau apie „AutoMapper“ galite perskaityti čia.

Programos paslaugų lygmenyje turėtumėte sukurti sąrašą ir grąžinti rinkinį į pristatymo sluoksnį.

DTO nekintamumas

DTO yra skirtas perduoti duomenis iš vieno programos sluoksnio į kitą. DTO vartotojas gali būti sukurtas .NET / C # / Java ar net „JavaScript“ / „TypeScript“. DTO dažnai yra serijinis, kad jis galėtų būti nepriklausomas nuo imtuve naudojamos technologijos. Daugeliu atvejų duomenų gavėjui nereikia jų modifikuoti po jų gavimo - idealiu atveju to neturėtų!

Tai klasikinis nekintamumo svarbos pavyzdys. Būtent todėl DTO turėtų būti nekintamas!

Yra keli būdai, kaip galite keisti nekintamus DTO C #. Galite naudoti „ReadOnlyCollection“ arba sistemoje saugius nekintamus kolekcijos tipus, esančius sistemoje.Collections.Immutable vardų sritis. Galite pasinaudoti C # 9 įrašų tipų pranašumais, kad įdiegtumėte ir nekintamus DTO.

Domenu pagrįstas dizainas tikisi, kad domeno objektai bus nekeičiami iš išorės. Tai yra tinkama priežastis padaryti savo DTO nekintamas, ar ne?

DTO serializacijos iššūkiai

Turėtumėte sugebėti sklandžiai suderinti / išjungti DTO, kad jį būtų galima perduoti laidu. Tačiau praktiškai jums gali tekti išspręsti kai kurias serializavimo problemas dirbant su DTO. Realiojoje programoje gali būti keli objektai ar modelių klasės, ir kiekviename iš jų gali būti nuorodų vienas į kitą.

Tarkime, kad jūs sukūrėte lankomumo valdymo sistemą savo organizacijos darbuotojams. Paprastai jūsų programoje gali būti klasė, pavadinta „Darbuotojas“, kuri nurodo vartotojo klasę (t. Y. Darbuotojas yra programos vartotojas), kuri savo ruožtu nurodo „Vaidmenų“ klasę. Vaidmenų klasė gali nurodyti „Permissions“ klasę, kuri savo ruožtu gali nurodyti „PermissionType“ ir „PermissionGroup“ klases. Dabar, kai atliksite serijos „Darbuotojų“ klasės egzempliorių, taip pat ir šiuos objektus. Lengva suprasti, kad kai kuriais sudėtingais atvejais galite serijuoti kelis tipus.

Čia gelbsti tingus ar asinchroninis krovimas. Tai funkcija, kuri gali padėti įkelti objektus tik paprašius. Norėdami gauti daugiau informacijos apie tai, kaip atlikti tingų įkėlimą, galite peržiūrėti mano straipsnį apie tingų inicializavimą C #.

Duomenų perdavimo objektuose paprastai nėra jokios verslo logikos - juose yra tik duomenys. Nekintamumas yra pageidaujama funkcija dirbant su DTO. Yra keli būdai, kuriais galite įdiegti nekintamus DTO. Daugiau apie nekintamumą C # aptarsiu vėlesniame įraše čia.

Kaip padaryti daugiau naudojant „ASP.NET Core“:

  • Kaip tvarkyti 404 klaidas ASP.NET Core MVC
  • Kaip naudoti priklausomybės įpurškimą veiksmo filtruose ASP.NET Core 3.1
  • Kaip naudoti ASP.NET Core parinkčių modelį
  • Kaip naudoti galinių taškų nukreipimą ASP.NET Core 3.0 MVC
  • Kaip eksportuoti duomenis į „Excel“ naudojant ASP.NET Core 3.0
  • Kaip naudoti „LoggerMessage“ ASP.NET Core 3.0
  • Kaip siųsti el. Laiškus naudojant ASP.NET Core
  • Kaip registruoti duomenis į „SQL Server“ naudojant ASP.NET Core
  • Kaip suplanuoti darbus naudojant „Quartz.NET“ ASP.NET Core
  • Kaip grąžinti duomenis iš ASP.NET Core Web API
  • Kaip formatuoti atsakymo duomenis ASP.NET Core
  • Kaip suvartoti ASP.NET Core Web API naudojant „RestSharp“
  • Kaip atlikti asinchronines operacijas naudojant „Dapper“
  • Kaip naudoti funkcijų žymes „ASP.NET Core“
  • Kaip naudoti „FromServices“ atributą „ASP.NET Core“
  • Kaip dirbti su slapukais ASP.NET Core
  • Kaip dirbti su statiniais failais sistemoje ASP.NET Core
  • Kaip naudoti URL perrašymo tarpinę programinę įrangą ASP.NET Core
  • Kaip įdiegti normos ribojimą ASP.NET Core
  • Kaip naudoti „Azure Application Insights“ ASP.NET Core
  • Išplėstinių „NLog“ funkcijų naudojimas „ASP.NET Core“
  • Kaip tvarkyti klaidas ASP.NET žiniatinklio API
  • Kaip įdiegti visuotinį išimčių tvarkymą ASP.NET Core MVC
  • Kaip tvarkyti nulines reikšmes ASP.NET Core MVC
  • Išplėstinė ASP.NET „Core Web API“ versijų versija
  • Kaip dirbti su darbuotojų paslaugomis ASP.NET Core
  • Kaip naudoti duomenų apsaugos API ASP.NET Core
  • Kaip naudoti sąlyginę tarpinę programinę įrangą ASP.NET Core
  • Kaip dirbti su seanso būsena ASP.NET Core
  • Kaip rašyti efektyvius valdiklius ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found