Anemijos srities modelis yra ne antipatternas, o architektūra, pagrįsta SOLID principais. Domenu pagrįstas dizainas: domeno kūrimas

Anemija – puslapis anglų kalba

Anemija

Šioje svetainėje pateikiama pacientų" informacija apie įvairias anemijos rūšis. Ją Rusijoje sukūrė hematologai – gydytojai, sprendžiantys kraujo ligas.
Jei turite klausimų dėl šio šaltinio, susisiekite su mumis el. paštu arba telefonu (+7-495-741-06-41)

Jei sergate anemija, žmonės gali pasakyti, kad pavargote kraują. Taip yra todėl, kad anemija – būklė, kai nėra pakankamai sveikų raudonųjų kraujo kūnelių, kad audiniai galėtų pernešti pakankamai deguonies – gali sukelti nuovargį.

Yra daug anemijos formų, kurių kiekviena turi savo priežastį. Anemija gali būti laikina arba ilgalaikė ir gali būti nuo lengvos iki sunkios.

Anemija yra dažnas kraujo sutrikimas. Moterims ir žmonėms, sergantiems lėtinėmis ligomis, yra didesnė rizika susirgti.

Jei įtariate anemiją, kreipkitės į gydytoją. Anemija gali būti rimtų ligų požymis. Anemijos gydymo būdai svyruoja nuo papildų vartojimo iki medicininių procedūrų. Kai kurių rūšių anemijos galite išvengti valgydami sveiką, įvairią mitybą.

Simptomai

Pagrindinis daugelio anemijos tipų simptomas yra nuovargis. Kiti anemijos simptomai yra šie:

  • Silpnumas
  • Blyški oda
  • Greitas arba nereguliarus širdies plakimas
  • Dusulys
  • Krūtinės skausmas
  • Galvos svaigimas
  • Kognityvinės problemos
  • Galūnių tirpimas ar šaltis
  • Galvos skausmas

Iš pradžių anemija gali būti tokia lengva, kad ji nepastebima. Tačiau būklei pablogėjus, požymiai ir simptomai didėja.

Priežastys

Kraujas susideda iš skysčio, vadinamo plazma, ir iš ląstelių. Plazmoje plūduriuoja trijų tipų kraujo ląstelės:

  • Baltųjų kraujo kūnelių.Šios kraujo ląstelės kovoja su infekcija.
  • Trombocitai.Šios kraujo ląstelės padeda jūsų kraujui krešėti po pjūvio.
  • Raudonieji kraujo kūneliai (eritrocitai).Šios kraujo ląstelės perneša deguonį iš plaučių per kraują į smegenis ir kitus organus bei audinius. Kad jūsų kūnas veiktų, reikia deguonies prisotinto kraujo. Deguonies prisotintas kraujas padeda jūsų kūnui suteikti energijos, o odai – sveiką švytėjimą.

Raudonuosiuose kraujo kūneliuose yra hemoglobino – raudono, daug geležies turinčio baltymo, suteikiančio kraujui raudoną spalvą. Hemoglobinas leidžia raudoniesiems kraujo kūnams pernešti deguonį iš plaučių į visas kūno dalis ir pernešti anglies dioksidą iš kitų kūno dalių į plaučius, kad jį būtų galima iškvėpti.

Dauguma kraujo kūnelių, įskaitant raudonuosius kraujo kūnelius, reguliariai gaminami jūsų kaulų čiulpuose – raudonoje, kempinėje medžiagoje, esančioje daugelio jūsų didelių kaulų ertmėse. Norint gaminti hemoglobiną ir raudonuosius kraujo kūnelius, jūsų organizmui reikia geležies, baltymų ir vitaminų iš maisto, kurį valgote.

Anemija yra būklė, kai raudonųjų kraujo kūnelių arba hemoglobino kiekis juose yra mažesnis nei normalus. Kai sergate mažakraujyste, jūsų kūnas gamina per mažai sveikų raudonųjų kraujo kūnelių, praranda per daug jų arba sunaikina greičiau, nei galima pakeisti. Dėl to jūsų kraujyje trūksta raudonųjų kraujo kūnelių, kad galėtų pernešti deguonį į audinius. nuovargis Įprastos anemijos rūšys ir jų priežastys:

    Geležies stokos anemija.Šia dažniausiai pasitaikančia anemijos forma Jungtinėse Valstijose serga maždaug viena iš penkių moterų, pusė nėščių moterų ir 3 procentai vyrų. Priežastis yra geležies elemento trūkumas jūsų kūne. Jūsų kaulų čiulpams reikia geležies, kad susidarytų hemoglobinas. Be pakankamai geležies, jūsų kūnas negali pagaminti pakankamai hemoglobino raudoniesiems kraujo kūneliams. Dėl to atsiranda geležies stokos anemija.

    Vienas iš būdų, kaip jūsų kūnas gauna reikiamos geležies, yra tada, kai miršta kraujo ląstelės – jose esanti geležis yra perdirbama ir naudojama naujų kraujo kūnelių gamybai. Taigi, jei prarandate kraują, prarandate geležį. Moterims, kurių mėnesinės yra gausios ir kurios kas mėnesį per menstruacijas netenka daug kraujo, gresia geležies stokos anemija. Lėtas, lėtinis kraujo netekimas iš kūno šaltinio, pvz., opos, gaubtinės žarnos polipo ar net gaubtinės žarnos vėžio, taip pat gali sukelti geležies netekimą ir geležies stokos anemiją.

    Jūsų kūnas taip pat gauna geležies iš maisto, kurį valgote. Geležies trūkumas gali sukelti šią anemiją. Nėščioms moterims augantis vaisius gali išeikvoti motinos geležies atsargas ir sukelti geležies stokos anemiją.

  • Vitaminų stokos anemija. Be geležies, jūsų organizmui reikia folio rūgšties ir vitamino B-12, kad susidarytų pakankamai sveikų raudonųjų kraujo kūnelių. Dieta, kurioje trūksta šių ir kitų pagrindinių maistinių medžiagų, gali sumažinti raudonųjų kraujo kūnelių gamybą. Žmonės, turintys žarnyno sutrikimų, turinčių įtakos maistinių medžiagų įsisavinimui, yra linkę į tokio tipo anemiją. Kai kurie žmonės dėl įvairių priežasčių negali įsisavinti vitamino B-12 ir jiems išsivysto vitamino B-12 stokos anemija, kuri kartais vadinama žalinga anemija. Vitaminų stokos anemijos patenka į anemijų grupę, vadinamą megaloblastine anemija, kai kaulų čiulpai gamina didelius, nenormalius raudonuosius kraujo kūnelius.
  • Lėtinės ligos anemija. Tam tikros lėtinės ligos, tokios kaip vėžys, reumatoidinis artritas, Krono liga ir kitos lėtinės uždegiminės ligos, gali sutrikdyti raudonųjų kraujo kūnelių gamybą, todėl inkstų nepakankamumas taip pat gali būti anemijos priežastis eritropoetinas, kuris skatina jūsų kaulų čiulpus gaminti raudonuosius kraujo kūnelius. Eritropoetino trūkumas, kuris gali atsirasti dėl inkstų nepakankamumo arba būti šalutinis chemoterapijos poveikis, gali sukelti raudonųjų kraujo kūnelių trūkumą.
  • Aplastinė anemija. Tai gyvybei pavojinga anemija, kurią sukelia sumažėjęs kaulų čiulpų gebėjimas gaminti visų trijų tipų kraujo kūnelius – raudonuosius kraujo kūnelius, baltuosius kraujo kūnelius ir trombocitus. Daugeliu atvejų aplazinės anemijos priežastis nežinoma, tačiau Manoma, kad tai dažnai yra autoimuninė liga. Kai kurie veiksniai, galintys sukelti tokio tipo anemiją, yra chemoterapija, spindulinė terapija, aplinkos toksinai, nėštumas ir vilkligė.
  • Įvairios ligos, tokios kaip leukemija ir mielodisplazija, būklė iki leukemijos, gali sukelti anemiją, paveikdamos kraujo gamybą kaulų čiulpuose. Šių vėžio tipų ir į vėžį panašių sutrikimų padariniai skiriasi nuo nežymaus kraujo gamybos pakitimo iki visiško gyvybei pavojingo kraujo gamybos proceso sustabdymo. Be to, anemiją gali sukelti kiti kraujo ar kaulų čiulpų vėžio tipai, tokie kaip daugybinė mieloma, mieloproliferaciniai sutrikimai ir limfoma.
  • Hemolizinės anemijos.Ši anemijų grupė išsivysto, kai raudonieji kraujo kūneliai sunaikinami greičiau, nei kaulų čiulpai gali juos pakeisti. Tam tikros kraujo ligos gali sukelti padidėjusį raudonųjų kraujo kūnelių sunaikinimą. Dėl autoimuninių sutrikimų jūsų organizmas gali gaminti antikūnus prieš raudonuosius kraujo kūnelius ir juos per anksti sunaikinti. Tam tikri vaistai, pavyzdžiui, kai kurie antibiotikai, vartojami infekcijoms gydyti, taip pat gali suardyti raudonuosius kraujo kūnelius. Hemolizinė anemija gali sukelti odos pageltimą (gelta) ir blužnies padidėjimą.
  • Pjautuvinė anemija.Šią paveldimą ir kartais sunkią anemiją, kuria dažniausiai serga afrikiečių ir arabų kilmės žmonės, sukelia sutrikusi hemoglobino forma, dėl kurios raudonieji kraujo kūneliai įgauna nenormalią pusmėnulio (pjautuvo) formą. Šie netaisyklingos formos raudonieji kraujo kūneliai miršta per anksti, todėl lėtinis raudonųjų kraujo kūnelių trūkumas. Pjautuvo formos raudonieji kraujo kūneliai taip pat gali blokuoti kraujo tekėjimą per mažas kūno kraujagysles ir sukelti kitus, dažnai skausmingus simptomus.
  • Kitos anemijos. Yra keletas kitų, retesnių anemijos formų, tokių kaip talasemija ir anemijos, kurias sukelia hemoglobino trūkumas.

Kartais neįmanoma nustatyti anemijos priežasties.

Rizikos veiksniai

Šie veiksniai padidina anemijos riziką:

  • Prasta mityba. Visiems – jauniems ar seniems – kurių maiste nuolat mažai geležies ir vitaminų, ypač folio rūgšties, gresia anemija. Jūsų organizmui reikia geležies, baltymų ir vitaminų, kad susidarytų pakankamas raudonųjų kraujo kūnelių kiekis.
  • Žarnyno sutrikimai.Žarnyno sutrikimas, turintis įtakos maistinių medžiagų įsisavinimui plonojoje žarnoje, pvz., Krono liga ir celiakija, rizikuoja susirgti mažakraujyste trūkumai ir anemija.
  • Menstruacijos. Apskritai, moterims yra didesnė geležies stokos anemijos rizika nei vyrams. Taip yra todėl, kad moterys kiekvieną mėnesį menstruacijų metu netenka kraujo, o kartu ir geležies.
  • Nėštumas. Nėščioms moterims yra didesnė geležies stokos anemijos rizika, nes jų geležies atsargos turi būti aprūpintos padidėjusiu motinos kraujo tūriu ir hemoglobino šaltiniu augančiam vaisiui.
  • Lėtinės būklės. Pavyzdžiui, jei sergate vėžiu, inkstų ar kepenų nepakankamumu ar kita lėtine liga, jums gali kilti vadinamosios lėtinės ligos anemijos rizika. Dėl šių būklių gali trūkti raudonųjų kraujo kūnelių. Lėtas, lėtinis kraujo netekimas dėl opos ar kito organizmo šaltinio gali išeikvoti jūsų organizmo geležies atsargas, o tai gali sukelti geležies stokos anemiją.
  • Šeimos istorija. Jei jūsų šeima sirgo paveldima anemija, jums taip pat gali padidėti šios būklės rizika.

Tam tikros infekcijos, kraujo ligos ir autoimuniniai sutrikimai, toksinių cheminių medžiagų poveikis ir kai kurių vaistų vartojimas gali paveikti raudonųjų kraujo kūnelių gamybą ir sukelti anemiją. Kiti žmonės, kuriems gresia anemija, yra žmonės, sergantys cukriniu diabetu, priklausomi nuo alkoholio (alkoholis trukdo pasisavinti folio rūgštį) ir žmonės, besilaikantys griežtos vegetariškos dietos, kurie gali negauna pakankamai geležies ar vitamino B-12. dieta.

Kada kreiptis medicininės pagalbos

Kreipkitės į gydytoją, jei jaučiatės pavargę dėl nepaaiškintų priežasčių, ypač jei gresia anemija. Kai kurios anemijos, tokios kaip geležies stokos anemija, yra dažnos. Tačiau nemanykite, kad jei esate pavargęs, turite būti anemiškas. Nuovargis turi daug priežasčių, be anemijos.

Kai kurie žmonės, eidami duoti kraujo, sužino, kad jų hemoglobino kiekis yra mažas, o tai rodo anemiją. Žemas hemoglobino kiekis gali būti laikina problema, kurią galima išspręsti valgant daugiau geležies turinčio maisto arba vartojant multivitaminų, kurių sudėtyje yra geležies. Tačiau tai taip pat gali būti įspėjamasis kraujo netekimo jūsų organizme ženklas, dėl kurio jums gali trūkti geležies. Jei jums sakoma, kad negalite duoti kraujo dėl žemo hemoglobino kiekio, paklauskite savo gydytojo, ar turėtumėte susirūpinti.

Jei jūsų šeimoje yra buvę paveldimos anemijos atvejų, pvz., pjautuvo pavidalo ląstelių anemija, pasitarkite su savo gydytoju ir galbūt genetikos konsultantu apie savo riziką ir apie tai, kokią riziką galite perduoti savo vaikams.

Tyrimai ir diagnostika

Gydytojai diagnozuoja anemiją, naudodami ligos istoriją, fizinį egzaminą ir kraujo tyrimus, įskaitant bendrą kraujo tyrimą (CBC). Šis kraujo tyrimas nustato raudonųjų kraujo kūnelių ir hemoglobino kiekį kraujyje. Dalis jūsų kraujo taip pat gali būti tiriama mikroskopu, siekiant ištirti raudonųjų kraujo kūnelių dydį, formą ir spalvą, o tai gali rodyti diagnozę. Pavyzdžiui, sergant geležies stokos anemija, raudonieji kraujo kūneliai yra mažesni ir blyškesnės spalvos nei įprastai. Esant vitaminų stokos anemijai, raudonieji kraujo kūneliai padidėja ir sumažėja.

Jei diagnozuojama anemija, gydytojas gali paskirti papildomus tyrimus, kad nustatytų pagrindinę priežastį. Pavyzdžiui, geležies stokos anemija gali atsirasti dėl lėtinio kraujavimo iš žinomų ar nežinomų opų, gerybinių polipų gaubtinėje žarnoje, gaubtinės žarnos vėžio, navikų ar inkstų nepakankamumo. Jūsų gydytojas gali ištirti šias ir kitas sąlygas, kurios gali būti anemijos priežastis.

Kartais gali prireikti ištirti jūsų kaulų čiulpų mėginį, kad būtų galima diagnozuoti anemiją.

Komplikacijos

Kai anemija yra pakankamai sunki, ji gali trukdyti jūsų gebėjimui atlikti kasdienes užduotis. Galbūt esate per daug išsekęs, kad galėtumėte dirbti ar žaisti. Nors anemija dažnai yra išgydoma, gali prireikti kelių savaičių ar mėnesių, kol raudonųjų kraujo kūnelių kiekis po gydymo normalizuosis. Paklauskite savo gydytojo, ko tikėtis iš gydymo.

Jei jums buvo diagnozuota anemija – ji dažnai nustatoma atliekant įprastinius kraujo tyrimus – paklauskite savo gydytojo, koks gydymas yra būtinas. Tada būtinai tęskite gydymą, net jei greitai pradėsite jaustis geriau. Nekontroliuojama anemija gali sukelti greitą ar nereguliarų širdies plakimą – aritmiją. Jūsų širdis turi pumpuoti daugiau kraujo, kad kompensuotų deguonies trūkumą kraujyje, kai sergate anemija. Tai netgi gali sukelti stazinį širdies nepakankamumą. Negydoma žalinga anemija gali pažeisti nervus ir susilpninti psichinę funkciją, nes vitaminas B-12 svarbus ne tik sveikiems raudoniesiems kraujo kūneliams, bet ir optimaliai nervų bei smegenų veiklai.

Kai kurios paveldimos anemijos, tokios kaip pjautuvinė anemija, gali būti rimtos ir sukelti gyvybei pavojingų komplikacijų. Greitai netekus daug kraujo, išsivysto ūmi, sunki anemija ir gali būti mirtina.

Gydymas ir vaistai

Anemijos gydymas priklauso nuo priežasties:

  • Geležies stokos anemija.Ši anemijos forma gydoma geležies preparatais, kuriuos gali tekti vartoti kelis mėnesius ar ilgiau. Jei pagrindinė geležies trūkumo priežastis yra kraujo netekimas, išskyrus menstruacijas, kraujavimo šaltinis turi būti nustatytas ir sustabdytas. Tai gali apimti operaciją.
  • Vitaminų stokos anemija.Žalinga anemija gydoma vitamino B-12 injekcijomis – dažnai visą gyvenimą trunkančiomis injekcijomis. Folio rūgšties stokos anemija gydoma folio rūgšties papildais.
  • Lėtinės ligos anemija. Specifinio šio tipo anemijos gydymo nėra. Gydytojai daugiausia dėmesio skiria pagrindinės ligos gydymui. Geležies papildai ir vitaminai paprastai nepadeda sergant tokio tipo anemija. Tačiau, jei simptomai tampa sunkūs, kraujo perpylimas arba sintetinio eritropoetino, hormono, kurį paprastai gamina inkstai, injekcijos gali padėti paskatinti raudonųjų kraujo kūnelių gamybą ir sumažinti nuovargį.
  • Aplastinė anemija.Šios sunkios anemijos gydymas gali apimti kraujo perpylimą, siekiant padidinti raudonųjų kraujo kūnelių kiekį. Jums gali prireikti kaulų čiulpų transplantacijos, jei jūsų kaulų čiulpai serga ir negali gaminti sveikų kraujo kūnelių. Jums gali prireikti imuninę sistemą slopinančių vaistų, kad susilpnėtų imuninės sistemos reakcija ir persodintiems kaulų čiulpams būtų suteikta galimybė vėl pradėti veikti.
  • Anemija, susijusi su kaulų čiulpų liga.Šių įvairių ligų gydymas gali būti nuo paprastų vaistų iki chemoterapijos iki kaulų čiulpų transplantacijos. Šių tipų anemijos gydymas paprastai apima kraujo specialisto (hematologo) konsultaciją.
  • Hemolizinės anemijos. Hemolizinės anemijos valdymas apima įtartinų vaistų vengimą, susijusių infekcijų gydymą ir vaistų, kurie slopina imuninę sistemą, kuri gali atakuoti raudonuosius kraujo kūnelius, vartojimą. Trumpi gydymo steroidais arba gama globulinu kursai gali padėti slopinti imuninės sistemos ataką prieš raudonuosius kraujo kūnelius. Jei dėl šios būklės padidėjo blužnis, gali tekti pašalinti blužnį. Blužnis – mažas organas, esantis žemiau jūsų šonkaulių narvas kairėje – išfiltruoja ir išsaugo pažeistus raudonuosius kraujo kūnelius. Dėl tam tikrų hemolizinių anemijų blužnis gali padidėti ir pažeisti raudonieji kraujo kūneliai.
  • Pjautuvinė anemija.Šios nepagydomos anemijos gydymas gali apimti deguonies, skausmą malšinančių vaistų ir geriamųjų bei intraveninių skysčių skyrimą, siekiant sumažinti skausmą ir išvengti komplikacijų. Gydytojai taip pat dažnai naudoja kraujo perpylimus, folio rūgšties papildus ir antibiotikus. Kai kuriais atvejais kaulų čiulpų transplantacija gali būti veiksmingas gydymas. Vaistas nuo vėžio, vadinamas hidroksikarbamidu (Droxia, Hydrea), taip pat vartojamas suaugusiųjų pjautuvinei anemijai gydyti.

Prevencija

Daugelio rūšių anemijos išvengti nepavyks. Tačiau jūs galite padėti išvengti geležies stokos anemijos ir vitaminų stokos anemijos valgydami sveiką, įvairią mitybą, kurioje gausu geležies, folio rūgšties ir vitamino B-12.

Geriausi geležies šaltiniai yra jautiena ir kita mėsa. Kiti maisto produktai, kuriuose gausu geležies, yra pupelės, lęšiai, geležimi praturtinti javai, tamsiai žalios lapinės daržovės, džiovinti vaisiai, riešutai ir sėklos. Folio rūgšties ir jo sintetinės formos folio rūgšties galima rasti citrusinių vaisių sultyse ir vaisiuose, tamsiai žaliose lapinėse daržovėse, ankštinėse daržovėse ir spirituotuose pusryčių dribsniuose. Vitamino B-12 gausu mėsos ir pieno produktuose. Maisto produktai, kurių sudėtyje yra vitamino C, pavyzdžiui, citrusiniai vaisiai, padeda geriau pasisavinti geležį.

Valgyti daug geležies turinčių maisto produktų ypač svarbu žmonėms, kuriems geležies poreikis yra didelis, pavyzdžiui, vaikams (geležis reikalinga augimo spurto metu), nėščioms ir menstruacinėms moterims. Pakankamas geležies suvartojimas taip pat labai svarbus kūdikiams, griežtiems vegetarams ir ilgų nuotolių bėgikams.

Žmonėms, kuriems reikalingas didelis geležies poreikis, gydytojai gali skirti geležies papildų arba multivitaminų, kurių sudėtyje yra geležies. Tačiau geležies papildai yra tinkami tik tada, kai jums reikia daugiau geležies, nei gali suteikti subalansuota mityba. Nemanykite, kad jei esate pavargęs, jums tiesiog reikia vartoti geležies papildus. Perkrauti organizmą geležimi gali būti pavojinga.

Rengiant šį puslapį buvo panaudota informacija iš Mayoclinic

Anemijos srities modelis

Jei jūsų domeno objektai yra duomenų konteineriai, o jie turi tik gauti/nustatyti ypatybes, tuomet naudojate aneminį domeno modelį. Jo ypatumas yra tas, kad domeno objektas nesielgia.

Užduotis

Naudokite scenarijus, pavyzdžiui, internetinei parduotuvei:

  1. Sistemoje užsiregistravęs vartotojas gauna el. laišką su nuoroda patvirtinti registraciją. Paspaudęs nuorodą, jis patvirtina savo registraciją ir gali prisijungti prie sistemos naudodamas savo vartotojo vardą ir slaptažodį.
  2. Vartotojas gali pateikti užsakymus
  3. Tuo pačiu savo asmeninėje paskyroje mato bendrą sumą, už kurią užsisakė. Į bendrą dabartinių užsakymų sumą neįskaičiuojami jau įvykdyti užsakymai

Pradėkime nuo anemijos duomenų modelio. Turėsime paskyros klasę:

Public class Account ( public int Id ( get; set; ) public bool IsApproved ( get; set; ) public DateTime? ActivationDate ( get; set; ) public List Užsakymai (gauti; nustatyti;))

Ir ordino klasė:

Public class Order ( public int Id ( get; set; ) public int Price ( get; set; ) public Account Account ( get; set; ) public bool IsComplete ( get; set; ) )

Įgyvendinimas

Kiekvienas darbo scenarijus yra gana paprastas įgyvendinti:

1 scenarijus. Vartotojo aktyvinimas

Account.ActivationDate = DateTime.Now; account.IsApproved = tiesa;

2 scenarijus. Užsakymo pridėjimas

Sąskaita.Užsakymai.Pridėti(užsakymas); order.Sąskaita = sąskaita;

3 scenarijus. Skaičiuojant bendrą sumą

Sąskaita.Užsakymai .Kur(užsakymas => užsakymas.IsComplete == false) .Suma(užsakymas => užsakymas.Kaina);

Pagrindinis klausimas: kur bus šis kodas?

Sprendimas #0

Yra paprasčiausias ir neteisingas sprendimas. Šį kodą parašysime tiesiai į tvarkykles aspx puslapiuose arba WinForms:

Viešoji dalinė klasė Numatytasis: Puslapis ( Protected void Page_Load(objekto siuntėjas, EventArgs e) ( // pasirenkant paskyros objektą AccountOrdersSumLabel.Text = account.Orders .Where(order => order.IsComplete == false) .Sum(order => order .Price); ) protected void AddOrderButton_Click(objekto siuntėjas, EventArgs e) ( // pasirenkant paskyros objektą account.Orders.Add(order); order.Account = account; // išsaugomas paskyros objektas ) )

Viskas bus gerai, kol prekę galėsite pridėti tik iš šios formos, o bendra suma skaičiuojama tik pagal šią formulę. Problemos prasidės, kai kitai formai reikės tų pačių funkcijų. Turėsite kopijuoti kodą. Tada, jei pasikeis veikimo logika, turėsite ją ištaisyti visuose koduose.

Kvaila kopijuoti kodą ir tada praleisti daug laiko taisant vieną pasikeitusį verslo reikalavimą.

1 sprendimas

Vis dėlto mes nedubliuosime. Scenarijų diegimo kodą įdėsime į klasę skambiu pavadinimu AccountHelper arba AccountManager. Greičiausiai ši klasė bus be pilietybės ir todėl statiška.

Mes gauname:

Public static class AccountHelper ( public static void Activate(Account account) ( account.ActivationDate = DateTime.Now; account.IsApproved = true; ) public static void AddOrder(Account account, Order order) ( account.Orders.Add(order); užsakymas.Sąskaita = sąskaita

Klasių, vadinamų *Helper arba *Manager, problema yra ta, kad jie gali daryti ką nori. Jų abstraktūs pavadinimai leidžia paskyros klasei „padėti“ atlikti visiškai skirtingus dalykus. Tokios klasės tampa .

Tokios klasės turi daug trūkumų. Pavyzdžiui, sunku išbandyti kodą, kuris naudoja šias klases, nes jos yra statinės. Jie daro kodą labai susietą, nes... pažeisti . Labai dažnai vienas Pagalbininkas kviečia kitus Pagalbininkus. Dėl to priklausomybės grafikas primena ryšių tinklą.

Be to, šis sprendimas turi visus kito trūkumus.

2 sprendimas

Viešoji sąsaja IAccountService ( void Activate (Account account); negalioja AddOrder (sąskaitos sąskaita, užsakymo užsakymas); int CalculateOrdersSum (Account account); ) viešoji klasė AccountService: IAccountService ( vieša galia Aktyvuoti (Paskyros paskyra) ( account.ActivationDate = DateTime.Now ; account.Isproved = true užsakymas => užsakymas.Užbaigtas == klaidingas) .Suma(užsakymas => užsakymas.Kaina) )

Mes išsiaiškinome ryšį ir testavimą. Jau žingsnis į priekį. Bet matau dar dvi problemas.

Bus gana daug funkcijų, tokių kaip AddOrder ir CalculateOrdersSum. Po pusės metų kūrimo IAccountService sąsaja išaugs iki 40-50 funkcijų. Sąsajos „užteršimas“ galėjo būti išgyventas, jei ne antroji problema.

Galite įrašyti „savo aktyvavimą“ bet kurioje kodo vietoje, apeinant paslaugą. Pavyzdžiui, paimkite paskyros objektą iš duomenų bazės, nustatykite jo lauką IsApproved kaip true ir tuo pačiu pamirškite atnaujinti lauką ActivationDate. Tas pats pasakytina ir apie užsakymo pridėjimo scenarijų. Galite bet kur iškviesti funkciją Pridėti užsakymų ypatybėje ir pamiršti nustatyti pridėto užsakymo lauką Paskyra. Dėl to sistema tampa nestabili. Programos API neapsaugota nuo sistemos vartotojų. Taikant šį metodą, belieka tikėtis, kad programuotojas „IAccountService“ suras jam reikalingą funkciją ir nesugalvos savo požiūrio.

3 sprendimas

Įdėkime visas šias funkcijas į patį paskyros domeno objektą. Atkreipkite dėmesį, kaip pasikeitė objektų laukų prieigos modifikatoriai:

Viešosios klasės paskyra (privatus, tik skaitomas sąrašas užsakymai; public Account() ( orders = new List ();

Dabar mūsų programos domenas suteikia vartotojui paruoštą API, kuriai nereikia pagalbininkų ar paslaugų funkcija pati užpildys reikiamus laukus.

Išvada

Taigi, jei funkcija veikia su duomenimis ir objektais, esančiais domeno viduje, greičiausiai ši funkcija turėtų būti palikta domeno viduje. Be kodo patikimumo, savo programai taip pat sukursite konkrečiam domenui skirtą kalbą.

Martinas Fowleris savo klasikiniame darbe „Įmonių taikymo modeliai“ ( Įmonės taikomųjų programų architektūros modeliai) buvo nustatyti keli verslo logikos organizavimo būdai.

  1. Sandorio scenarijus- verslo logika suskirstyta į procedūras, kurių kiekviena atitinka konkrečią užklausą, gaunamą iš pateikimo lygmens.
  2. Stalo modulis- verslo logika, kaip ir ankstesnėje versijoje, aprašyta procedūriniu stiliumi, tačiau manipuliacijos su kiekviena lentele patalpintos į atskirą klasę, todėl kodas yra struktūriškesnis.
  3. Domeno modelis- sunkiausiai įgyvendinamas metodas, tačiau jis turi daug privalumų apibūdinant sudėtingą logiką. Esmė ta, kad skiriami objektai, atitinkantys dalykinės srities objektus. Santykiai tarp šių objektų aprašomi, atitinkantys santykius tarp objektų realiame pasaulyje. Tuo pačiu metu technologinių problemų, tokių kaip saugykla, saugumas ir operacijų valdymas, sprendimas paprastai perkeliamas už verslo logikos sluoksnio.

    Yra dvi šio metodo parinktys:

    • Turtingas domeno modelis- duomenys ir elgsena yra įterpti į domeno objektus.
    • Anemijos srities modelis- į domeno objektus įtraukiami tik duomenys, o elgsena perduodama paslaugų sluoksniui, esančiam domeno sluoksnio viršuje.
Jei pasirinkimas, kurį šabloną – operacijos scenarijų, lentelės modulį ar domeno modelį – naudoti, paprastai nesukelia problemų, nes aiškiai aprašyti jų pritaikomumo kriterijai, tuomet atsakymas į klausimą, ar naudoti anemijos srities modelį ar ne, nėra toks akivaizdus. Viena vertus, objektinio požiūrio teoretikai mano, kad šis modelis yra „anti-modelis“, kita vertus, jis įgijo tam tikrą populiarumą verslo programų kūrimo praktikoje, o tai rodo tam tikrų pranašumų buvimą. Pabandykime suprasti šią problemą.

Domeno modelio šablonas

Prieš aptariant vieno ar kito varianto privalumus ir trūkumus, būtina pažvelgti į šabloną kaip į visumą. Kaip minėta aukščiau, šio modelio esmė yra ta, kad sukuriamas sujungtų objektų tinklas, kurių kiekvienas yra vieno objekto modelis realiame pasaulyje. Kartu šis sprendimas turi nemažai privalumų, supaprastinančių kompleksinės logikos įgyvendinimą: visi OOP paradigmos principai, tokie kaip inkapsuliavimas, paveldėjimas ir polimorfizmas, yra prieinami programuotojui. Tuo pačiu metu klasių struktūra atspindi realaus pasaulio struktūrą, o tai supaprastina sąveiką pagal „programuotojo-analitiko“ liniją. Komandos žmonės gali bendrauti ta pačia kalba. Norėdami įgyvendinti modelį, galite naudoti pažįstamus dizaino modelius. Šis modelis taip pat leidžia įgyvendinti sąveiką su verslo logikos sluoksniui skaidria duomenų saugykla – dalykinę sritį modeliuojantys objektai nieko nežino apie tai, kad jie iš tikrųjų yra saugomi, pavyzdžiui, duomenų bazėje.

Svarbus pranašumas yra ir tai, kad domeno modelis leidžia pakartotinai panaudoti programos verslo logiką. Skirtingai nuo operacijų scenarijaus ir lentelės modulio modelių, verslo logika nėra susieta su užklausomis iš pristatymo sluoksnio. Atitinkamai, virš jo gali būti dedamos kitos pristatymo sluoksnio parinktys ATSILINGAI arba MUILAS- paslaugos.

Deja, bet koks orumas turi savo kainą. Šiuo atveju mokestis yra toks. Pirma, didėja reikalavimai kūrėjų, projektuojančių, diegiančių ir prižiūrinčių domeno modelį, kvalifikacijai: reikia mokėti kurti sudėtingesnes abstrakcijas nei naudojant kitus sprendimus. Antra, didėja reikalavimai naudojamoms technologijoms. Visų pirma, jums reikia turėti gana galingą duomenų prieigos sluoksnį, kuris įgyvendintų objektų santykinį atvaizdavimą. Norint įgyvendinti domeno modelio modelį, paprastai reikia naudoti galingą ORM- karkasas, pvz Užmigti, TopLink, EclipseLink arba OpenJPA, kuri, viena vertus, reikalauja aukštesnės kvalifikacijos kūrėjų, kita vertus, sumažina kuriamos sistemos našumą ir padidina jos trapumą: bet koks neatsargus veiksmas, pavyzdžiui, vienos eilutės pakeitimas objekto aprašyme- santykinis žemėlapis gali .

Sočiųjų ir aneminių modelių anatomija

Kuo anatomiškai skiriasi du domeno modelio kūrimo būdai: prisotintas ir aneminis? Turint turtingą požiūrį, verslo logiką, t.y. sistemos elgesys įgyvendinamas domeno objektuose. Šis metodas neatmeta galimybės perkelti dalį elgesio į naudingumo klases, pvz * Aptarnavimas, * Vadovas, *Pagalbininkas, tačiau tai pateisinama tik tada, kai logika paveikia kelis domeno objektus ir neaišku, su kuriuo iš jų ji susijusi. Pavyzdys yra ši nedidelė Telecom domeno modelio dalis. Vartotojas turi suaktyvinti paslaugą. Paslauga pridedama kaip užsakymo dalis. Tokiu atveju būtina patikrinti, ar yra teikėjo organizacija, galinti teikti paslaugą su nurodytu parametrų rinkiniu. Turtingo domeno modelio atveju paslaugos pridėjimo logika yra įtraukta į metodą addNewService (paslaugų paslauga) klasė Paslaugų užsakymas:

privatus Sąrašas < Service>paslaugos;

private void addService (paslaugų paslauga) (

if (paslaugos == null )

Paslaugos = naujas „ArrayList“.< Service> () ;

Services.add(service);

public void addNewService (paslaugos paslauga) išmeta NotFoundValidProviderException (

ServiceProviderRepository providerRepo = ...;

if (providerRepo.hasAvailableProvider(service.getProp1(), service.getProp2(), ...)) (

AddService(service) ;

kitaip (

mesti naują NotFoundValidProviderException(service) ;


Anemijos srities modelis veikia kitaip. Domeno objektų klasės neveikia. Jie turi tik konstruktorius ir duomenų prieigos metodus. Vienintelis dalykas, kurį jie įgyvendina, yra santykiai su kitais objektais. Visa sistemos elgsena perkeliama į paslaugų sluoksnį, įdiegtą ant domeno modelio sluoksnio. Parodykime šį metodą naudodami tą patį pavyzdį, bet dabar klasėje Paslaugų užsakymas turės tik metodus, kurie pasiekia duomenis. Bus nustatyta, ar yra tinkamas paslaugų teikėjas, ir jis pridedamas prie užsakymo ServiceOrderManager(sutikite ServiceOrderService skamba šiek tiek keistai):

viešosios klasės ServiceOrder(

privatus Sąrašas < Service>paslaugos;

viešas Sąrašas < Service>getServices() (

grąžinimo paslaugos;

public void setServices( Sąrašas < Service>paslaugos) (

tai .paslaugos = paslaugos;


grąžinimo teikėjasRepo;

if (order.getServices() == null)

Order.setServices(new ArrayList< Services> () ) ;

Order.getServices().add(service);

kitaip (

Aneminio domeno modelio kritika

Yra du pagrindiniai aspektai, dėl kurių negalima naudoti aneminio domeno modelio kūrimo bendruomenėje:
  • Naudodami anemijos srities modelį, mes nukrypstame nuo OOP principų. Šios kritikos esmė susiveda į tai, kad nuo Domeno objektai aneminio domeno modelio atveju nepasižymi elgesiu, tada mes prieštaraujame pagrindinei OOP idėjai – turėti duomenis ir metodus jiems apdoroti vienoje vietoje.
  • Kai domeno modelis išsigimsta į anemišką, prarandami visi šio modelio pranašumai, o trūkumai išlieka. Visų pirma, norint naudoti šį šabloną, vis dar reikalingas gana galingas duomenų prieigos sluoksnis, įgyvendintas, pavyzdžiui, naudojant sudėtingą ORM- karkasai.
Pažvelkime į šiuos svarstymus išsamiau. Anemijos srities modelis prieštarauja OOP principams. Tam tikra prasme šis svarstymas yra teisingas, nes Domeno objektai neturi elgsenos. Tačiau prieiga prie objektų vidinės būsenos gali būti paslėpta už to objekto metodų. Parodykime šią idėją naudodami pavyzdį, kaip pridėti paslaugą prie užsakymo: į klasę Paslaugų užsakymas pridedamas metodas addService(), o metodas setServices() padaryti jį privačiu:

viešosios klasės ServiceOrder(

privatus Sąrašas < Service>paslaugos;

viešas Sąrašas < Service>getServices() (

grąžinimo paslaugos;

private void setServices( Sąrašas < Service>paslaugos) (

tai .paslaugos = paslaugos;

public void addService (paslaugų paslauga) (

if (paslaugos == null )

Paslaugos = naujas „ArrayList“.< Service> () ;

Services.add(service);


Klasė ServiceOrderManagerImpl patikrins galimybę pridėti užsakymą ir iškvies metodą addService() klasė Paslaugų užsakymas:

viešoji klasė ServiceOrderManagerImpl įdiegia ServiceOrderManager (

privatus ServiceProviderRepository providerRepo;

viešųjų paslaugų teikėjo saugykla getProviderRepo() (

grąžinimo teikėjasRepo;

public void setProviderRepo(ServiceProviderRepository providerRepo) (

tai .providerRepo = providerRepo;

public void addNewService (Paslaugos užsakymas, Paslaugos paslauga) meta ProviderNotFoundException (

if (providerRepo.hasAvailableProvider(service.getParam1(), service.getParam2(), ...)) (

Order.addService(service);

kitaip (

mesti naują ProviderNotFoundException(service) ;


Problema ta, kad norint atskleisti elgesį kitoms klasėms, tokie metodai turi būti vieši. Tai žymiai pablogina kapsuliavimą. Bet kuris neatsargus kūrėjas galės pasiekti objekto nuosavybę apeidamas atitinkamos paslaugos metodus, pavyzdžiui, pridėdamas paslaugą prie užsakymo nepatikrinęs teikėjo prieinamumo.

Sprendimas galėtų būti visos verslo logikos apibendrinimas, pavyzdžiui, naudojant šabloną POJO- fasadas. Tokiu atveju būtina užtikrinti arba už verslo logikos sluoksnio ribų perkeliamų objektų nekintamumą, arba bent jau jų atsiejimą nuo duomenų saugojimo sluoksnio, kas neleis išsaugoti tokių objektų pakeitimų apeinant verslo logikos sluoksnį.

Kiti OOP principai, tokie kaip paveldėjimas ir polimorfizmas, išlieka prieinami naudojant anemijos srities modelį. Moderniausia ORM-frameworks leidžia priskirti klasės hierarchiją į duomenų bazę. Pavyzdžiui, kurdami finansinio taikymo modelį, turėtumėte apsvarstyti skirtingas overdrafto limito apskaičiavimo strategijas. Tarkime, yra dvi strategijos: be overdrafto ir overdrafto su ribotu limitu. Sukurkime šią klasių hierarchiją:




Šiuo atveju klasės objektas sąskaita- sąskaita - bus nuoroda į konkretų šiai sąskaitai taikomos overdrafto skaičiavimo strategijos įgyvendinimą:

viešosios klasės sąskaita (

privatus OverdraftLimitStrategy overdraftLimitStrategy;

vieša OverdraftLimitStrategy getOverdraftLimitStrategy() (

grąžinti overdraftLimitStrategy;


Kai kuriose Paskyros paslauga dabar galime naudoti polimorfinį overdrafto skaičiavimo strategijos įgyvendinimą:

viešoji klasė AccountService(

viešas anuliuotas išėmimas (sąskaitos sąskaita, dviguba suma) (

if (account.getAmount() + account.getOverdraftLimitStrategy().getLimit() > = suma) (

Account.setAmount(account.getAmount() - suma);


Prarandami visi domeno modelio modelio teikiami pranašumai. Kaip aptarėme aukščiau, pranašumai, kuriuos suteikia sistemos modeliavimas OOP stiliumi naudojant aneminį domeno modelį, vis dar yra prieinami. Gali būti, kad šiuos pranašumus galima gauti tik kompetentingai plėtojant sistemos architektūrą, ypač sąsajas tarp sluoksnių, tačiau tai yra tinkama kaina už paprastesnį modelį. Taip pat neprarandama objektų galimybė skaidriai saugoti ilgalaikėje atmintyje. Kaip ir anksčiau, objektas buvo išsaugotas atitinkama komanda saugykloje ( Saugykla) arba darbo zona ( Darbo vienetas), ir toliau saugomas. Objekto vidinės būsenos pakeitimų sinchronizavimas su duomenų saugykla nepriklauso nuo to, kaip tiksliai šis pakeitimas atliekamas – objekto klasėje esančiu metodu ar aptarnavimo metodu.

Anemic Domain Model modelio populiarumo priežastys

Dabar pabandykime rasti atsakymą į klausimą, kodėl Anemic Domain Model modelis yra toks populiarus. Mano nuomone, pagrindinė priežastis yra ta, kad šį modelį lengviau įgyvendinti naudojant šiuolaikines technologijas, palyginti su turtingu modeliu. Šiandien labiausiai paplitęs būdas struktūrizuoti šaltinio kodą yra priklausomybės įpurškimo modelis. Tuo pačiu metu programoje aiškiai matomi du objektų šaltiniai:
  • IoC- konteineris, įgyvendinantis Priklausomybės įpurškimo modelį ir statantis paslaugų objektus: saugyklas, paslaugas, fasadus;
  • ORM- karkasas, kuris kuria domeno objektus.
Diegiant turtingo domeno modelio modelį, iškyla šiais dviem būdais sukonstruotų objektų susiejimo į vieną grafiką problema. Jei grįšime prie anksčiau aprašyto turtingo domeno modelio pavyzdžio, pamatysime, kad klasės objektas Paslaugų užsakymas reikia kažkaip perduoti klasės objektą, kuris įgyvendina sąsają ServiceProviderRepository. Ne visi ORM- karkasai leidžia įterpti trečiųjų šalių priklausomybes į objektus jų statybos metu, įgyvendinant IoC- konteineris. Turime naudoti metodus, kurie turi daug trūkumų.
  • Įpurškimas naudojant statinius kintamuosius ir metodus. Saugyklos ir kt IoC-objektai perduodami kaip pavieniai. Šio metodo trūkumai: sunkiau pakeisti objektą, pavyzdžiui, bandymo metu pakeičiant jį stuburu. Šis metodas taip pat įveda paslėptas priklausomybes.
  • Priklausomybių perdavimas naudojant metodą (nepainioti su injekcija per seterį). Jei į domeno objektą įtrauksime metodą, turintį verslo logiką, tai visi jam reikalingi objektai turi būti perduoti šiam metodui: saugyklos, gamyklos, ryšiai ir kt. Šio požiūrio trūkumai: verslo logikos metodų parašas tampa sudėtingesnis, išryškėja visos priklausomybės, kai metodo logika tampa sudėtingesnė, gali prireikti naujų priklausomybių, dėl kurių pasikeis metodo parašas ir reikės ir taiso metodo iškvietimą, kad ir kur jis būtų naudojamas, ir kažkaip perduoda naujas priklausomybes iškvietimo taškams.
  • Naudokite Service Locator šabloną ir kažkaip perduokite šio šablono įgyvendinimą domeno objekto metodui. Šio metodo trūkumai yra visi Service Locator šablono trūkumai.
  • Vietoj priklausomybių perduokite metodui jų darbo rezultatą. Tačiau šis metodas pašalina logiką iš domeno objekto ir iš esmės yra pirmasis žingsnis link aneminio modelio.

Aneminio domeno modelio modelio pranašumai

Be savo populiarumo dėl esamos infrastruktūros, Anemic Domain Model modelis turi keletą savų pranašumų. Pažvelkime į juos atidžiau.
  1. Lengvas projektavimas ir tobulinimas. Paprastai anemijos srities modeliui sukurti reikia mažiau pastangų ir įgūdžių. Kadangi domeno objektai neturi elgsenos, kuri yra įtraukta į paslaugas, klausimas, į kurį domeno objektą įdėti tą ar kitą metodą, pašalinamas. Žinoma, vietoj to kyla klausimų, į kurią paslaugą ją įdėti, ar kurti naują paslaugą, ar ne, tačiau šiuos klausimus išspręsti lengviau.
  2. Lengvas generavimas, pagrįstas duomenų saugykla: duomenų bazė, WSDL-paslaugos aprašymas, objekto santykio susiejimo konfigūracijos failas ir kt. Šis pranašumas ypač ryškus, kai kuriame sąsają su sena sistema, kuri neįdiegta OOP kalba arba atskleidžia sąsają nuotolinio procedūrų iškvietimo stiliumi. Šiuolaikinėms informacinėms sistemoms orientuojantis į į paslaugas orientuotos architektūros naudojimą, ši požiūrio savybė atlieka vis svarbesnį vaidmenį. Tai, beje, išskiria dabartinę padėtį nuo to laiko, kai buvo parašytas Fowlerio kritinis straipsnis, juk praėjo beveik 10 metų. Man, kaip esamos įmonės paslaugos kliento kūrėjui, man daug lengviau sugeneruoti duomenų modelį pagal jo – paslaugų – sutartį (pvz., pagal WSDL-description) ir sukurti vadovų klasių sluoksnį per šį modelį, o ne sukurti turtingą domeno modelį ir įdiegti jo integravimą su nuotoline paslauga.
  3. Lengva pakartotinai naudoti. Jei turime programą, sukurtą pagal Anemic Domain Model šabloną ir turime įdiegti programą, kuri veiktų su tais pačiais duomenimis, bet įgyvendintų skirtingą verslo logiką, galime pakartotinai panaudoti esamo modelio klases. Prisotinto domeno modelio atveju toks pakartotinis naudojimas bus sunkus, nes verslo logika yra sujungta į klases, kurios įgyvendina domeno modelį. Šiuo požiūriu per didelis įkapsuliavimas yra labiau žalingas nei naudingas.

Išvada

Apibendrinant verta pasakyti, kad paskutinis dalykas tiek vedant diskusiją, tiek priimant sprendimą yra aklas sekimas tam tikrų autoritetų nuomone. Visada verta prisiminti, kad moksle yra toks dalykas kaip nuomonių pliuralizmas. Yra įvairių mokslinių mokyklų, kurios laikosi tam tikrų požiūrių. Konkurencija tarp tokių mokyklų yra gana natūrali. Bet kokius šio ar kito „guru“ žodžius gali sukelti oportunistinis komponentas. Nereikia kurti sau stabų, kad vėliau nereikėtų jais nusivilti. Visada turėtumėte galvoti patys ir pasirinkti sprendimą pagal savo patirtį ir prioritetus, visų pirma savo projekto prioritetus.

Paskutinis atnaujinimas: 2016-07-19

Vienas iš pagrindinių MVC modelio komponentų yra modeliai. Pagrindinė modelių užduotis yra aprašyti naudojamų duomenų struktūrą ir logiką.

Paprastai visi naudojami objektai programoje yra suskirstyti į atskirus modelius, kuriuose aprašoma kiekvieno objekto struktūra. Priklausomai nuo užduočių ir dalykinės srities, programoje galime pasirinkti skirtingą modelių skaičių.

Visi modeliai sukurti kaip įprastos POCO klasės (paprasti seni CRL objektai), tai yra įprastos klasės C# kalba. Pavyzdžiui, jei dirbame su internetinės mobiliųjų telefonų parduotuvės programėle, projekte galėtume apibrėžti tokį modelį, kuris pavaizduotų telefoną:

Public class Telefonas ( public int Id ( get; set; ) public string Name ( get; set; ) public string Company ( get; set; ) public int Price ( get; set; ) )

Telefono modelis apibrėžia daugybę savybių: unikalų identifikatorių, pavadinimą, gamintoją ir kainą. Tai klasika aneminis modelis. Aneminis modelis neturi elgesio ir išsaugo tik būseną kaip savybes.

Tačiau modelis neturi būti sudarytas tik iš savybių. Be to, jis gali turėti konstruktorių, kai kuriuos metodus, laukus ir paprastai atstovauti standartinei C# klasei. Modeliai, kurie taip pat lemia elgesį, priešingai nei aneminiai modeliai, vadinami „storaisiais“ modeliais (Rich Domain Model / Fat Model / Thick Model). Pavyzdžiui, mes galime nutolti nuo aneminio modelio modifikuodami jį taip:

Viešoji klasė Telefonas ( privatus dešimtainis _nuolaida = 0; viešasis telefonas (dešimtainė nuolaida) ( tai._nuolaida = nuolaida; ) public int Id ( get; set; ) public string Name ( get; set; ) public string Įmonė ( gauti; nustatyti; ) vieša dešimtainė kaina ( gauti; nustatyti; ) vieša dešimtainė GautiKaina su nuolaida() ( grąžinti šią.Kaina - (ši.Kaina * ši._nuolaida); ) )

Bet nesvarbu, koks esybės apibūdinimo metodas pasirinktas, svarbiausia neperkrauti modelio klasės ir atsiminti, kad jos tikslas visų pirma yra apibūdinti duomenis. Ir modelis turėtų apibūdinti tik vieną subjektą, vadovaujantis vienos atsakomybės principu.

ASP.NET MVC Core programoje modelius galima suskirstyti į kelias grupes pagal taikymo laipsnį:

    Modeliai, kurių objektai saugomi specialiose duomenų saugyklose (pavyzdžiui, duomenų bazėse, xml failuose ir kt.)

    Modeliai, naudojami duomenims perduoti į rodinį arba atvirkščiai gauti duomenis iš rodinio. Tokie modeliai taip pat vadinami pristatymo modeliai

    Pagalbiniai modeliai tarpiniams skaičiavimams

Paprastai projekte sukuriamas atskiras aplankas Models modeliams saugoti. Vaizdo modeliai dažnai dedami į atskirą aplanką, dažnai vadinamą ViewModels.

ASP.NET MVC Core projekte su integruotu autentifikavimu pagal numatytuosius nustatymus jau yra šie aplankai ir juose yra visi reikalingi modeliai. Tačiau jei kuriame projektą be integruoto autentifikavimo, šių aplankų trūksta. Ir atitinkamai šiuos aplankus turime pridėti rankiniu būdu. Bet dar kartą pabrėšiu, kad mes neturime modelių saugojimo aplankų pavadinti tiksliai Models ir ViewModels. Tai gali būti katalogai su bet kokiais pavadinimais, modelius galite įdėti į projekto šaknį, tačiau labiau paplitęs stilius yra pavadinimai Models ir ViewModels.

Pavyzdžiui, sukurkime naują ASP.NET Core projektą, kurio tipas yra žiniatinklio programa, ir pavadinkime jį ModelsApp. Pirmiausia prie projekto pridėkime aplanką Models, kuriame bus saugomi modeliai.

Į ją įtrauksime naują Įmonės klasę:

Viešoji klasė Įmonė ( public int Id ( get; set; ) public string Name ( get; set; ) public string Country ( get; set; ) )

Taip pat pridėkite telefono klasę į aplanką Models

Public class Telefonas ( public int Id ( get; set; ) public string Name ( get; set; ) public Company Gamintojas ( get; set; ) public decimal Price ( get; set; ) )

Šie modeliai aprašys duomenis, kuriuos naudosime. Šie duomenys gali būti saugomi duomenų bazėje, tačiau paprastumo dėlei juos apibrėžsime valdiklyje. Pakeiskime HomeController taip:

Naudojant System.Collections.Generic; naudojant System.Linq; naudojant Microsoft.AspNetCore.Mvc; naudojant ModelsApp.Models; // modelio vardų erdvės vardų sritis ModelsApp.Controllers ( viešoji klasė HomeController: Valdiklis ( Sąrašas įmonės; Telefonai; public HomeController() ( Įmonės "Apple" = nauja įmonė (Id = 1, pavadinimas = "Apple", šalis = "JAV"); Įmonė microsoft = nauja įmonė (Id = 2, pavadinimas = "Microsoft", šalis = "JAV") Įmonė google = nauja įmonė (Id = 3, pavadinimas = "Google", šalis = "JAV"); (apple, microsoft, google);

telefonai = naujas sąrašas

( naujas Telefonas ( Id=1, Gamintojas= apple, Pavadinimas = "iPhone 6S", Kaina = 56000 ), naujas Telefonas ( Id = 2, Gamintojas = apple, Name = "iPhone 5S", Kaina = 41000 ), naujas Telefonas ( Id=3, Gamintojas= microsoft, Name = "Lumia 550", Kaina = 9000 ), naujas Telefonas ( Id = 4, Gamintojas = microsoft, Name = " Lumia 950 ", Kaina = 40 000 ), naujas Telefonas ( Id = 5, Gamintojas= google, Name="Nexus 5X", Kaina=30000 ), naujas Telefonas ( Id=6, Gamintojas= google, Name="Nexus 6P", Kaina=50000 ) ); ) viešas IActionResult Index() ( grąžinti peržiūrą (telefonai); ) ) ) Modelio objekto sąrašas perduodamas rodiniui naudojant View() metodą.

Ir pabaigoje keičiame vaizdą Index.cshtml

, kuris išves visus objektus: }
@using ModelsApp.Models @model IEnumerable@( ViewData["Pavadinimas"] = "Pagrindinis puslapis"; )@foreach (Telefono p modelyje) (

@p.Vardas

@p.Gamintojas?.Vardas

@p.Kaina

Medicinoje yra keletas šio klinikinio ir hematologinio sindromo tipų, kurie gali būti įgimti arba įgyti. Moksliškai įrodyta, kad jaunos moterys jautriai reaguoja į raudonųjų kraujo kūnelių trūkumą, nes menstruacinio ciklo metu netenkama daug kraujo. Vyresnio amžiaus žmonėms anemija išsivysto dėl netinkamos mitybos ir lėtinių ligų. Taigi anemija veikia kaip antrinis esamų organizmo sutrikimų simptomas.

Kai kurios nėštumo metu pasireiškiančios ligos formos laikomos normaliomis, tačiau reikia žinoti, kodėl mažakraujystė pavojinga įvairių amžiaus grupių pacientams. Esant ilgalaikei hipoksijai, sutrinka vidiniai medžiagų apykaitos procesai, kaupiasi toksiški produktai, sutrinka inkstų ir kepenų, širdies, plaučių veikla. Pacientas ilgą laiką gali nepastebėti ligos, kuri palaipsniui pereis į lėtinę formą. Galiausiai atsiranda skundų dėl dusulio, rankų ir kojų patinimų, dažno širdies plakimo ir sumažėjusio darbingumo. Prieš atlikdami laboratorinius tyrimus, gydytojai daro prielaidą, kad yra nežinomos patogenezės anemija.

Ligos etiologija

Anemija pacientams diagnozuojama nustačius įvairius veiksnius. Yra žinomos šios pagrindinės anemijos priežastys:

  1. Didelio kiekio kraujo netekimas esant gausiam mėnesinių ciklui, gilios žaizdos, piktybinio gaubtinės žarnos vėžio fone, žarnyno opos.
  2. Inkstų funkcijos sutrikimas, kai kaulų čiulpuose sumažėja eritropoetino, kuris gamina retikulocitus (raudonųjų kraujo kūnelių pirmtakus), gamyba.
  3. Liga gali būti paveldėta iš pirmos eilės giminaičių.
  4. Prasta mityba, vitaminų B12 ir C, folio rūgšties, geležies trūkumas.
  5. Anemija vystosi lėtinių patologijų fone: Krono liga, AIDS, ŽIV, reumatoidinis artritas, karcinoma.
  6. Hematopoetinės sistemos pažeidimo požymių pasireiškimas taip pat yra susijęs su psichosomatika. Anemija veikia kaip specifinis organizmo signalas, kad žmogus yra pernelyg savikritiškas ir nepatenkintas savo gyvenimu. Tokiu atveju psichologai rekomenduoja mintyse kartoti sau, kad naujas kelias ir mintys nekelia grėsmės ir yra visiškai saugūs.
  7. Kai kurių žmonių organizmas negali pasisavinti vitamino B12, todėl išsivysto anemija. Maistinių medžiagų įsisavinimo sumažėjimą gali sukelti pieno produktai, kietas maistas ir žali grūdai.
  8. Nesant ligos, raudonieji kraujo kūneliai gyvena 100 dienų. Pažeidus blužnį, vystosi hemolizė, dėl kurios sutrinka jos veikla.
  9. Etanolis yra toksiškas smegenų veiklai ir lėtina raudonųjų kraujo kūnelių gamybą. Sujungus šiuos veiksnius, lėtiniai alkoholikai žymiai padidina anemijos išsivystymo riziką.
  10. Vidinių geležies atsargų išeikvojimą dažniausiai išprovokuoja moterys, kovojančios su antsvoriu ir besilaikančioms griežtų dietų.
  11. Anemija dažnai pasireiškia priešoperaciniu laikotarpiu. Todėl chirurgas turi visapusiškai įvertinti intervencijos riziką ir padidinti hemoglobino kiekį iki normalaus, kad sumažintų širdies ir kraujagyslių sistemos apkrovą.


Ar jums patiko straipsnis? Pasidalinkite su draugais!