Ohjelmointi

Kuinka käyttää tiedonsiirtoobjekteja ASP.NET Core 3.1: ssä

Tiedonsiirtoobjekti (tunnetaan yleisesti nimellä DTO) on yleensä POCO (tavallinen vanha CLR-objekti) -luokan esiintymä, jota käytetään säilönä tietojen kapseloimiseksi ja siirtämiseksi sovelluksen kerroksesta toiseen. Löydät tyypillisesti palvelutasossa käytettyjä DTO: ita tietojen palauttamiseksi esityskerrokseen. DTO: n käytön suurin etu on asiakkaiden irrottaminen sisäisistä tietorakenteista.

Tässä artikkelissa käsitellään, miksi meidän pitäisi käyttää tiedonsiirtoobjekteja ja miten voimme työskennellä niiden kanssa ASP.NET Core 3.1: ssä. Jotta voit työskennellä tässä artikkelissa annettujen koodiesimerkkien kanssa, järjestelmässäsi on oltava asennettuna Visual Studio 2019. Jos sinulla ei vielä ole kopiota, voit ladata Visual Studio 2019 täältä.

Luo ASP.NET Core 3.1 -sovellusliittymäprojekti

Ensinnäkin, luodaan ASP.NET Core -projekti Visual Studiossa. Olettaen, että Visual Studio 2019 on asennettu järjestelmään, luo uusi ASP.NET Core API -projekti Visual Studiossa noudattamalla alla olevia ohjeita.

  1. Käynnistä Visual Studio IDE.
  2. Napsauta Luo uusi projekti.
  3. Valitse Luo uusi projekti -ikkunassa ”ASP.NET Core Web Application” näkyvien mallien luettelosta.
  4. Napsauta Seuraava.
  5. Määritä uuden projektin määritys -ikkunassa uuden projektin nimi ja sijainti.
  6. Napsauta Luo.
  7. Valitse seuraavassa näkyvässä "Luo uusi ASP.NET-ydinverkkosovellus" -ikkunassa .NET Core ajonaikaisena ja ASP.NET Core 3.1 (tai uudempi) yläreunan avattavasta luettelosta.
  8. Luo uusi ASP.NET Core API -sovellus valitsemalla projektimalliksi “API”.
  9. Varmista, että valintaruudut Ota Docker-tuki käyttöön ja Määritä HTTPS: lle ei ole valittu, koska emme käytä näitä ominaisuuksia täällä.
  10. Varmista, että todennukseksi on määritetty Ei todentamista, koska emme myöskään käytä todennusta.
  11. Napsauta Luo.

Tämä luo uuden ASP.NET Core API -projektin Visual Studioon. Käytämme tätä projektia työskentelemään tiedonsiirtoobjektien kanssa tämän artikkelin seuraavissa osissa.

Miksi käyttää tiedonsiirtoobjekteja (DTO)?

Jos suunnittelet ja kehität sovellusta, jos käytät malleja tietojen siirtämiseen tasojen välillä ja lähetät tietoja takaisin esitystasolle, paljastat sovelluksesi sisäiset tietorakenteet. Se on suuri suunnitteluvirhe sovelluksessasi.

Irrottamalla tasosi DTO: t tekevät elämästä helpompaa, kun otat käyttöön sovellusliittymiä, MVC-sovelluksia ja myös viestimalleja, kuten Message Broker. DTO on loistava valinta, kun haluat siirtää kevyen esineen langan yli - varsinkin kun siirrät esineesi kaistanleveyden rajoitetun median kautta.

Käytä DTO: ta abstraktioon

Voit hyödyntää DTO: ita abstraktoidaksesi sovelluksesi toimialueobjektit käyttöliittymästä tai esityskerroksesta. Tällöin sovelluksesi esityskerros irrotetaan palvelutasosta. Joten jos haluat vaihtaa esityskerrosta, voit tehdä sen helposti sovelluksen toimiessa nykyisen verkkotunnustason kanssa. Vastaavasti voit muuttaa sovelluksesi toimialueen tasoa muuttamatta sovelluksen esityskerrosta.

Käytä DTO: ta tietojen piilottamiseen

Toinen syy, miksi haluat käyttää DTO: ta, on tietojen piilottaminen. Toisin sanoen käyttämällä DTO: ta voit palauttaa vain pyydetyt tiedot. Oletetaan esimerkiksi, että sinulla on menetelmä nimeltä GetAllEmployees (), joka palauttaa kaikki työntekijöihin liittyvät tiedot. Valaistaan ​​tätä kirjoittamalla koodi.

Luo aiemmin luomassamme projektissa uusi tiedosto nimeltä Employee.cs. Kirjoita seuraava koodi tähän tiedostoon määritelläksesi malliluokan nimeltä Työntekijä.

julkisen luokan työntekijä

    {

julkinen int Id {get; aseta; }

julkinen merkkijono Etunimi {get; aseta; }

julkinen merkkijono Sukunimi {get; aseta; }

julkinen merkkijono DepartmentName {get; aseta; }

julkinen desimaali Basic {get; aseta; }

julkinen desimaali DA {get; aseta; }

julkinen desimaali HRA {get; aseta; }

julkinen desimaali NetSalary {get; aseta; }

    }

Huomaa, että Työntekijä-luokka sisältää ominaisuuksia, kuten Tunnus, Etunimi, Sukunimi, Osasto, Perus, DA, HRA ja NetSalary. Esityskerros saattaa kuitenkin tarvita vain GetAllEmployees () -menetelmän työntekijöiden tunnuksen, etunimen, sukunimen ja osaston nimen. Jos tämä menetelmä palauttaa luettelon, kuka tahansa voi nähdä työntekijän palkkatiedot. Et halua sitä.

Tämän ongelman välttämiseksi voit suunnitella DTO-luokan nimeltä EmployeeDTO, joka sisältää vain pyydetyt ominaisuudet (kuten Id, FirstName, Sukunimi ja Department Name).

Luo DTO-luokka C #

Tämän saavuttamiseksi luo tiedosto nimeltä EmployeeDTO.cs ja kirjoita seuraava koodi sinne.

julkisen luokan työntekijäDTO

    {

julkinen int Id {get; aseta; }

julkinen merkkijono Etunimi {get; aseta; }

julkinen merkkijono Sukunimi {get; aseta; }

julkinen merkkijono DepartmentName {get; aseta; }

    }

Nyt kun malli- ja tiedonsiirtoobjektiluokat ovat käytettävissä, haluat ehkä luoda muuntoluokan, joka sisältää kaksi tapaa: yhden muuntaa Employee-malliluokan ilmentymä EmployeeDTO-ilmentymäksi ja (päinvastoin) toisen ilmentymän muuntamiseksi EmployeeDTO: n arvosta Employee-malliluokkaan. Voit myös hyödyntää AutoMapperia, joka on suosittu objektien välinen kartoituskirjasto näiden kahden erilaisen tyypin kartoittamiseen. Voit lukea lisää AutoMapperista täältä.

Luo luettelo sovelluksesi palvelutasoon ja palauta kokoelma takaisin esitystasolle.

DTO: iden muuttumattomuus

DTO on tarkoitettu siirtämään tietoja sovelluksen yhdestä kerroksesta toiseen. DTO: n asiakas voi olla sisäänrakennettu .NET / C # / Java tai jopa JavaScript / TypeScript. DTO on usein sarjamuotoinen, jotta se voi olla riippumaton vastaanottimessa käytettävästä tekniikasta. Useimmissa tapauksissa tietojen vastaanottajan ei tarvitse muokata kyseisiä tietoja vastaanottamisen jälkeen - ihannetapauksessa ei pidä!

Tämä on klassinen esimerkki muuttumattomuuden tärkeydestä. Ja juuri sen vuoksi DTO: n pitäisi olla muuttumaton!

On olemassa useita tapoja, joilla voit muuttaa muuttumattomia DTO: ita C #: ssä. Voit käyttää ReadOnlyCollection- tai System.Collections.Immutable-nimitilaa sisältäviä langattomia muuttumattomia kokoelmatyyppejä. Voit hyödyntää C # 9: n tietuetyyppejä myös muuttumattomien DTO: iden toteuttamiseksi.

Toimialueohjattu suunnittelu odottaa, että toimialueobjektit ovat ulkoisesti muuttumattomia. Tämä on hyvä syy tehdä DTO: si muuttumattomaksi, eikö olekin?

DTO: n sarjakuvahaasteet

DTO: n pitäisi olla mahdollista sarjata / deserialisoida saumattomasti, jotta se voidaan siirtää langalle. Käytännössä joudut ehkä kuitenkin ratkaisemaan joitain sarjatoimenpiteisiin liittyviä ongelmia työskennellessäsi DTO: n kanssa. Sinulla voi olla useita entiteettejä tai malliluokkia reaalimaailman sovelluksessa, ja kullakin niistä voi olla viittauksia toisiinsa.

Oletetaan, että olet rakentanut läsnäolohallintajärjestelmän organisaatiosi työntekijöille. Yleensä sovelluksessasi voi olla luokka nimeltä Työntekijä, joka viittaa Käyttäjäluokkaan (eli työntekijä on sovelluksen käyttäjä), joka puolestaan ​​viittaa Rooliluokkaan. Rooliluokka saattaa viitata käyttöoikeusluokkaan, joka puolestaan ​​voi viitata PermissionType- ja PermissionGroup-luokkiin. Kun sarjoitat Employee-luokan ilmentymän, päädyt sarjaamaan myös nämä objektit. On helppo nähdä, että joissakin monimutkaisissa tapauksissa saatat päätyä sarjaan useiden tyyppien kanssa.

Täällä laiska tai asynkroninen lastaus tulee pelastamaan. Tämä on ominaisuus, jonka avulla voit ladata entiteettejä vain pyydettäessä. Lisätietoja laiskan latauksen suorittamisesta saat tutustumalla artikkeliin laiskasta alustamisesta C #: ssä.

Tiedonsiirtoobjektit eivät yleensä sisällä liiketoimintalogiikkaa - ne sisältävät vain tietoja. Muuttamattomuus on haluttu ominaisuus työskenneltäessä DTO: n kanssa. Vaihtumattomia DTO: ita voidaan toteuttaa useilla tavoilla. Keskustelen lisää C #: n muuttumattomuudesta myöhemmässä postissa täällä.

Kuinka tehdä enemmän ASP.NET Core -sovelluksessa:

  • Kuinka käsitellä 404 virhettä ASP.NET Core MVC: ssä
  • Riippuvuusinjektion käyttäminen ASP.NET Core 3.1 -suodattimissa
  • Asetuskuvion käyttäminen ASP.NET Core -sovelluksessa
  • Kuinka käyttää päätepisteiden reititystä ASP.NET Core 3.0 MVC: ssä
  • Tietojen vieminen Exceliin ASP.NET Core 3.0: ssa
  • LoggerMessagen käyttäminen ASP.NET Core 3.0: ssa
  • Kuinka lähettää sähköposteja ASP.NET Core -sovelluksessa
  • Tietojen kirjaaminen SQL Server -palvelimeen ASP.NET Core -sovelluksessa
  • Työn ajoitus Quartz.NET: n avulla ASP.NET Core -sovelluksessa
  • Tietojen palauttaminen ASP.NET Core Web -sovellusliittymästä
  • Kuinka muotoilla vastaustiedot ASP.NET Core -sovelluksessa
  • ASP.NET Core Web -sovellusliittymän kuluttaminen RestSharpin avulla
  • Asynkronointitoimintojen suorittaminen Dapperin avulla
  • Ominaisuuslippujen käyttäminen ASP.NET Core -sovelluksessa
  • FromServices-määritteen käyttäminen ASP.NET Core -sovelluksessa
  • Kuinka toimia evästeiden kanssa ASP.NET Core -sovelluksessa
  • Staattisten tiedostojen käsittely ASP.NET Core -sovelluksessa
  • URL: n uudelleenkirjoittamisen väliohjelmiston käyttäminen ASP.NET Core -sovelluksessa
  • Nopeudenrajoituksen toteuttaminen ASP.NET Core -sovelluksessa
  • Kuinka käyttää Azure Application Insightsia ASP.NET Core -sovelluksessa
  • NLog-lisäominaisuuksien käyttäminen ASP.NET Core -sovelluksessa
  • Kuinka käsitellä virheitä ASP.NET Web API: ssa
  • Kuinka toteuttaa maailmanlaajuinen poikkeusten käsittely ASP.NET Core MVC: ssä
  • Kuinka käsitellä nolla-arvoja ASP.NET Core MVC: ssä
  • Edistynyt versiointi ASP.NET Core Web -sovellusliittymässä
  • Kuinka työskennellä työntekijöiden palveluiden kanssa ASP.NET Core -sovelluksessa
  • Tietosuoja-sovellusliittymän käyttö ASP.NET Core -sovelluksessa
  • Ehdollisen väliohjelmiston käyttäminen ASP.NET Core -sovelluksessa
  • Istunnon tilan käyttäminen ASP.NET Core -sovelluksessa
  • Kuinka kirjoittaa tehokkaita ohjaimia ASP.NET Core -sovellukseen
$config[zx-auto] not found$config[zx-overlay] not found