Anemik etki alanı modeli bir anti-örüntü değil, SOLID ilkelerine dayalı bir mimaridir. Etki Alanı Odaklı Tasarım: Etki Alanı Oluşturma

Anemi - İngilizce sayfası

Anemi

Bu web sitesi hastalara farklı anemi türleri hakkında bilgi sunmaktadır. Rusya'da kan hastalıklarıyla ilgilenen hematologlar - doktorlar tarafından oluşturulmuştur.
Bu kaynakla ilgili herhangi bir sorunuz varsa lütfen e-posta veya telefon yoluyla bizimle iletişime geçin (+7-495-741-06-41)

Kansızlığınız varsa insanlar kanınızın yorgun olduğunu söyleyebilir. Bunun nedeni, aneminin (dokularınıza yeterli oksijeni taşıyacak kadar sağlıklı kırmızı kan hücresinin bulunmaması durumu) kendinizi yorgun hissetmenize neden olabilmesidir.

Her birinin kendi nedeni olan birçok anemi türü vardır. Anemi geçici veya uzun süreli olabilir ve hafiften şiddetliye kadar değişebilir.

Anemi yaygın bir kan hastalığıdır. Kadınlar ve kronik hastalıkları olan kişiler bu duruma yakalanma riski altındadır.

Aneminiz olduğundan şüpheleniyorsanız doktorunuza görünün. Anemi ciddi hastalıkların belirtisi olabilir. Anemi tedavileri takviye almaktan tıbbi prosedürlere kadar uzanır. Sağlıklı ve çeşitli bir diyetle bazı anemi türlerini önleyebilirsiniz.

Belirtiler

Çoğu anemi türünün ana semptomu yorgunluktur. Diğer anemi belirtileri şunlardır:

  • Zayıflık
  • Soluk cilt
  • Hızlı veya düzensiz kalp atışı
  • Nefes darlığı
  • Göğüs ağrısı
  • Baş dönmesi
  • Bilişsel sorunlar
  • Ekstremitelerinizde uyuşma veya soğukluk
  • Baş ağrısı

Başlangıçta anemi o kadar hafif olabilir ki fark edilmeyebilir. Ancak durum kötüleştikçe belirti ve semptomlar artar.

Nedenler

Kan, hem plazma adı verilen sıvıdan hem de hücrelerden oluşur. Plazma içinde üç tip kan hücresi yüzer:

  • Beyaz kan hücreleri. Bu kan hücreleri enfeksiyonla savaşır.
  • Trombositler. Bu kan hücreleri bir kesikten sonra kanınızın pıhtılaşmasına yardımcı olur.
  • Kırmızı kan hücreleri (eritrositler). Bu kan hücreleri oksijeni akciğerlerinizden kan dolaşımınız yoluyla beyninize ve diğer organ ve dokulara taşır. Vücudunuzun çalışması için oksijenli kan kaynağına ihtiyacı vardır. Oksijenli kan vücudunuza enerji verir ve cildinize sağlıklı bir parlaklık kazandırır.

Kırmızı kan hücreleri, kana kırmızı rengini veren kırmızı, demir açısından zengin bir protein olan hemoglobin içerir. Hemoglobin, kırmızı kan hücrelerinin akciğerlerinizden vücudunuzun her yerine oksijen taşımasını ve vücudun diğer bölgelerinden karbondioksitin dışarı atılabilmesi için akciğerlere taşınmasını sağlar.

Kırmızı kan hücreleri de dahil olmak üzere kan hücrelerinin çoğu, büyük kemiklerinizin çoğunun boşluklarında bulunan kırmızı, süngerimsi bir malzeme olan kemik iliğinizde düzenli olarak üretilir. Hemoglobin ve kırmızı kan hücreleri üretmek için vücudunuzun, yediğiniz yiyeceklerdeki demir, protein ve vitaminlere ihtiyacı vardır.

Anemi, kırmızı kan hücrelerinin sayısının veya içlerindeki hemoglobinin normalin altında olduğu bir durumdur. Anemik olduğunuzda, vücudunuz çok az sayıda sağlıklı kırmızı kan hücresi üretir, bunlardan çoğunu kaybeder veya değiştirilebileceğinden daha hızlı bir şekilde yok eder. Sonuç olarak, dokularınıza oksijen taşımak için kanınızda kırmızı kan hücreleri azalır. Sizi yorgun bırakıyor Yaygın anemi türleri ve nedenleri şunlardır:

    Demir eksikliği anemisi. Aneminin bu en yaygın şekli Amerika Birleşik Devletleri'nde beş kadından birini, hamile kadınların yarısını ve erkeklerin yüzde 3'ünü etkilemektedir. Bunun nedeni vücudunuzdaki demir elementinin eksikliğidir. Kemik iliğinizin hemoglobin yapmak için demire ihtiyacı vardır. Yeterli demir olmadan vücudunuz kırmızı kan hücreleri için yeterli miktarda hemoglobin üretemez. Sonuç demir eksikliği anemisidir.

    Vücudunuzun demire ihtiyaç duymasının bir yolu da kan hücrelerinin ölmesidir; içlerindeki demir geri dönüştürülür ve yeni kan hücreleri üretmek için kullanılır. Yani kan kaybederseniz demir kaybedersiniz. Adet dönemleri ağır geçen ve her ay adet sırasında çok fazla kan kaybeden kadınlar demir eksikliği anemisi riski altındadır. Ülser, kolon polipi ve hatta kolon kanseri gibi vücuttaki bir kaynaktan kaynaklanan yavaş, kronik kan kaybı da demir kaybına ve demir eksikliği anemisine yol açabilir.

    Vücudunuz ayrıca yediğiniz yiyeceklerden de demir alır. Demirden fakir beslenme bu anemiye yol açabilir. Hamile kadınlarda, büyüyen fetüs annenin demir deposunu tüketerek demir eksikliği anemisine yol açabilir.

  • Vitamin eksikliği anemileri. Yeterli sayıda sağlıklı kırmızı kan hücresi üretmek için vücudunuzun demirin yanı sıra folat ve B-12 vitaminine ihtiyacı vardır. Bunların ve diğer temel besin maddelerinin eksik olduğu bir beslenme, kırmızı kan hücresi üretiminin azalmasına neden olabilir. Besinlerin emilimini etkileyen bağırsak bozukluğu olan kişiler bu tür anemiye yatkındır. Bazı insanlar çeşitli nedenlerle B-12 vitaminini ememezler ve bazen pernisiyöz anemi olarak da adlandırılan B-12 vitamini eksikliği anemisi geliştirirler. Vitamin eksikliği anemileri, megaloblastik anemi adı verilen ve kemik iliğinin büyük, anormal kırmızı kan hücreleri ürettiği bir anemi grubuna girer.
  • Kronik hastalık anemisi. Kanser, romatoid artrit, Crohn hastalığı ve diğer kronik inflamatuar hastalıklar gibi bazı kronik hastalıklar, kırmızı kan hücrelerinin üretimini engelleyerek kronik anemiye neden olabilir. Böbrek yetmezliği de anemi adı verilen bir hormon üretir. Kemik iliğinizi kırmızı kan hücreleri üretmesi için uyaran eritropoietin Böbrek yetmezliğinden kaynaklanabilecek veya kemoterapinin bir yan etkisi olabilecek eritropoietin eksikliği, kırmızı kan hücrelerinin eksikliğine neden olabilir.
  • Aplastik anemi. Bu, kemik iliğinin üç tip kan hücresini (kırmızı kan hücreleri, beyaz kan hücreleri ve trombositler) üretme yeteneğindeki azalmanın neden olduğu hayatı tehdit eden bir anemidir. Çoğu zaman aplastik aneminin nedeni bilinmemektedir, ancak "Genellikle otoimmün bir hastalık olduğuna inanılıyor. Bu tür anemiden sorumlu olabilecek bazı faktörler arasında kemoterapi, radyasyon tedavisi, çevresel toksinler, hamilelik ve lupus yer alır.
  • Lösemi ve lösemi öncesi bir durum olan miyelodisplazi gibi çeşitli hastalıklar, kemik iliğinde kan üretimini etkileyerek anemiye neden olabilir. Bu tür kanserlerin ve kanser benzeri bozuklukların etkileri, kan üretimindeki hafif bir değişiklikten, kan yapım sürecinin tamamen yaşamı tehdit eden bir şekilde durmasına kadar değişir. Ek olarak multipl miyelom, miyeloproliferatif bozukluklar ve lenfoma gibi diğer kan veya kemik iliği kanserleri de anemiye neden olabilir.
  • Hemolitik anemiler. Bu anemi grubu, kırmızı kan hücrelerinin kemik iliğinin yerini alabileceğinden daha hızlı bir şekilde yok edilmesiyle gelişir. Bazı kan hastalıkları kırmızı kan hücresi tahribatının artmasına neden olabilir. Otoimmün bozukluklar vücudunuzun kırmızı kan hücrelerine karşı antikorlar üretmesine ve onları erken yok etmesine neden olabilir. Enfeksiyonları tedavi etmek için kullanılan bazı antibiyotikler gibi bazı ilaçlar da kırmızı kan hücrelerini parçalayabilir. Hemolitik anemiler derinin sararmasına (sarılık) ve dalağın büyümesine neden olabilir.
  • Orak hücreli anemi. Esas olarak Afrika ve Arap kökenli insanları etkileyen bu kalıtsal ve bazen ciddi anemi, kırmızı kan hücrelerini anormal hilal (orak) şekli almaya zorlayan kusurlu bir hemoglobin formundan kaynaklanır. Bu düzensiz şekilli kırmızı kan hücreleri erken ölür ve bu da kronik kırmızı kan hücresi eksikliğine neden olur. Orak şeklindeki kırmızı kan hücreleri, vücuttaki küçük kan damarlarındaki kan akışını da engelleyerek başka, genellikle ağrılı semptomlara neden olabilir.
  • Diğer anemiler. Talasemi ve kusurlu hemoglobinin neden olduğu anemiler gibi daha nadir anemi türleri de vardır.

Bazen aneminin nedeni belirlenemeyebilir.

Risk faktörleri

Bu faktörler sizi artan anemi riskine sokar:

  • Kötü beslenme. Diyeti sürekli olarak demir ve vitaminler, özellikle de folat bakımından düşük olan herkes, genç ya da yaşlı, anemi riski altındadır. Vücudunuzun yeterli sayıda kırmızı kan hücresi üretebilmesi için demir, protein ve vitaminlere ihtiyacı vardır.
  • Bağırsak bozuklukları. Crohn hastalığı ve çölyak hastalığı gibi ince bağırsakta besin maddelerinin emilimini etkileyen bir bağırsak bozukluğuna sahip olmak, sizi anemi riskine sokar. İnce bağırsağın besinlerin emildiği kısımlarının cerrahi olarak çıkarılması veya ameliyat edilmesi, besin maddelerinin emilmesine yol açabilir. eksiklikler ve anemi.
  • Menstruasyon. Genel olarak kadınlar demir eksikliği anemisi açısından erkeklere göre daha fazla risk altındadır. Bunun nedeni kadınların her ay regl döneminde kan ve bununla birlikte demir kaybetmesidir.
  • Gebelik. Gebe kadınların demir eksikliği anemisi riski daha yüksektir çünkü demir depoları annenin artan kan hacmine hizmet etmek zorunda olduğu kadar büyüyen fetüs için de hemoglobin kaynağı olmak zorundadır.
  • Kronik koşullar.Örneğin, kanser, böbrek veya karaciğer yetmezliğiniz ya da başka bir kronik rahatsızlığınız varsa, kronik hastalık anemisi olarak adlandırılan risk altında olabilirsiniz. Bu durumlar kırmızı kan hücrelerinin eksikliğine yol açabilir. Yavaş, kronik kan kaybı Bir ülserden veya vücuttaki başka bir kaynaktan kaynaklanan demir zehirlenmesi vücudunuzun demir deposunu tüketerek demir eksikliği anemisine yol açabilir.
  • Aile geçmişi. Ailenizde kalıtsal anemi öyküsü varsa, siz de bu duruma yakalanma riskiniz yüksek olabilir.

Bazı enfeksiyonlar, kan hastalıkları ve otoimmün bozukluklar, toksik kimyasallara maruz kalma ve bazı ilaçların kullanımı kırmızı kan hücresi üretimini etkileyerek anemiye yol açabilir. Anemi riski taşıyan diğer kişiler arasında şeker hastaları, alkol bağımlıları (alkol folik asit emilimini engeller) ve katı vejetaryen diyet uygulayan, yeterli miktarda demir veya B-12 vitamini alamayan kişiler yer alır. diyet.

Ne zaman tıbbi tavsiye alınmalı

Açıklanamayan nedenlerden dolayı kendinizi yorgun hissediyorsanız, özellikle de anemi riski taşıyorsanız doktorunuza görünün. Demir eksikliği anemisi gibi bazı anemiler yaygındır. Ancak yorgunsanız anemik olduğunuzu varsaymayın. Yorgunluğun anemi dışında birçok nedeni vardır.

Bazı insanlar kan bağışına gittiklerinde hemoglobinlerinin düşük olduğunu, bunun da kansızlığa işaret ettiğini öğrenirler. Düşük hemoglobin, demir açısından zengin gıdaların daha fazla tüketilmesiyle veya demir içeren multivitamin alınmasıyla çözülebilen geçici bir sorun olabilir. Ancak bu aynı zamanda vücudunuzda demir eksikliğine neden olabilecek kan kaybının bir uyarı işareti de olabilir. Hemoglobin düşüklüğü nedeniyle kan bağışı yapamayacağınız söylenirse, endişelenmeniz gerekip gerekmediğini doktorunuza sorun.

Ailenizde orak hücreli anemi gibi kalıtsal anemi öyküsü varsa, riskiniz ve çocuklarınıza hangi riskleri aktarabileceğiniz konusunda doktorunuzla ve muhtemelen bir genetik danışmanınızla konuşun.

Testler ve tanı

Doktorlar anemiyi tıbbi öykü, fizik muayene ve tam kan sayımı (CBC) dahil olmak üzere kan testleri yardımıyla teşhis eder. Bu kan testi, kanınızdaki kırmızı kan hücrelerinin ve hemoglobin düzeylerini ölçer. Kanınızın bir kısmı, kırmızı kan hücrelerinizin boyutunu, şeklini ve rengini incelemek için mikroskop altında da incelenebilir; bu, tanıya işaret edebilir. Örneğin demir eksikliği anemisinde kırmızı kan hücreleri normalden daha küçük ve soluk renklidir. Vitamin eksikliği anemisinde kırmızı kan hücreleri genişler ve sayıları azalır.

Anemi tanısı alırsanız doktorunuz altta yatan nedeni belirlemek için ek testler isteyebilir. Örneğin demir eksikliği anemisi, bilinen veya bilinmeyen ülserlerin kronik kanaması, kolondaki iyi huylu polipler, kolon kanseri, tümörler veya böbrek yetmezliğinden kaynaklanabilir. Doktorunuz aneminin altında yatan bu ve diğer durumları tespit etmek için test yapabilir.

Bazen anemiyi teşhis etmek için kemik iliğinizin bir örneğini incelemek gerekebilir.

Komplikasyonlar

Anemi yeterince şiddetli olduğunda günlük görevleri yerine getirme yeteneğinizi etkileyebilir. Çalışmak veya oynamak için çok yorgun olabilirsiniz. Anemi sıklıkla tedavi edilebilir olmasına rağmen, tedaviden sonra kırmızı kan hücresi düzeylerinin normale dönmesi birkaç hafta ila aylar alabilir. Doktorunuza tedaviden ne bekleyeceğinizi sorun.

Size anemi teşhisi konduysa (genellikle rutin kan testleri sırasında tespit edilir) doktorunuza hangi tedavinin gerekli olduğunu sorun. Daha sonra kendinizi hızla daha iyi hissetmeye başlasanız bile tedaviye devam ettiğinizden emin olun. Kontrol edilmediğinde anemi, hızlı veya düzensiz kalp atışına, yani aritmiye yol açabilir. Anemik olduğunuzda, kalbiniz kandaki oksijen eksikliğini telafi etmek için daha fazla kan pompalamak zorundadır. Bu, konjestif kalp yetmezliğine bile yol açabilir. Tedavi edilmeyen zararlı anemi, B-12 vitamininin bir parçası olduğu için sinir hasarına ve zihinsel işlevlerde azalmaya yol açabilir. sadece sağlıklı kırmızı kan hücreleri için değil aynı zamanda optimal sinir ve beyin fonksiyonu için de önemlidir.

Orak hücreli anemi gibi bazı kalıtsal anemiler ciddi olabilir ve yaşamı tehdit eden komplikasyonlara yol açabilir. Çok fazla kan kaybetmek hızla akut, şiddetli anemiye neden olur ve ölümcül olabilir.

Tedaviler ve ilaçlar

Anemi tedavisi nedene bağlıdır:

  • Demir eksikliği anemisi. Bu anemi türü, birkaç ay veya daha uzun süre boyunca almanız gerekebilecek demir takviyeleri ile tedavi edilir. Demir eksikliğinin altında yatan neden menstruasyon dışında kan kaybı ise kanamanın kaynağı bulunup durdurulmalıdır. Bu ameliyatı gerektirebilir.
  • Vitamin eksikliği anemileri. Zararlı anemi, B-12 vitamini enjeksiyonlarıyla (genellikle ömür boyu enjeksiyonlarla) tedavi edilir. Folik asit eksikliği anemisi folik asit takviyeleri ile tedavi edilir.
  • Kronik hastalık anemisi. Bu tür anemi için özel bir tedavi yoktur. Doktorlar altta yatan hastalığın tedavisine odaklanır. Demir takviyeleri ve vitaminler genellikle bu tür anemiye yardımcı olmaz. Bununla birlikte, semptomlar şiddetli hale gelirse, kan nakli veya normalde böbrekler tarafından üretilen bir hormon olan sentetik eritropoietin enjeksiyonu, kırmızı kan hücresi üretimini uyarmaya ve yorgunluğu hafifletmeye yardımcı olabilir.
  • Aplastik anemi. Bu ciddi aneminin tedavisi, kırmızı kan hücrelerinin düzeylerini artırmak için kan naklini içerebilir. Kemik iliğiniz hastalıklıysa ve sağlıklı kan hücreleri üretemiyorsa kemik iliği nakline ihtiyacınız olabilir. Bağışıklık sisteminizin tepkisini azaltmak ve nakledilen kemik iliğine yeniden çalışmaya başlaması için bir şans vermek için bağışıklık sistemini baskılayan ilaçlara ihtiyacınız olabilir.
  • Kemik iliği hastalığına bağlı anemiler. Bu çeşitli hastalıkların tedavisi basit ilaçlardan kemoterapiye ve kemik iliği nakline kadar değişebilir. Bu tür anemilerin tedavisi genellikle bir kan uzmanına (hematolog) danışmayı içerir.
  • Hemolitik anemiler. Hemolitik anemiyi yönetmek, şüpheli ilaçlardan kaçınmayı, ilgili enfeksiyonları tedavi etmeyi ve bağışıklık sisteminizi baskılayan, kırmızı kan hücrelerinize saldıran ilaçları almayı içerir. Steroidler veya gama globulin ile kısa süreli tedavi, bağışıklık sisteminizin kırmızı kan hücrelerinize saldırısını bastırmanıza yardımcı olabilir. Durum dalağın büyümesine neden olduysa, dalağınızı aldırmanız gerekebilir. Dalak — vücudunuzun altında küçük bir organdır. sol taraftaki göğüs kafesi - kusurlu kırmızı kan hücrelerini filtreler ve depolar. Bazı hemolitik anemiler, dalağın hasarlı kırmızı kan hücreleriyle genişlemesine neden olabilir.
  • Orak hücreli anemi. Bu tedavi edilemeyen aneminin tedavisi, ağrıyı azaltmak ve komplikasyonları önlemek için oksijen, ağrı kesici ilaçlar ve oral ve intravenöz sıvıların uygulanmasını içerebilir. Doktorlar ayrıca sıklıkla kan nakli, folik asit takviyeleri ve antibiyotik kullanırlar. Kemik iliği nakli bazı durumlarda etkili bir tedavi olabilir. Yetişkinlerde orak hücreli anemiyi tedavi etmek için hidroksiüre (Droxia, Hydrea) adı verilen bir kanser ilacı da kullanılmaktadır.

Önleme

Birçok anemi türü önlenemez. Ancak demir, folat ve B-12 vitamini açısından zengin gıdaları içeren sağlıklı ve çeşitli bir diyet yiyerek demir eksikliği anemisi ve vitamin eksikliği anemisinden kaçınmaya yardımcı olabilirsiniz.

En iyi demir kaynakları sığır eti ve diğer etlerdir. Demir açısından zengin diğer yiyecekler arasında fasulye, mercimek, demirle zenginleştirilmiş tahıllar, koyu yeşil yapraklı sebzeler, kurutulmuş meyveler, kabuklu yemişler ve tohumlar bulunur. Folat ve onun sentetik formu olan folik asit, narenciye suları ve meyvelerde, koyu yeşil yapraklı sebzelerde, baklagillerde ve zenginleştirilmiş kahvaltılık tahıllarda bulunabilir. B-12 vitamini et ve süt ürünlerinde bol miktarda bulunur. Turunçgiller gibi C vitamini içeren besinler demir emiliminin artmasına yardımcı olur.

Demir içeren gıdaların bol miktarda tüketilmesi özellikle çocuklar gibi yüksek demir gereksinimi olan kişiler (büyüme atakları sırasında demire ihtiyaç vardır) ve hamile ve adet gören kadınlar için önemlidir. Yeterli demir alımı bebekler, katı vejetaryenler ve uzun mesafe koşucuları için de çok önemlidir.

Doktorlar, demir gereksinimi yüksek olan kişiler için demir takviyeleri veya demir içeren multivitaminler reçete edebilir. Ancak demir takviyeleri yalnızca dengeli bir beslenmenin sağlayabileceğinden daha fazla demire ihtiyacınız olduğunda uygundur. Yorgunsanız sadece demir takviyesi almanız gerektiğini düşünmeyin. Vücudunuza aşırı demir yüklemek tehlikeli olabilir.

Bu sayfanın hazırlanmasında Mayoklinik'ten alınan bilgilerden yararlanılmıştır.

Anemik etki alanı modeli

Etki alanı nesneleriniz veri kapsayıcılarıysa ve sahip oldukları tek şey get/set özellikleriyse, o zaman anemik bir etki alanı modeli kullanıyorsunuz demektir. Özelliği, bir etki alanı nesnesinin hiçbir davranışının olmamasıdır.

Görev

Örneğin bir çevrimiçi mağazayı kullanma senaryoları:

  1. Sisteme kayıt olan kullanıcıya, kaydı onaylamak için bağlantı içeren bir e-posta gönderilir. Linke tıklayarak kaydını onaylıyor ve kullanıcı adı ve şifresi ile sisteme giriş yapabiliyor.
  2. Kullanıcı sipariş verebilir
  3. Aynı zamanda kişisel hesabında sipariş verdiği toplam tutarı da görüyor. Mevcut siparişlerin toplam tutarı, halihazırda tamamlanmış siparişleri hesaba katmaz

Kansız bir veri modeliyle başlayalım. Bir Hesap sınıfımız olacak:

Genel sınıf Hesap ( public int Id ( get; set; ) public bool IsApproved ( get; set; ) public DateTime? ActivationDate ( get; set; ) public Liste Siparişler(get;set;))

Ve Sipariş sınıfı:

Genel sınıf Sipariş ( public int Id ( get; set; ) public int Fiyat ( get; set; ) public Account Account ( get; set; ) public bool IsComplete ( get; set; ))

Uygulama

Çalışma senaryolarının her birinin uygulanması oldukça basittir:

Senaryo #1. Kullanıcı aktivasyonu

Account.ActivationDate = DateTime.Now; account.IsApproved = doğru;

2 numaralı senaryo. Sipariş ekleme

Account.Orders.Add(sipariş); sipariş.Hesap = hesap;

Senaryo #3. Toplam tutarın hesaplanması

Account.Orders . Where(order => order.IsComplete == false) .Sum(order => order.Price);

Asıl soru şu: Bu kod nerede bulunacak?

Çözüm #0

En basit ve yanlış çözüm var. Bu kodu doğrudan aspx sayfalarındaki veya WinForms'taki işleyicilere yazacağız:

Genel kısmi sınıf Varsayılan: Page ( protected void Page_Load(object sender, EventArgs e) ( // hesap nesnesini seçiyoruz AccountOrdersSumLabel.Text = account.Orders . Where(order => order.IsComplete == false) .Sum(order => order .Price); ) protected void AddOrderButton_Click(object sender, EventArgs e) ( // hesap nesnesini seçiyoruz account.Orders.Add(order); order.Account = hesap; // hesap nesnesini kaydediyoruz)

Ürünü yalnızca bu formdan ekleyebildiğiniz sürece her şey yolunda olacaktır ve toplam tutar yalnızca bu formül kullanılarak hesaplanır. Başka bir form aynı işlevselliği gerektirdiğinde sorunlar başlayacaktır. Kodu çoğaltmanız gerekecek. Daha sonra, eğer çalışma mantığı değişirse, bunu tüm arka kodlarda düzeltmeniz gerekecektir.

Kodu kopyalayıp, değişen bir iş gereksinimini düzeltmek için çok zaman harcamak aptallıktır.

Çözüm #1

Yine de kopyalamayacağız. Komut dosyalarımızı uygulamaya yönelik kodu, AccountHelper veya AccountManager gibi ses getiren bir adla bir sınıfa koyacağız. Büyük olasılıkla bu sınıf vatansız ve dolayısıyla statik olacaktır.

Şunu elde ederiz:

Public static class AccountHelper ( public static void Activate(Account account) ( account.ActivationDate = DateTime.Now; account.IsApproved = true; ) public static void AddOrder(Hesap hesabı, Order order) ( account.Orders.Add(order); order.Account = hesap; ) public static int CalculateOrdersSum(Hesap hesabı) ( return account.Orders . Where(order => order.IsComplete == false) .Sum(order => order.Price); ) )

*Helper veya *Manager olarak adlandırılan sınıfların sorunu, istedikleri her şeyi yapabilmeleridir. Soyut adları, Account sınıfının tamamen farklı şeyler yapmasına "yardım etmesine" olanak tanır. Bu tür sınıflar haline gelir.

Bu tür sınıfların birçok dezavantajı vardır. Örneğin, bu sınıfları kullanan kodun test edilmesi zordur çünkü bunlar statiktir. Kodu son derece bağlantılı hale getiriyorlar çünkü ... ihlal etmek Çoğu zaman bir Yardımcı diğer Yardımcıları çağırır. Sonuç olarak bağımlılık grafiği bir bağlantılar ağına benzer.

Ayrıca bu çözüm bir sonraki çözümün tüm dezavantajlarına sahiptir.

Çözüm #2

Genel arayüz IAccountService ( void Activate(Hesap hesabı); void AddOrder(Hesap hesabı, Sipariş sırası); int CalculateOrdersSum(Hesap hesabı); ) genel sınıf AccountService: IAccountService ( public void Activate(Hesap hesabı) ( account.ActivationDate = DateTime.Now ; account.IsApproved = true; ) public void AddOrder(Hesap hesabı, Sipariş emri) ( account.Orders.Add(order); order.Account = hesap; ) public int CalculateOrdersSum(Hesap hesabı) ( return account.Orders. Where( order => order.IsComplete == false) .Sum(order => order.Price)) )

Bağlantıyı ve testi çözdük. Zaten bir adım ileri. Ama iki sorun daha görüyorum.

AddOrder ve CalculateOrdersSum gibi pek çok fonksiyon olacak. Altı aylık bir geliştirme sürecinin ardından IAccountService arayüzü 40-50 fonksiyona ulaşacak. İkinci sorun olmasaydı arayüzün “kirlenmesi” atlatılabilirdi.

Hizmeti atlayarak kodun herhangi bir yerine kullanıcının "kendi aktivasyonunu" yazabilirsiniz. Örneğin, veritabanından bir Account nesnesi alın, IsApproved alanını true olarak ayarlayın ve aynı zamanda ActivationDate alanını güncellemeyi unutmayın. Aynı durum sipariş ekleme senaryosu için de geçerlidir. Siparişler özelliğindeki Ekle fonksiyonunu herhangi bir yerden çağırabilir ve eklenen sipariş için Hesap alanını ayarlamayı unutabilirsiniz. Bu da sistemi kararsız hale getiriyor. Uygulama API'si sistem kullanıcılarına karşı savunmasızdır. Bu yaklaşımla, programcının ihtiyaç duyduğu işlevi IAccountService'de bulacağını ve kendi yaklaşımını icat etmeyeceğini ancak umabiliriz.

Çözüm #3

Tüm bu işlevleri Account etki alanı nesnesinin kendisine koyalım. Nesne alanlarına yönelik erişim değiştiricilerin nasıl değiştiğine dikkat edin:

Genel sınıf Hesabı (özel salt okunur Liste siparişler; genel Hesap() ( siparişler = yeni Liste ();

Artık uygulamamızın etki alanı kullanıcıya Yardımcı veya hizmet gerektirmeyen hazır bir API veriyor. Ayrıca kullanıcıyı artık yalnızca Şimdi Etkinleştir ayarını yaparak Hesabı etkinleştiremeyecektir. işlevi gerekli alanları kendisi dolduracaktır.

Çözüm

Dolayısıyla, bir işlev etki alanı içinde bulunan veriler ve nesneler üzerinde çalışıyorsa, büyük olasılıkla bu işlevin etki alanı içinde bırakılması gerekir. Kodun güvenilirliğinin yanı sıra uygulamanız için alana özel bir dil de oluşturacaksınız.

Martin Fowler klasik çalışması "Kurumsal Uygulama Modelleri"nde ( Kurumsal uygulama mimarisinin kalıpları) iş mantığını organize etmeye yönelik çeşitli yaklaşımlar tanımlanmıştır.

  1. İşlem senaryosu- iş mantığı, her biri sunum katmanından gelen belirli bir talebe karşılık gelen prosedürlere bölünmüştür.
  2. Masa modülü- iş mantığı, önceki versiyonda olduğu gibi prosedürel bir tarzda anlatılmıştır, ancak her tablodaki manipülasyonlar ayrı bir sınıfa yerleştirilir, bu da kodun daha yapılandırılmış olmasını sağlar.
  3. Etki alanı modeli- Uygulanması en zor yaklaşımdır, ancak karmaşık mantığı tanımlarken bir takım avantajlara sahiptir. İşin özü, konu alanındaki nesnelere karşılık gelen nesnelerin tahsis edilmesidir. Bu nesneler arasındaki ilişkiler, gerçek dünyadaki nesneler arasındaki ilişkilere karşılık gelecek şekilde tanımlanır. Aynı zamanda depolama, güvenlik, işlem yönetimi gibi teknolojik konuların çözümü genellikle iş mantığı katmanının dışına alınır.

    Bu yaklaşım için iki seçenek vardır:

    • Zengin Etki Alanı Modeli- veriler ve davranışlar etki alanı nesneleri içinde kapsüllenir.
    • Anemik etki alanı modeli- etki alanı nesnelerinde yalnızca veriler kapsüllenirken davranış, etki alanı katmanının üstünde bulunan hizmetler katmanına aktarılır.
Hangi şablonun (işlemsel komut dosyası, tablo modülü veya etki alanı modeli) kullanılacağı arasındaki seçim kural olarak sorun yaratmıyorsa, çünkü uygulanabilirlik kriterleri açıkça tanımlanmışsa, anemik alan modelinin kullanılıp kullanılmaması sorusunun cevabı o kadar da açık değildir. Bir yandan nesne yönelimli yaklaşımın teorisyenleri bu modeli bir "anti-model" olarak görüyor; diğer yandan kurumsal uygulamaların geliştirilmesinde bazı avantajların varlığına işaret eden bir popülerlik kazandı. Bu konuyu anlamaya çalışalım.

Etki Alanı Modeli şablonu

Bir veya başka bir seçeneğin avantajlarını ve dezavantajlarını tartışmadan önce şablona bir bütün olarak bakmak gerekir. Yukarıda belirtildiği gibi, bu modelin özü, her biri gerçek dünyadaki bir nesnenin modeli olan, birbirine bağlı nesnelerden oluşan bir ağ yaratılmasıdır. Aynı zamanda, bu çözümün karmaşık mantığın uygulanmasını kolaylaştıran bir takım avantajları vardır: programcı OOP paradigmasının kapsülleme, kalıtım ve polimorfizm gibi tüm ilkelerine erişebilir. Aynı zamanda sınıfların yapısı gerçek dünyanın yapısını yansıtıyor ve bu da “programcı-analist” çizgisi boyunca etkileşimi kolaylaştırıyor. Ekipteki kişiler aynı dilde iletişim kurabilir. Modeli uygulamak için tanıdık tasarım modellerini kullanabilirsiniz. Bu model aynı zamanda iş mantığı katmanı için şeffaf olan veri depolama alanıyla etkileşimi uygulamanıza da olanak tanır - konu alanını modelleyen nesneler, örneğin bir veritabanında gerçekte depolandıkları gerçeği hakkında hiçbir şey bilmez.

Etki Alanı Modelinin uygulamanın iş mantığını yeniden kullanmanıza olanak sağlaması da önemli bir avantajdır. İşlem Komut Dosyası ve Tablo Modülü modellerinin aksine iş mantığı, sunum katmanından gelen isteklere bağlı değildir. Buna göre sunum katmanı için diğer seçenekler bunun üzerine yerleştirilebilir, örneğin RAHAT veya SABUN-hizmetler.

Ne yazık ki her onurun bir bedeli vardır. Bu durumda ücret aşağıdaki gibidir. İlk olarak, bir etki alanı modelini tasarlayan, uygulayan ve sürdüren geliştiricilerin niteliklerine yönelik gereksinimler artıyor: diğer çözümleri kullanırken olduğundan daha karmaşık soyutlamalar oluşturabilmek gerekiyor. İkincisi, kullanılan teknolojilere olan gereksinimler artıyor. Özellikle nesne ilişkisel eşlemeyi uygulayacak oldukça güçlü bir veri erişim katmanına sahip olmanız gerekir. Etki Alanı Modeli modelinin uygulanması genellikle güçlü ORM-çerçeve gibi Hazırda beklet, TopLink, EclipseLink veya OpenJPA bir yandan daha nitelikli geliştiriciler gerektirir, diğer yandan geliştirilmekte olan sistemin performansını düşürür ve kırılganlığını artırır: herhangi bir dikkatsiz eylem, örneğin bir nesnenin tanımındaki bir satırın değiştirilmesi- ilişkisel haritalama neden olabilir.

Doymuş ve anemik modellerin anatomisi

Etki alanı modeli oluşturmaya yönelik iki yaklaşım arasındaki anatomik fark nedir: doymuş ve anemik? Zengin bir yaklaşımla iş mantığı, yani. sistem davranışı etki alanı nesneleri içinde uygulanır. Bu yaklaşım, davranışın bir kısmının aşağıdaki gibi fayda sınıflarına aktarılmasını dışlamaz: *Hizmet, *Müdür, *Yardımcı, ancak bu yalnızca mantığın birden fazla etki alanı nesnesini etkilediği ve hangisiyle ilgili olduğu açık olmadığında haklı çıkar. Bir örnek, Telekom etki alanı modelinin aşağıdaki küçük kısmıdır. Kullanıcının hizmeti etkinleştirmesi gerekir. Hizmet siparişin bir parçası olarak eklenir. Bu durumda belirli parametrelerle hizmet verebilecek bir sağlayıcı kuruluşun olup olmadığının kontrol edilmesi gerekir. Zengin etki alanı modeli durumunda, hizmet ekleme mantığı yöntemde özetlenmiştir. addNewService(Servis hizmeti) sınıf HizmetSiparişi:

özel Liste < Service>hizmetler;

özel void addService(Servis hizmeti) (

if (hizmetler == null )

Hizmetler = yeni ArrayList< Service> () ;

Services.add(hizmet);

public void addNewService(Service service), NotFoundValidProviderException ('ı) atar

Hizmet SağlayıcıDepo sağlayıcıRepo = ...;

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

Hizmet Ekle(hizmet);

başka(

yeni NotFoundValidProviderException(service) atın;


Anemik etki alanı modeli farklı çalışır. Etki alanı nesne sınıflarının davranışı yoktur. Yalnızca yapıcıları ve veri erişim yöntemleri vardır. Uyguladıkları tek şey diğer nesnelerle olan ilişkilerdir. Tüm sistem davranışı, etki alanı modeli katmanının üstünde uygulanan bir hizmetler katmanına aktarılır. Bu yaklaşımı aynı örneği kullanarak gösterelim, ancak şimdi sınıf HizmetSiparişi yalnızca verilere erişen yöntemlere sahip olacaktır. Uygun bir servis sağlayıcının bulunup bulunmadığının belirlenmesi ve siparişe eklenmesi, ServisSipariş Yöneticisi(buna katılıyorum HizmetSiparişiHizmet kulağa biraz tuhaf geliyor):

genel sınıf ServiceOrder(

özel Liste < Service>hizmetler;

halk Liste < Service>getServices() (

iade hizmetleri;

genel geçersiz setServices( Liste < Service>hizmetler) (

this .hizmetler = hizmetler;


iade sağlayıcıRepo;

if (order.getServices() == null)

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

Order.getServices().add(service);

başka(

Anemik Alan Modelinin Eleştirisi

Geliştirme topluluğunda Anemik Etki Alanı Modeli modelinin kullanılmasına karşı iki ana husus vardır:
  • Anemik alan modeli kullanarak OOP ilkelerinden sapıyoruz. Bu eleştirinin özü şu gerçeğine iniyor: Anemik etki alanı modeli durumunda etki alanı nesnelerinin davranışı yoktur, o zaman OOP'un temel fikriyle - bunları tek bir yerde işlemek için veri ve yöntemlere sahip olmak - çatışırız.
  • Etki alanı modeli anemik bir modele dönüştüğünde, bu modelin sağladığı tüm avantajlar kaybolur ancak dezavantajları kalır. Özellikle, bu modelin kullanımı hala oldukça güçlü bir veri erişim katmanı gerektirir; örneğin, hantal bir veri erişim katmanı kullanılarak uygulanır. ORM-çerçeveler.
Bu düşüncelere daha ayrıntılı olarak bakalım. Anemik alan modeli OOP ilkeleriyle çelişiyor. Bir bakıma bu düşünce doğrudur çünkü Etki alanı nesnelerinin davranışı yoktur. Ancak nesnelerin iç durumuna erişim, o nesnenin yöntemlerinin arkasında kapsüllenebilir. Bu fikri, bir siparişe: bir sınıfa hizmet ekleme örneğimizi kullanarak gösterelim. HizmetSiparişi yöntem eklendi addService() yöntem ise setHizmetler()özel yap:

genel sınıf ServiceOrder(

özel Liste < Service>hizmetler;

halk Liste < Service>getServices() (

iade hizmetleri;

özel void setServices( Liste < Service>hizmetler) (

this .hizmetler = hizmetler;

public void addService(Servis hizmeti) (

if (hizmetler == null )

Hizmetler = yeni ArrayList< Service> () ;

Services.add(hizmet);


Sınıf ServiceOrderManagerImpl sipariş ekleme olasılığını kontrol edecek ve yöntemi çağıracak addService() sınıf HizmetSiparişi:

genel sınıf ServiceOrderManagerImpl, ServiceOrderManager'ı uygular (

özel Hizmet SağlayıcıDepo sağlayıcıRepo;

public ServiceProviderRepository getProviderRepo() (

iade sağlayıcıRepo;

public void setProviderRepo(ServiceProviderRepository ProviderRepo) (

this .providerRepo = sağlayıcıRepo;

public void addNewService(ServiceOrder order, Service service), ProviderNotFoundException ('ı) atar

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

Order.addService(hizmet);

başka(

yeni ProviderNotFoundException(service) atın;


Sorun, davranışları diğer sınıflara göstermenin bu tür yöntemlerin herkese açık olmasını gerektirmesidir. Bu, kapsüllemeyi önemli ölçüde bozar. Dikkatsiz herhangi bir geliştirici, bir nesnenin özelliğine, ilgili hizmetin yöntemlerini atlayarak (örneğin, sağlayıcının kullanılabilirliğini kontrol etmeden bir siparişe bir hizmet ekleyerek) erişebilecektir.

Bir çözüm, örneğin bir şablon kullanarak tüm iş mantığını kapsamak olabilir. POJO-cephe. Bu durumda, iş mantığı katmanının dışına aktarılan nesnelerin değişmezliğini veya en azından bunların iş mantığı katmanını atlayarak bu tür nesnelerde yapılan değişikliklerin kaydedilmesine izin vermeyecek şekilde veri depolama katmanından ayrılmasını sağlamak gerekir.

Kalıtım ve polimorfizm gibi diğer OOP ilkeleri, anemik alan modeli kullanıldığında kullanılabilir durumda kalır. En modern ORM-çerçeveler, bir sınıf hiyerarşisinin bir veritabanına eşlenmesine izin verir. Örneğin, bir finansal uygulama modeli oluştururken kredili mevduat limitinin hesaplanmasında farklı stratejileri göz önünde bulundurmalısınız. Diyelim ki iki strateji var: Kredili mevduat yok ve sınırlı limitli kredili mevduat. Aşağıdaki sınıf hiyerarşisini oluşturalım:




Bu durumda sınıf nesnesi Hesap- hesap - bu hesap için geçerli olan kredili mevduat hesaplama stratejisinin belirli bir uygulamasına bir bağlantı olacaktır:

genel sınıf Hesabı (

özel Kredili MevduatLimitStrateji kredili mevduatLimitStrateji;

public OverdraftLimitStrategy getOverdraftLimitStrategy() (

Kredili mevduat getirisiLimitStrategy;


Bazılarında Hesap Hizmeti artık kredili mevduat hesaplama stratejisinin polimorfik bir uygulamasını kullanabiliriz:

genel sınıf AccountService(

genel geçersiz para çekme (Hesap hesabı, Çift tutar) (

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

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


Etki Alanı Modeli modelinin sağladığı tüm avantajlar kaybolur. Yukarıda tartıştığımız gibi, bir sistemi OOP stilinde modellemenin, anemik alan modeli kullanıldığında sağladığı avantajlar hala bizim için mevcuttur. Bu avantajların ancak sistem mimarisinin, özellikle de katmanlar arasındaki arayüzlerin yetkin bir şekilde geliştirilmesiyle elde edilebilmesi mümkündür, ancak bu, daha basit bir model için ödenecek uygun bir bedeldir. Nesnelerin uzun süreli hafızada şeffaf bir şekilde saklanma yeteneği de kaybolmaz. Daha önce olduğu gibi, nesne depodaki ilgili komutla kaydedildi ( Depo) veya çalışma alanı ( İş Birimi) ve öyle kalmaya devam ediyor. Bir nesnenin dahili durumundaki değişikliklerin veri deposuyla senkronize edilmesi, bu değişikliğin tam olarak nasıl gerçekleştirildiğine (nesne sınıfı içindeki bir yöntemle veya bir hizmet yöntemiyle) bağlı değildir.

Anemic Domain Model modelinin popülaritesinin nedenleri

Şimdi Anemic Domain Model modelinin neden bu kadar popüler olduğu sorusunun cevabını bulmaya çalışalım. Kanımca bunun temel nedeni, bu modelin modern teknolojiler kullanılarak uygulanmasının zengin modele göre daha kolay olmasıdır. Günümüzde kaynak kodunu yapılandırmanın en yaygın yolu Bağımlılık Enjeksiyon modelidir. Aynı zamanda uygulamada iki nesne kaynağı açıkça görülmektedir:
  • IoC- Bağımlılık Enjeksiyonu modelini uygulayan ve hizmet nesneleri oluşturan bir konteyner: depolar, hizmetler, cepheler;
  • ORM-etki alanı nesneleri oluşturan çerçeve.
Zengin Etki Alanı Modeli modelini uygularken, bu iki şekilde oluşturulan nesnelerin tek bir grafikte birbirine bağlanması sorunu ortaya çıkar. Yukarıda anlatılan zengin alan modeli örneğine dönersek, sınıf nesnesinin HizmetSiparişi bir şekilde arayüzü uygulayan sınıfın bir nesnesini aktarmanız gerekiyor Hizmet Sağlayıcı Havuzu. Hepsi değil ORM-çerçeveler, yapımları sırasında nesnelere üçüncü taraf bağımlılıkları enjekte etmenize olanak tanır; IoC-konteyner. Bir takım dezavantajları olan yaklaşımları kullanmak zorundayız.
  • Statik değişkenler ve yöntemler aracılığıyla enjeksiyon. Depolar ve diğerleri IoC-nesneler tekil olarak iletilir. Bu yaklaşımın dezavantajları: Bir nesneyi, örneğin test sırasında bir saplamayla değiştirerek değiştirmek daha zordur. Bu yaklaşım aynı zamanda gizli bağımlılıkları da beraberinde getirir.
  • Bağımlılıkları bir yöntem aracılığıyla geçirmek (ayarlayıcı aracılığıyla enjeksiyonla karıştırılmamalıdır). Bir etki alanı nesnesine iş mantığını içeren bir yöntem eklersek, bunun gerektirdiği tüm nesnelerin bu yönteme aktarılması gerekir: depolar, fabrikalar, bağlantılar vb. Bu yaklaşımın dezavantajları: iş mantığı yöntemlerinin imzası daha karmaşık hale gelir, tüm bağımlılıklar ortaya çıkar; bir yöntemin mantığı daha karmaşık hale geldikçe, yeni bağımlılıklar gerektirebilir, bu da yöntemin ve yöntemin imzasında değişikliğe yol açacaktır. Hem yöntem çağrısını kullanıldığı her yerde düzeltmeniz hem de bir şekilde çağrı noktalarına yeni bağımlılıklar aktarmanız gerekir.
  • Hizmet Bulucu şablonunu kullanın ve bir şekilde bu şablonun uygulanmasını etki alanı nesnesinin bir yöntemine aktarın. Bu yöntemin dezavantajları, Servis Bulucu şablonunun dezavantajlarıdır.
  • Bağımlılıklar yerine çalışmalarının sonucunu yönteme aktarın. Ancak bu yaklaşım, etki alanı nesnesindeki mantığı ortadan kaldırır ve esasen anemik bir modele doğru ilk adımdır.

Anemik Etki Alanı Modeli Modeli'nin Faydaları

Anemik Etki Alanı Modeli modelinin, mevcut altyapı nedeniyle popülerliğinin yanı sıra kendine has birçok avantajı da vardır. Gelin onlara daha yakından bakalım.
  1. Tasarım ve geliştirme kolaylığı. Tipik olarak anemik bir alan modelinin geliştirilmesi daha az çaba ve beceri gerektirir. Etki alanı nesneleri, hizmetlerde kapsüllenmiş davranışlardan yoksun olduğundan, bu veya bu yöntemin hangi etki alanı nesnesine yerleştirileceği sorusu ortadan kalkar. Elbette bunun yerine hangi hizmete yerleştirileceği, yeni bir hizmet oluşturulup oluşturulmayacağına dair sorular ortaya çıkıyor ancak bu soruların çözülmesi daha kolay.
  2. Veri ambarına dayalı kolay üretim: veritabanı, WSDL-hizmet açıklaması, nesne-ilişkisel eşleme yapılandırma dosyası vb. Bu avantaj, özellikle OOP dilinde uygulanmayan eski bir sisteme bir arayüz oluşturduğumuzda veya arayüzü uzaktan prosedür çağrısı tarzında ortaya çıkardığımızda belirgindir. Bilgi sistemlerinin modern hizmet odaklı mimari kullanımına odaklanmasıyla yaklaşımın bu özelliği giderek daha önemli bir rol oynamaktadır. Bu, aradan neredeyse 10 yıl geçmesine rağmen, mevcut durumu Fowler'ın eleştirel makalesinin yazıldığı zamandan farklı kılıyor; Mevcut bir kurumsal hizmetin müşteri geliştiricisi olarak, hizmet sözleşmesine göre bir veri modeli oluşturmak benim için çok daha kolay (örneğin, WSDL-description) ve zengin bir etki alanı modeli oluşturmak ve bunun uzak bir hizmetle entegrasyonunu uygulamak yerine, bu model üzerinde bir yönetici sınıfları katmanı geliştirin.
  3. Yeniden kullanımı kolay. Anemik Etki Alanı Modeli şablonu üzerine kurulu bir uygulamamız varsa ve aynı verilerle çalışan ancak farklı iş mantığını uygulayan bir uygulama yapmamız gerekiyorsa o zaman mevcut modelin sınıflarını yeniden kullanabiliriz. Doymuş alan modeli durumunda bu tür yeniden kullanım zor olacaktır çünkü iş mantığı, etki alanı modelini uygulayan sınıflara bağlanmıştır. Bu açıdan bakıldığında aşırı kapsülleme yarardan çok zararlıdır.

Çözüm

Sonuç olarak şunu söylemekte yarar var ki, hem tartışma yürütürken hem de karar verirken yapılacak son şey, belli otoritelerin görüşlerini körü körüne takip etmektir. Bilimde fikir çoğulculuğu diye bir şeyin olduğunu her zaman hatırlamakta fayda var. Belirli yaklaşımlara bağlı farklı bilimsel okullar vardır. Bu tür okullar arasındaki rekabet oldukça doğaldır. Şu veya bu "guru" nun herhangi bir kelimesi fırsatçı bir bileşenden kaynaklanabilir. Daha sonra hayal kırıklığına uğramamak için kendinize idoller yaratmanıza gerek yok. Her zaman kendiniz düşünmeli ve öncelikle projenizin kendi deneyimine ve önceliklerine göre bir çözüm seçmelisiniz.

Son güncelleme: 19.07.2016

MVC modelinin temel bileşenlerinden biri modellerdir. Modellerin temel görevi, kullanılan verilerin yapısını ve mantığını tanımlamaktır.

Kural olarak, uygulamada kullanılan tüm varlıklar, her bir varlığın yapısını tanımlayan ayrı modellere ayrılır. Görevlere ve konu alanına bağlı olarak uygulamada farklı sayıda model seçebiliyoruz.

Tüm modeller sıradan POCO sınıfları (düz eski CRL nesneleri), yani C# dilindeki sıradan sınıflar olarak tasarlanmıştır. Örneğin, çevrimiçi bir cep telefonu mağazası uygulamasıyla çalışıyorsak, projede telefonu temsil edecek aşağıdaki modeli tanımlayabiliriz:

Genel sınıf Telefon ( public int Id ( get; set; ) public string İsim ( get; set; ) public string Şirket ( get; set; ) public int Fiyat ( get; set; ) )

Telefon modeli bir dizi özelliği tanımlar: benzersiz bir tanımlayıcı kimlik, ad, üretici ve fiyat. Bu bir klasik anemik modeli. Anemik modelin hiçbir davranışı yoktur ve yalnızca durumu özellik olarak saklar.

Ancak bir modelin yalnızca özelliklerden oluşması gerekmez. Ayrıca bir yapıcıya, bazı yöntemlere, alanlara sahip olabilir ve genellikle C#'ta standart bir sınıfı temsil edebilir. Anemik modellerin aksine davranışı da belirleyen modellere “kalın” modeller (Zengin Etki Alanı Modeli / Yağ Modeli / Kalın Model) denir. Örneğin anemik modelden onu şu şekilde değiştirerek uzaklaşabiliriz:

Genel sınıf Telefon ( özel ondalık _discount = 0; genel Telefon(ondalık indirim) ( this._discount = indirim; ) public int Id ( get; set; ) public string Ad ( get; set; ) public string Şirket ( get; set; ) genel ondalık Fiyat ( get; set; ) genel ondalık GetPriceWithDiscount() ( return this.Price - (this.Price * this._discount); ) )

Ancak bir varlığı tanımlamak için hangi yöntem seçilirse seçilsin, asıl önemli olan model sınıfını aşırı yüklememek ve amacının öncelikle verileri tanımlamak olduğunu hatırlamaktır. Ve model, tek sorumluluk ilkesine uygun olarak yalnızca tek bir varlığı tanımlamalıdır.

ASP.NET MVC Core uygulamasında modeller, uygulama derecesine göre birkaç gruba ayrılabilir:

    Nesneleri özel veri depolarında (örneğin veritabanlarında, xml dosyalarında vb.) saklanan modeller.

    Verileri bir görünüme geçirmek için veya bir görünümden veri almak için tam tersi için kullanılan modeller. Bu tür modellere aynı zamanda denir sunum modelleri

    Ara hesaplamalar için yardımcı modeller

Kural olarak, projede modelleri saklamak için ayrı bir Modeller klasörü oluşturulur. Görünüm modelleri genellikle ViewModels adı verilen ayrı bir klasöre yerleştirilir.

Varsayılan olarak yerleşik kimlik doğrulamaya sahip bir ASP.NET MVC Core projesi bu klasörleri zaten içerir ve gerekli tüm modelleri içerir. Ancak yerleşik kimlik doğrulaması olmadan bir proje oluşturursak bu klasörler eksik olur. Ve buna göre bu klasörleri manuel olarak eklememiz gerekiyor. Ancak yine de, modelleri saklamak için klasörleri tam olarak Modeller ve ViewModels olarak adlandırmamız gerekmediğini vurgulayacağım. Bunlar herhangi bir isme sahip dizinler olabilir, modelleri projenin köküne yerleştirebilirsiniz, ancak daha yaygın olan stil Modeller ve ViewModels adlarıdır.

Örneğin Web Uygulaması türünde yeni bir ASP.NET Core projesi oluşturalım ve onu ModelsApp olarak adlandıralım. Öncelikle modelleri saklamak için projeye Models klasörünü ekleyelim.

Ve buna yeni bir Company sınıfı yerleştireceğiz:

Genel sınıf Şirket ( public int Id ( get; set; ) public string Ad ( get; set; ) public string Ülke ( get; set; ))

Ayrıca Telefon sınıfını Modeller klasörüne ekleyin

Genel sınıf Telefon ( public int Id ( get; set; ) public string Ad ( get; set; ) public Şirket Üreticisi ( get; set; ) public ondalık Fiyat ( get; set; ) )

Bu modeller kullanacağımız verileri açıklayacaktır. Bu veriler veritabanında saklanabilir, ancak basitlik açısından onu denetleyicide tanımlayacağız. HomeController’ı şu şekilde değiştirelim:

System.Collections.Generic'in Kullanımı; System.Linq'i kullanarak; Microsoft.AspNetCore.Mvc kullanarak; ModelsApp.Models'ı kullanarak; // model ad alanı ad alanı ModelsApp.Controllers ( genel sınıf HomeController: Controller ( Liste şirketler; Telefonlar; public HomeController() ( Şirket apple = yeni Şirket ( Kimlik = 1, Ad = "Apple", Ülke=ABD" ); Şirket microsoft = yeni Şirket ( Kimlik = 2, Ad = "Microsoft", Ülke=ABD" ) ; Şirket google = yeni Şirket ( Kimlik = 3, Ad = "Google", Ülke = "ABD"); (elma, microsoft, google);

telefonlar = yeni Liste

( yeni Telefon ( Id=1, Üretici= apple, Name="iPhone 6S", Fiyat=56000 ), yeni Telefon ( Id=2, Üretici= apple, Name="iPhone 5S", Fiyat=41000 ), yeni Telefon ( Id=3, Üretici= microsoft, Name=”Lumia 550”, Fiyat=9000 ), yeni Telefon ( Id=4, Üretici= microsoft, Name=”Lumia 950”, Fiyat=40000), yeni Telefon ( Id=5, Üretici= google, Name="Nexus 5X", Fiyat=30000 ), yeni Telefon ( Id=6, Üretici= google, Name="Nexus 6P", Fiyat=50000 ) ); ) public IActionResult Index() ( return Görünüm(telefonlar); ) )) Model nesnesinin listesi View() yöntemi kullanılarak görünüme aktarılır.

Ve sonunda görünümü değiştiriyoruz Index.cshtml

tüm nesnelerin çıktısını alacak: }
@using ModelsApp.Models @model IEnumerable@( ViewData["Başlık"] = "Ana Sayfa"; )@foreach (Modelde Telefon p) (

@p.Name

@p.Üretici?.Ad

@p.Fiyat

Tıpta bu klinik ve hematolojik sendromun konjenital veya edinsel olabilen çeşitli türleri vardır. Genç kadınların adet döngüsü sırasında çok fazla kan kaybı olması nedeniyle kırmızı kan hücresi eksikliğine karşı duyarlı oldukları bilimsel olarak kanıtlanmıştır. Yaşlılarda yetersiz beslenme ve kronik hastalıklara bağlı olarak anemi gelişir. Böylece anemi, vücutta mevcut bozuklukların ikincil bir belirtisi olarak hareket eder.

Hamilelik sırasında ortaya çıkan bazı hastalık türleri normal kabul edilir, ancak aneminin farklı yaş gruplarındaki hastalar için neden tehlikeli olduğunu bilmeniz gerekir. Uzun süreli hipoksi ile iç metabolik süreçler bozulur, toksik ürünler birikir ve böbrekler, karaciğer, kalp ve akciğerlerde fonksiyon bozuklukları gelişir. Hasta, yavaş yavaş kronik bir forma dönüşecek olan hastalığın varlığını uzun süre fark etmeyebilir. Sonuçta nefes darlığı, kol ve bacaklarda şişlik, kalp atışında hızlanma, performansta azalma şikayetleri ortaya çıkar. Laboratuvar testlerine girmeden önce doktorlar, patogenezi bilinmeyen aneminin varlığını varsayarlar.

Hastalığın etiyolojisi

Hastalarda çeşitli faktörlerin tanımlanmasına dayanarak anemi tanısı konur. Aneminin aşağıdaki ana nedenleri bilinmektedir:

  1. Ağır adet döngüsü sırasında büyük miktarda kan kaybı, kötü huylu kolon kanserinin arka planında derin yaralar, bağırsak ülserleri.
  2. Kemik iliğinde retikülositler (kırmızı kan hücrelerinin öncüleri) üreten eritropoietin üretiminin azaldığı böbrek fonksiyon bozukluğu.
  3. Hastalık birinci derece akrabalardan kalıtsal olabilir.
  4. Kötü beslenme, B12 ve C vitaminleri, folik asit, demir eksikliği.
  5. Anemi, kronik patolojilerin arka planında gelişir: Crohn hastalığı, AIDS, HIV, romatoid artrit, karsinom.
  6. Hematopoietik sistemdeki hasar belirtilerinin tezahürü de psikosomatik ile ilişkilidir. Anemi, kişinin kendini aşırı eleştirdiğine ve hayatından memnun olmadığına dair vücuttan gelen spesifik bir sinyal görevi görür. Bu durumda psikologlar, yeni yolun ve düşüncelerin bir tehdit oluşturmadığını ve tamamen güvenli olduğunu zihinsel olarak kendinize tekrarlamanızı önerir.
  7. Bazı insanların vücutları B12 vitaminini ememez, bu da aneminin gelişmesine yol açar. Besinlerin emilimindeki azalma süt ürünleri, katı gıdalar ve çiğ tahıllardan kaynaklanabilir.
  8. Hastalık olmadığında kırmızı kan hücreleri 100 gün yaşar. Dalak hasar gördüğünde hemoliz gelişir ve bu da işleyişini bozar.
  9. Etanol beyin aktivitesi için toksiktir ve kırmızı kan hücrelerinin üretimini yavaşlatır. Bu faktörler bir araya geldiğinde, kronik alkoliklerde anemi gelişme riski önemli ölçüde artar.
  10. İç demir rezervlerinin tükenmesi çoğunlukla aşırı kiloyla mücadele eden ve katı diyetlere bağlı kalan kadınlarda tetiklenir.
  11. Anemi sıklıkla ameliyat öncesi dönemde kendini gösterir. Bu nedenle cerrahın, kardiyovasküler sistem üzerindeki yükü azaltmak için müdahalenin riskini tam olarak değerlendirmesi ve hemoglobin düzeyini normale çıkarması gerekir.


Makaleyi beğendin mi? Arkadaşlarınızla paylaşın!