Programmēšana

Kā izmantot datu pārsūtīšanas objektus ASP.NET Core 3.1

Datu pārsūtīšanas objekts (parasti pazīstams kā DTO) parasti ir POCO (vienkāršs vecs CLR objekts) klases gadījums, ko izmanto kā konteineru, lai iekapsulētu datus un nodotu tos no viena lietojumprogrammas slāņa citam. DTO parasti tiek izmantoti pakalpojumu slānī, lai datus atgrieztu prezentācijas slānī. Lielākā DTO izmantošanas priekšrocība ir klientu atsaistīšana no iekšējām datu struktūrām.

Šajā rakstā ir apspriests, kāpēc mums vajadzētu izmantot datu pārsūtīšanas objektus un kā mēs varam strādāt ar tiem ASP.NET Core 3.1. Lai strādātu ar šajā rakstā sniegtajiem kodu piemēriem, sistēmā jābūt instalētai Visual Studio 2019. Ja jums vēl nav kopijas, varat lejupielādēt Visual Studio 2019 šeit.

Izveidojiet ASP.NET Core 3.1 API projektu

Vispirms izveidosim ASP.NET Core projektu Visual Studio. Pieņemot, ka Visual Studio 2019 ir instalēta jūsu sistēmā, veiciet tālāk norādītās darbības, lai izveidotu jaunu ASP.NET Core API projektu Visual Studio.

  1. Palaidiet Visual Studio IDE.
  2. Noklikšķiniet uz “Izveidot jaunu projektu”.
  3. Logā “Izveidot jaunu projektu” parādīto veidņu sarakstā atlasiet “ASP.NET Core Web Application”.
  4. Noklikšķiniet uz Tālāk.
  5. Logā “Konfigurēt jauno projektu” norādiet jaunā projekta nosaukumu un vietu.
  6. Noklikšķiniet uz Izveidot.
  7. Nākamajā logā “Izveidot jaunu ASP.NET Core tīmekļa lietojumprogrammu” augšpusē esošajā nolaižamajā sarakstā atlasiet .NET Core kā izpildlaiku un ASP.NET Core 3.1 (vai jaunāku).
  8. Atlasiet “API” kā projekta veidni, lai izveidotu jaunu ASP.NET Core API lietojumprogrammu.
  9. Pārliecinieties, vai nav atzīmētas izvēles rūtiņas “Iespējot Docker atbalstu” un “Konfigurēt HTTPS”, jo mēs šeit neizmantosim šīs funkcijas.
  10. Pārliecinieties, ka autentifikācija ir iestatīta kā “Nav autentifikācijas”, jo mēs arī neizmantosim autentifikāciju.
  11. Noklikšķiniet uz Izveidot.

Tādējādi Visual Studio tiks izveidots jauns ASP.NET Core API projekts. Mēs izmantosim šo projektu darbam ar datu pārsūtīšanas objektiem šī raksta nākamajās sadaļās.

Kāpēc izmantot datu pārsūtīšanas objektus (DTO)?

Veidojot un izstrādājot lietojumprogrammu, ja izmantojat modeļus datu pārsūtīšanai starp slāņiem un datu nosūtīšanai atpakaļ uz prezentācijas slāni, tiek parādīta lietojumprogrammas iekšējā datu struktūra. Tas ir būtisks dizaina trūkums jūsu pieteikumā.

Atvienojot slāņus, DTO atvieglo dzīvi, ieviešot API, MVC lietojumprogrammas un arī ziņojumapmaiņas modeļus, piemēram, Message Broker. DTO ir lieliska izvēle, ja vēlaties pāriet pa vieglu priekšmetu pa vadu - it īpaši, ja objektu izlaižat caur barotni, kas ir ierobežota ar joslas platumu.

Abstrakcijai izmantojiet DTO

Varat izmantot DTO priekšrocības, lai abstrahētu lietojumprogrammas domēna objektus no lietotāja saskarnes vai prezentācijas slāņa. To darot, jūsu lietojumprogrammas prezentācijas slānis tiek atdalīts no pakalpojumu slāņa. Tātad, ja vēlaties mainīt prezentācijas slāni, to varat izdarīt viegli, kamēr lietojumprogramma turpinās strādāt ar esošo domēna slāni. Līdzīgi varat mainīt lietojumprogrammas domēna slāni, nemainot lietojumprogrammas prezentācijas slāni.

Datu slēpšanai izmantojiet DTO

Vēl viens iemesls, kāpēc vēlaties izmantot DTO, ir datu slēpšana. Tas ir, izmantojot DTO, jūs varat atgriezt tikai pieprasītos datus. Pieņemsim, ka jums ir metode GetAllEmployees (), kas atgriež visus datus, kas attiecas uz visiem darbiniekiem. Ilustrēsim to, uzrakstot kodu.

Iepriekš izveidotajā projektā izveidojiet jaunu failu ar nosaukumu Employee.cs. Šajā failā ierakstiet šādu kodu, lai definētu modeļa klasi ar nosaukumu Darbinieks.

sabiedrības klase Darbinieks

    {

public int Id {get; komplekts; }

publiskā virkne FirstName {get; komplekts; }

publiskā virkne Uzvārds {get; komplekts; }

publiskā virkne DepartmentName {get; komplekts; }

valsts decimālskaitlis Pamata {get; komplekts; }

publiskais decimālais DA {get; komplekts; }

publiskais decimālais HRA {get; komplekts; }

publiskais decimālais skaitlis NetSalary {get; komplekts; }

    }

Ņemiet vērā, ka nodarbināto klasē ir rekvizīti, tostarp Id, FirstName, LastName, Department, Basic, DA, HRA un NetSalary. Tomēr prezentācijas slānim var būt nepieciešams tikai metodes GetAllEmployees () darbinieku ID, vārds, uzvārds un nodaļas nosaukums. Ja šī metode atgriež sarakstu, ikviens varēs redzēt detalizētu informāciju par darbinieka algu. Jūs to nevēlaties.

Lai izvairītos no šīs problēmas, varat izveidot DTO klasi ar nosaukumu EmployeeDTO, kurā būtu tikai pieprasītie rekvizīti (piemēram, Id, FirstName, LastName un Department Name).

Izveidojiet DTO klasi C #

Lai to panāktu, izveidojiet failu ar nosaukumu EmployeeDTO.cs un ierakstiet tur šo kodu.

sabiedrības klase DarbinieksDTO

    {

public int Id {get; komplekts; }

publiskā virkne FirstName {get; komplekts; }

publiskā virkne Uzvārds {get; komplekts; }

publiskā virkne DepartmentName {get; komplekts; }

    }

Tagad, kad modeļa un datu pārsūtīšanas objektu klases ir pieejamas, iespējams, vēlēsities izveidot pārveidotāju klasi, kas satur divas metodes: vienu, lai pārveidotu darbinieku modeļa klases instanci par EmployeeDTO instanci, un (otrādi), lai pārveidotu instanci no EmployeeDTO uz Darbinieku modeļa klases instanci. Varat arī izmantot AutoMapper, kas ir populāra objektu-objektu kartēšanas bibliotēka, priekšrocības, lai kartētu šos divus atšķirīgos veidus. Vairāk par AutoMapper varat lasīt šeit.

Programmas pakalpojumu slānī jāizveido saraksts un kolekcija jāatgriež atpakaļ uz prezentācijas slāni.

DTO nemainīgums

DTO ir paredzēts datu pārvadāšanai no viena lietojumprogrammas slāņa uz citu slāni. DTO patērētājs var būt iebūvēts .NET / C # / Java vai pat JavaScript / TypeScript. DTO bieži tiek sērijveidots, lai tas varētu būt neatkarīgs no uztvērējā izmantotās tehnoloģijas. Vairumā gadījumu datu saņēmējam šie dati pēc saņemšanas nav jāpārveido - ideālā gadījumā to nevajadzētu darīt!

Šis ir klasisks nemainīguma nozīmes piemērs. Un tieši tāpēc DTO jābūt nemainīgai!

Ir vairāki veidi, kā jūs varat ieviest nemaināmus DTO C #. Jūs varētu izmantot ReadOnlyCollection vai nemaināmus vītņu nemainīgus kolekciju veidus, kas atrodas sistēmā.Collections.Immutable nosaukumvieta. Varat izmantot ierakstu veidu priekšrocības C # 9, lai ieviestu arī nemaināmus DTO.

Domēna virzīts dizains sagaida, ka domēna objekti ir ārēji nemainīgi. Tas ir labs iemesls, lai padarītu jūsu DTO nemaināmus, vai ne?

DTO serializācijas izaicinājumi

Jums vajadzētu būt iespējai nemanāmi serializēt / deserializēt DTO, lai to varētu nodot pa vadu. Tomēr praksē, strādājot ar DTO, jums, iespējams, būs jāatrisina dažas serializācijas problēmas. Reālās pasaules lietojumprogrammā jums var būt vairākas entītijas vai modeļu klases, un katrā no tām var būt atsauces uz otru.

Pieņemsim, ka esat izveidojis apmeklējumu vadības sistēmu savas organizācijas darbiniekiem. Parasti jūsu lietojumprogrammā var būt klase ar nosaukumu Darbinieks, kas atsaucas uz lietotāju klasi (t.i., darbinieks ir lietojumprogrammas lietotājs), kas savukārt atsaucas uz lomu klasi. Lomu klase var atsaukties uz atļauju klasi, kas savukārt var atsaukties uz klasēm PermissionType un PermissionGroup. Tagad, sērijveidojot Darbinieku klases instanci, jūs galu galā seriālizēsit arī šos objektus. Ir viegli saprast, ka dažos sarežģītos gadījumos jūs varat sērijveidot vairākus veidus.

Šeit palīgā nāk slinka iekraušana vai asinhronā iekraušana. Šī ir funkcija, kas var palīdzēt ielādēt entītijas tikai pēc pieprasījuma. Lai iegūtu papildinformāciju par slinku ielādi, varat aplūkot manu rakstu par slinku inicializāciju C #.

Datu pārsūtīšanas objekti parasti nesatur nekādu uzņēmējdarbības loģiku - tajos ir tikai dati. Maināmība ir vēlama funkcija, strādājot ar DTO. Pastāv vairāki nemainīgu DTO ieviešanas veidi. Vairāk par nemainīgumu C # es apspriedīšu vēlāk šeit.

Kā paveikt vairāk programmā ASP.NET Core:

  • Kā rīkoties ar 404 kļūdām ASP.NET Core MVC
  • Kā atkarības injekciju izmantot darbības filtros ASP.NET Core 3.1
  • Kā izmantot opciju modeli ASP.NET Core
  • Kā izmantot galapunkta maršrutēšanu ASP.NET Core 3.0 MVC
  • Kā eksportēt datus uz Excel programmā ASP.NET Core 3.0
  • Kā lietot LoggerMessage ASP.NET Core 3.0
  • Kā nosūtīt e-pastus ASP.NET Core
  • Kā reģistrēt datus SQL Server ASP.NET Core
  • Kā ieplānot darbus, izmantojot Quartz.NET ASP.NET Core
  • Kā atgriezt datus no ASP.NET Core Web API
  • Kā formatēt atbildes datus ASP.NET Core
  • Kā patērēt ASP.NET Core Web API, izmantojot RestSharp
  • Kā veikt asinhronas darbības, izmantojot Dapper
  • Kā izmantot funkciju karodziņus ASP.NET Core
  • Kā izmantot atribūtu FromServices ASP.NET Core
  • Kā strādāt ar sīkdatnēm ASP.NET Core
  • Kā strādāt ar statiskiem failiem ASP.NET Core
  • Kā izmantot URL pārrakstīšanas starpprogrammatūru ASP.NET Core
  • Kā ieviest ātruma ierobežošanu ASP.NET Core
  • Kā izmantot Azure Application Insights ASP.NET Core
  • Papildu NLog funkciju izmantošana ASP.NET Core
  • Kā rīkoties ar kļūdām ASP.NET Web API
  • Kā ieviest globālo izņēmumu apstrādi ASP.NET Core MVC
  • Kā rīkoties ar nulles vērtībām ASP.NET Core MVC
  • Uzlabota versiju veidošana ASP.NET Core Web API
  • Kā strādāt ar darbinieku pakalpojumiem ASP.NET Core
  • Kā izmantot datu aizsardzības API ASP.NET Core
  • Kā izmantot nosacīto starpprogrammatūru ASP.NET Core
  • Kā strādāt ar sesijas stāvokli ASP.NET Core
  • Kā rakstīt efektīvus kontrollerus ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found