Model domain anemia bukanlah anti-pola, tetapi arsitektur berdasarkan prinsip SOLID. Desain Berbasis Domain: Pembuatan Domain

Anemia - halaman bahasa Inggris

Anemia

Situs web ini menyajikan informasi pasien mengenai berbagai jenis anemia. Situs ini dibuat di Rusia oleh ahli hematologi - dokter yang menangani penyakit darah
Jika Anda memiliki pertanyaan mengenai sumber daya ini, silakan hubungi kami melalui email atau telepon (+7-495-741-06-41)

Jika Anda menderita anemia, orang mungkin mengatakan Anda mengalami kelelahan darah. Itu karena anemia – suatu kondisi di mana tidak terdapat cukup sel darah merah yang sehat untuk membawa oksigen yang cukup ke jaringan Anda – dapat membuat Anda merasa lelah.

Ada banyak bentuk anemia, masing-masing mempunyai penyebabnya sendiri. Anemia dapat bersifat sementara atau jangka panjang, dan dapat berkisar dari ringan hingga berat.

Anemia adalah kelainan darah yang umum. Wanita dan orang-orang dengan penyakit kronis mempunyai risiko lebih tinggi terkena kondisi ini.

Jika Anda mencurigai Anda menderita anemia, temui dokter Anda. Anemia bisa menjadi tanda penyakit serius. Perawatan anemia berkisar dari mengonsumsi suplemen hingga menjalani prosedur medis. Anda mungkin dapat mencegah beberapa jenis anemia dengan mengonsumsi makanan yang sehat dan bervariasi.

Gejala

Gejala utama sebagian besar jenis anemia adalah kelelahan. Gejala anemia lainnya meliputi:

  • Kelemahan
  • Kulit pucat
  • Detak jantung yang cepat atau tidak teratur
  • Sesak napas
  • Nyeri dada
  • Pusing
  • Masalah kognitif
  • Mati rasa atau dingin di ekstremitas Anda
  • Sakit kepala

Awalnya, anemia bisa sangat ringan sehingga tidak disadari. Namun tanda dan gejalanya meningkat seiring dengan memburuknya kondisi.

Penyebab

Darah terdiri dari cairan yang disebut plasma dan sel. Mengambang di dalam plasma ada tiga jenis sel darah:

  • Sel darah putih. Sel darah ini melawan infeksi.
  • Trombosit. Sel darah ini membantu pembekuan darah Anda setelah dipotong.
  • Sel darah merah (eritrosit). Sel darah ini membawa oksigen dari paru-paru Anda, melalui aliran darah, ke otak Anda dan organ serta jaringan lainnya. Tubuh Anda membutuhkan pasokan darah beroksigen agar dapat berfungsi. Darah beroksigen membantu memberikan energi pada tubuh Anda dan kulit Anda bersinar sehat.

Sel darah merah mengandung hemoglobin - protein merah kaya zat besi yang memberi warna merah pada darah. Hemoglobin memungkinkan sel darah merah membawa oksigen dari paru-paru ke seluruh bagian tubuh, dan membawa karbon dioksida dari bagian tubuh lain ke paru-paru sehingga dapat dihembuskan.

Sebagian besar sel darah, termasuk sel darah merah, diproduksi secara teratur di sumsum tulang Anda – bahan berwarna merah dan kenyal yang ditemukan di dalam rongga banyak tulang besar Anda. Untuk memproduksi hemoglobin dan sel darah merah, tubuh Anda membutuhkan zat besi, protein dan vitamin dari makanan yang Anda makan.

Anemia adalah suatu keadaan dimana jumlah sel darah merah atau hemoglobin di dalamnya berada di bawah normal. Saat Anda menderita anemia, tubuh Anda memproduksi terlalu sedikit sel darah merah yang sehat, kehilangan terlalu banyak sel darah merah, atau menghancurkannya lebih cepat daripada yang dapat digantikan. Akibatnya, darah Anda kekurangan sel darah merah untuk membawa oksigen ke jaringan Anda — membuat Anda lelah. Jenis anemia yang umum dan penyebabnya meliputi:

    Anemia defisiensi besi. Bentuk anemia paling umum ini menyerang sekitar satu dari lima wanita, separuh wanita hamil, dan 3 persen pria di Amerika Serikat. Penyebabnya adalah kekurangan unsur zat besi dalam tubuh Anda. Sumsum tulang Anda membutuhkan zat besi untuk membuat hemoglobin. Tanpa zat besi yang cukup, tubuh Anda tidak dapat memproduksi cukup hemoglobin untuk sel darah merah.

    Salah satu cara tubuh Anda mendapatkan zat besi yang dibutuhkan adalah ketika sel darah mati – zat besi di dalamnya didaur ulang dan digunakan untuk memproduksi sel darah baru. Jadi, jika Anda kehilangan darah, Anda kehilangan zat besi. Wanita dengan menstruasi berat yang kehilangan banyak darah setiap bulannya saat menstruasi berisiko mengalami anemia defisiensi besi. Kehilangan darah yang lambat dan kronis dari sumber di dalam tubuh – seperti maag, polip usus besar atau bahkan kanker usus besar – juga dapat menyebabkan hilangnya zat besi dan anemia defisiensi besi.

    Tubuh Anda juga mendapat zat besi dari makanan yang Anda makan. Pola makan yang miskin zat besi dapat menyebabkan anemia ini. Pada wanita hamil, pertumbuhan janin dapat menguras simpanan zat besi ibu, sehingga menyebabkan anemia defisiensi besi.

  • Anemia defisiensi vitamin. Selain zat besi, tubuh Anda membutuhkan folat dan vitamin B-12 untuk memproduksi sel darah merah sehat dalam jumlah yang cukup. Pola makan yang kekurangan nutrisi ini dan nutrisi penting lainnya dapat menyebabkan penurunan produksi sel darah merah. Orang yang memiliki kelainan usus yang mempengaruhi penyerapan nutrisi rentan mengalami anemia jenis ini. Beberapa orang tidak dapat menyerap vitamin B-12 karena berbagai alasan dan mengalami anemia defisiensi vitamin B-12, yang kadang-kadang disebut anemia pernisiosa. Anemia defisiensi vitamin termasuk dalam kelompok anemia yang disebut anemia megaloblastik, dimana sumsum tulang menghasilkan sel darah merah yang besar dan tidak normal.
  • Anemia penyakit kronis. Penyakit kronis tertentu – seperti kanker, rheumatoid arthritis, penyakit Crohn dan penyakit inflamasi kronis lainnya – dapat mengganggu produksi sel darah merah, sehingga menyebabkan anemia kronis. Gagal ginjal juga dapat menjadi penyebab anemia eritropoietin, yang merangsang sumsum tulang untuk memproduksi sel darah merah. Kekurangan eritropoietin, yang dapat disebabkan oleh gagal ginjal atau efek samping kemoterapi, dapat menyebabkan kekurangan sel darah merah.
  • Anemia aplastik. Ini adalah anemia yang mengancam jiwa yang disebabkan oleh penurunan kemampuan sumsum tulang untuk memproduksi ketiga jenis sel darah – sel darah merah, sel darah putih, dan trombosit. Seringkali, penyebab anemia aplastik tidak diketahui, namun penyebab anemia aplastik tidak diketahui. Ini diyakini sering kali merupakan penyakit autoimun. Beberapa faktor yang dapat menyebabkan anemia jenis ini antara lain kemoterapi, terapi radiasi, racun lingkungan, kehamilan, dan lupus.
  • Berbagai penyakit, seperti leukemia dan myelodysplasia, suatu kondisi pra-leukemia, dapat menyebabkan anemia dengan mempengaruhi produksi darah di sumsum tulang. Dampak dari jenis kanker dan kelainan serupa kanker ini bervariasi, mulai dari perubahan ringan pada produksi darah hingga terhentinya proses pembuatan darah secara total dan mengancam jiwa. Selain itu, kanker darah atau sumsum tulang lainnya, seperti multiple myeloma, kelainan mieloproliferatif, dan limfoma, dapat menyebabkan anemia.
  • Anemia hemolitik. Kelompok anemia ini berkembang ketika sel darah merah dihancurkan lebih cepat daripada kemampuan sumsum tulang untuk menggantikannya. Penyakit darah tertentu dapat menyebabkan peningkatan kerusakan sel darah merah. Gangguan autoimun dapat menyebabkan tubuh Anda memproduksi antibodi terhadap sel darah merah, sehingga menghancurkannya sebelum waktunya. Obat-obatan tertentu, seperti antibiotik yang digunakan untuk mengobati infeksi, juga dapat menghancurkan sel darah merah. Anemia hemolitik dapat menyebabkan kulit menguning (ikterus) dan pembesaran limpa.
  • Anemia sel sabit. Anemia yang diturunkan dan terkadang serius ini, yang terutama menyerang orang-orang keturunan Afrika dan Arab, disebabkan oleh cacatnya bentuk hemoglobin yang memaksa sel darah merah berbentuk bulan sabit (sabit) yang tidak normal. Sel darah merah yang bentuknya tidak beraturan ini mati sebelum waktunya, sehingga mengakibatkan kekurangan sel darah merah yang kronis. Sel darah merah berbentuk sabit juga dapat menghalangi aliran darah melalui pembuluh darah kecil di tubuh, sehingga menimbulkan gejala lain yang seringkali menyakitkan.
  • Anemia lainnya. Ada beberapa bentuk anemia lain yang lebih jarang, seperti talasemia dan anemia yang disebabkan oleh kerusakan hemoglobin.

Terkadang penyebab anemia tidak dapat diidentifikasi.

Faktor risiko

Faktor-faktor berikut menempatkan Anda pada peningkatan risiko anemia:

  • Pola makan yang buruk. Siapa pun – tua atau muda – yang pola makannya selalu rendah zat besi dan vitamin, terutama folat, berisiko terkena anemia. Tubuh Anda membutuhkan zat besi, protein dan vitamin untuk menghasilkan jumlah sel darah merah yang cukup.
  • Gangguan usus. Memiliki kelainan usus yang mempengaruhi penyerapan nutrisi di usus kecil – seperti penyakit Crohn dan penyakit celiac – membuat Anda berisiko mengalami anemia. Operasi pengangkatan atau pembedahan pada bagian usus kecil tempat nutrisi diserap dapat menyebabkan nutrisi defisiensi dan anemia.
  • Haid. Secara umum, perempuan mempunyai risiko lebih besar terkena anemia defisiensi besi dibandingkan laki-laki. Itu karena wanita kehilangan darah – dan juga zat besi – setiap bulan selama menstruasi.
  • Kehamilan. Wanita hamil berisiko lebih tinggi mengalami anemia defisiensi besi karena simpanan zat besi mereka harus melayani peningkatan volume darah ibu serta menjadi sumber hemoglobin untuk pertumbuhan janin.
  • Kondisi kronis. Misalnya, jika Anda menderita kanker, gagal ginjal atau hati, atau kondisi kronis lainnya, Anda mungkin berisiko terkena apa yang disebut anemia penyakit kronis. Kondisi ini dapat menyebabkan kekurangan sel darah merah. Kehilangan darah yang lambat dan kronis dari maag atau sumber lain di dalam tubuh dapat menghabiskan simpanan zat besi di tubuh Anda, yang menyebabkan anemia defisiensi besi.
  • Sejarah keluarga. Jika keluarga Anda memiliki riwayat anemia bawaan, Anda juga mungkin berisiko lebih tinggi mengalami kondisi tersebut.

Infeksi tertentu, penyakit darah dan gangguan autoimun, paparan bahan kimia beracun, dan penggunaan obat-obatan tertentu dapat mempengaruhi produksi sel darah merah dan menyebabkan anemia. Orang lain yang berisiko mengalami anemia adalah penderita diabetes, orang yang bergantung pada alkohol (alkohol mengganggu penyerapan asam folat) dan orang yang menjalankan pola makan vegetarian ketat, yang mungkin tidak mendapatkan cukup zat besi atau vitamin B-12 di dalamnya. diet.

Kapan harus mencari nasihat medis

Temui dokter Anda jika Anda merasa lelah karena alasan yang tidak dapat dijelaskan, terutama jika Anda berisiko mengalami anemia. Beberapa anemia, seperti anemia defisiensi besi, sering terjadi. Namun jangan berasumsi kalau lelah pasti anemia. Kelelahan mempunyai banyak penyebab selain anemia.

Beberapa orang mengetahui bahwa hemoglobin mereka rendah, yang menandakan anemia, ketika mereka akan mendonorkan darah. Hemoglobin rendah mungkin merupakan masalah sementara yang dapat diatasi dengan mengonsumsi lebih banyak makanan kaya zat besi atau mengonsumsi multivitamin yang mengandung zat besi. Namun, ini juga bisa menjadi tanda peringatan kehilangan darah di tubuh yang mungkin menyebabkan Anda kekurangan zat besi. Jika Anda diberitahu bahwa Anda tidak dapat mendonorkan darah karena rendahnya hemoglobin, tanyakan kepada dokter Anda apakah Anda harus khawatir.

Jika Anda memiliki riwayat keluarga dengan anemia bawaan, seperti anemia sel sabit, bicarakan dengan dokter Anda dan mungkin konselor genetik tentang risiko Anda dan risiko apa yang dapat Anda wariskan kepada anak-anak Anda.

Tes dan diagnosis

Dokter mendiagnosis anemia dengan bantuan riwayat kesehatan, pemeriksaan fisik dan tes darah, termasuk hitung darah lengkap (CBC). Tes darah ini mengukur kadar sel darah merah dan hemoglobin dalam darah Anda. Beberapa darah Anda juga mungkin diperiksa di bawah mikroskop untuk mempelajari ukuran, bentuk dan warna sel darah merah Anda, yang mungkin mengindikasikan diagnosis. Misalnya, pada anemia defisiensi besi, sel darah merah berukuran lebih kecil dan warnanya lebih pucat dari biasanya. Pada anemia defisiensi vitamin, sel darah merah membesar dan jumlahnya lebih sedikit.

Jika Anda didiagnosis menderita anemia, dokter Anda mungkin memerintahkan tes tambahan untuk menentukan penyebab yang mendasarinya. Misalnya, anemia defisiensi besi dapat disebabkan oleh pendarahan kronis dari tukak yang diketahui atau tidak diketahui, polip jinak di usus besar, kanker usus besar, tumor, atau gagal ginjal. Dokter Anda mungkin menguji kondisi ini dan kondisi lain yang mungkin mendasari anemia.

Kadang-kadang, sampel sumsum tulang Anda mungkin perlu diperiksa untuk mendiagnosis anemia.

Komplikasi

Anemia yang cukup parah dapat mengganggu kemampuan Anda dalam melakukan tugas sehari-hari. Anda mungkin terlalu lelah untuk bekerja atau bermain. Meskipun anemia sering kali dapat diobati, diperlukan waktu beberapa minggu hingga bulan agar kadar sel darah merah kembali normal setelah pengobatan. Tanyakan kepada dokter Anda apa yang diharapkan dari pengobatan.

Jika Anda telah didiagnosis menderita anemia - sering kali terdeteksi saat tes darah rutin - tanyakan kepada dokter Anda pengobatan apa yang diperlukan. Kemudian pastikan untuk melanjutkan pengobatan, meskipun Anda segera mulai merasa lebih baik. Jika tidak ditangani, anemia dapat menyebabkan detak jantung yang cepat atau tidak teratur – aritmia. Jantung Anda harus memompa lebih banyak darah untuk mengkompensasi kekurangan oksigen dalam darah saat Anda menderita anemia. Hal ini bahkan dapat menyebabkan gagal jantung kongestif. Anemia pernisiosa yang tidak diobati dapat menyebabkan kerusakan saraf dan penurunan fungsi mental, karena vitamin B-12 adalah salah satu penyebab utama anemia. penting tidak hanya untuk kesehatan sel darah merah tetapi juga untuk fungsi saraf dan otak yang optimal.

Beberapa anemia bawaan, seperti anemia sel sabit, bisa menjadi serius dan menyebabkan komplikasi yang mengancam jiwa. Kehilangan banyak darah dengan cepat menyebabkan anemia akut, parah, dan bisa berakibat fatal.

Perawatan dan obat-obatan

Pengobatan anemia tergantung penyebabnya:

  • Anemia defisiensi besi. Bentuk anemia ini diobati dengan suplemen zat besi, yang mungkin perlu Anda konsumsi selama beberapa bulan atau lebih. Jika penyebab utama kekurangan zat besi adalah kehilangan darah – selain karena menstruasi – sumber pendarahan harus ditemukan dan dihentikan. Ini mungkin melibatkan pembedahan.
  • Anemia defisiensi vitamin. Anemia pernisiosa diobati dengan suntikan – seringkali suntikan seumur hidup – vitamin B-12. Anemia defisiensi asam folat diobati dengan suplemen asam folat.
  • Anemia penyakit kronis. Tidak ada pengobatan khusus untuk anemia jenis ini. Dokter fokus pada pengobatan penyakit yang mendasarinya. Suplemen zat besi dan vitamin umumnya tidak membantu anemia jenis ini. Namun, jika gejalanya menjadi parah, transfusi darah atau suntikan eritropoietin sintetis, hormon yang biasanya diproduksi oleh ginjal, dapat membantu merangsang produksi sel darah merah dan mengurangi rasa lelah.
  • Anemia aplastik. Perawatan untuk anemia serius ini mungkin termasuk transfusi darah untuk meningkatkan kadar sel darah merah. Anda mungkin memerlukan transplantasi sumsum tulang jika sumsum tulang Anda sakit dan tidak dapat membuat sel darah yang sehat. Anda mungkin memerlukan obat penekan kekebalan untuk mengurangi respons sistem kekebalan Anda dan memberikan kesempatan pada sumsum tulang yang ditransplantasikan untuk mulai berfungsi kembali.
  • Anemia yang berhubungan dengan penyakit sumsum tulang. Pengobatan berbagai penyakit ini dapat berkisar dari pengobatan sederhana, kemoterapi, hingga transplantasi sumsum tulang. Pengobatan anemia jenis ini biasanya melibatkan konsultasi dengan dokter spesialis darah (hematologi).
  • Anemia hemolitik. Mengelola anemia hemolitik termasuk menghindari obat-obatan yang dicurigai, mengobati infeksi terkait, dan mengonsumsi obat yang menekan sistem kekebalan Anda, yang mungkin menyerang sel darah merah Anda. Pengobatan jangka pendek dengan steroid atau gamma globulin dapat membantu menekan serangan sistem kekebalan terhadap sel darah merah Anda. Jika kondisi ini menyebabkan limpa membesar, limpa Anda mungkin perlu diangkat. Limpa - organ kecil di bawah Anda tulang rusuk di sisi kiri - menyaring dan menyimpan sel darah merah yang rusak. Anemia hemolitik tertentu dapat menyebabkan limpa membesar dengan sel darah merah yang rusak.
  • Anemia sel sabit. Perawatan untuk anemia yang tidak dapat disembuhkan ini mungkin termasuk pemberian oksigen, obat pereda nyeri, dan cairan oral dan intravena untuk mengurangi rasa sakit dan mencegah komplikasi. Dokter juga biasa menggunakan transfusi darah, suplemen asam folat, dan antibiotik. Transplantasi sumsum tulang mungkin merupakan pengobatan yang efektif dalam beberapa keadaan. Obat kanker yang disebut hidroksiurea (Droxia, Hydrea) juga digunakan untuk mengobati anemia sel sabit pada orang dewasa.

Pencegahan

Banyak jenis anemia yang tidak dapat dicegah. Namun, Anda dapat membantu menghindari anemia defisiensi besi dan anemia defisiensi vitamin dengan mengonsumsi makanan sehat dan bervariasi yang mencakup makanan kaya zat besi, folat, dan vitamin B-12.

Sumber zat besi terbaik adalah daging sapi dan daging lainnya. Makanan lain yang kaya zat besi termasuk kacang-kacangan, lentil, sereal yang diperkaya zat besi, sayuran berdaun hijau tua, buah kering, kacang-kacangan dan biji-bijian. Folat, dan bentuk sintetiknya, asam folat, dapat ditemukan dalam jus jeruk dan buah-buahan, sayuran berdaun hijau tua, kacang-kacangan, dan sereal sarapan yang diperkaya. Vitamin B-12 banyak terdapat pada daging dan produk susu. Makanan yang mengandung vitamin C, seperti buah jeruk, membantu meningkatkan penyerapan zat besi.

Mengonsumsi banyak makanan yang mengandung zat besi sangat penting terutama bagi orang-orang yang memiliki kebutuhan zat besi yang tinggi, seperti anak-anak – zat besi dibutuhkan selama masa pertumbuhan – serta wanita hamil dan menstruasi. Asupan zat besi yang cukup juga penting bagi bayi, vegetarian ketat, dan pelari jarak jauh.

Dokter mungkin akan meresepkan suplemen zat besi atau multivitamin yang mengandung zat besi untuk orang dengan kebutuhan zat besi yang tinggi. Namun suplemen zat besi hanya cocok digunakan ketika Anda membutuhkan lebih banyak zat besi daripada yang dapat disediakan oleh pola makan seimbang. Jangan berasumsi jika Anda lelah maka Anda hanya perlu mengonsumsi suplemen zat besi. Membebani tubuh Anda dengan zat besi secara berlebihan bisa berbahaya.

Informasi dari mayoclinic digunakan dalam persiapan halaman ini

Model domain anemia

Jika objek domain Anda adalah wadah data dan yang dimilikinya hanyalah properti get/set, maka Anda menggunakan model domain anemia. Keunikannya adalah objek domain tidak memiliki perilaku.

Tugas

Skenario penggunaan, misalnya, toko online:

  1. Pengguna yang telah mendaftar di sistem menerima email dengan tautan untuk mengonfirmasi pendaftaran. Dengan mengklik link tersebut, dia mengkonfirmasi pendaftarannya dan dapat masuk ke sistem menggunakan nama pengguna dan kata sandinya.
  2. Pengguna dapat melakukan pemesanan
  3. Pada saat yang sama, di akun pribadinya dia melihat jumlah total yang dia pesan. Jumlah total pesanan saat ini tidak memperhitungkan pesanan yang sudah selesai

Mari kita mulai dengan model data anemia. Kami akan memiliki kelas Akun:

Akun kelas publik ( Id int publik ( get; set; ) bool publik IsApproved ( get; set; ) DateTime publik? ActivationDate ( get; set; ) Daftar publik Pesanan (dapatkan; setel;))

Dan kelas Pesanan:

Pesanan kelas publik ( Id int publik ( dapatkan; set; ) Harga int publik ( dapatkan; set; ) Akun Akun publik ( dapatkan; set; ) public bool IsComplete ( dapatkan; set; ) )

Pelaksanaan

Setiap skenario kerja cukup sederhana untuk diterapkan:

Skenario #1. Aktivasi pengguna

Account.ActivationDate = DateTime.Sekarang; akun.IsApproved = true;

Skenario #2. Menambahkan pesanan

Akun.Pesanan.Tambahkan(pesanan); pesanan.Akun = akun;

Skenario #3. Menghitung jumlah total

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

Pertanyaan utamanya adalah: dimana kode ini akan ditempatkan?

Solusi #0

Ada solusi paling sederhana dan salah. Kami akan menulis kode ini langsung di handler pada halaman aspx atau WinForms:

Kelas parsial publik Default: Halaman ( protected void Page_Load(pengirim objek, EventArgs e) ( // memilih objek akun AccountOrdersSumLabel.Text = account.Orders .Where(order => order.IsComplete == false) .Sum(order => order .Price); ) protected void AddOrderButton_Click(pengirim objek, EventArgs e) ( // memilih objek akun account.Orders.Add(order); order.Account = akun; // menyimpan objek akun ) )

Semuanya akan baik-baik saja selama Anda dapat menambahkan produk hanya dari formulir ini, dan jumlah total dihitung hanya menggunakan rumus ini. Masalah akan dimulai ketika formulir lain memerlukan fungsi yang sama. Anda harus menduplikasi kodenya. Kemudian, jika logika pengoperasian berubah, Anda harus memperbaikinya di semua bagian belakang kode.

Adalah bodoh untuk menduplikasi kode dan kemudian menghabiskan banyak waktu memperbaiki satu kebutuhan bisnis yang berubah.

Solusi #1

Namun, kami tidak akan menduplikasi. Kami akan memasukkan kode untuk mengimplementasikan skrip kami ke dalam kelas dengan nama nyaring AccountHelper atau AccountManager. Kemungkinan besar kelas ini tidak memiliki kewarganegaraan dan karenanya statis.

Kami mendapatkan:

AccountHelper kelas statis publik ( public static void Activate(Akun akun) ( akun.ActivationDate = DateTime.Now; akun.IsApproved = true; ) public static void AddOrder(Akun akun, Pesanan pesanan) ( akun.Orders.Add(pesanan); order.Account = akun; ) public static int HitungOrdersSum(Akun akun) ( kembalikan akun.Orders .Where(order => order.IsComplete == false) .Sum(order => order.Price); ) )

Masalah dengan kelas yang disebut *Helper atau *Manager adalah mereka dapat melakukan apapun yang mereka inginkan. Nama abstraknya memungkinkan kelas Account untuk "membantu" melakukan hal yang sangat berbeda. Kelas-kelas seperti itu menjadi.

Kelas-kelas ini memiliki banyak kelemahan. Misalnya, sulit untuk menguji kode yang menggunakan kelas-kelas ini karena bersifat statis. Mereka membuat kode tersebut sangat digabungkan karena... melanggar. Seringkali, seorang Pembantu memanggil Pembantu lainnya. Hasilnya, grafik ketergantungan menyerupai jaringan koneksi.

Selain itu, solusi ini memiliki semua kelemahan dari solusi berikutnya.

Solusi #2

Antarmuka publik IAccountService ( void Activate(Akun akun); void AddOrder(Akun akun, Pesanan pesanan); int HitungOrdersSum(Akun Akun); ) Layanan Akun kelas publik: IAccountService ( public void Activate(Akun akun) ( akun.ActivationDate = DateTime.Now ; akun.IsApproved = true; ) public void AddOrder(Akun akun, Pesanan pesanan) ( akun.Orders.Add(order); order.Account = akun; ) public int HitungOrdersSum(Akun akun) ( kembalikan akun.Orders.Where( pesanan => pesanan.IsComplete == false) .Sum(pesanan => pesanan.Harga) )

Kami menemukan konektivitas dan pengujian. Sudah selangkah lebih maju. Tapi saya melihat dua masalah lagi.

Akan ada cukup banyak fungsi seperti AddOrder dan HitungOrdersSum. Setelah setengah tahun pengembangan, antarmuka IAccountService akan berkembang menjadi 40-50 fungsi. “Kontaminasi” pada antarmuka bisa saja bertahan jika bukan karena masalah kedua.

Anda dapat menulis "aktivasi Anda sendiri" dari pengguna di mana saja dalam kode, melewati layanan. Misalnya, ambil objek Akun dari database, setel bidang IsApproved ke true dan pada saat yang sama lupa memperbarui bidang ActivationDate. Hal yang sama berlaku untuk skenario penambahan pesanan. Anda dapat memanggil fungsi Tambah pada properti Pesanan di mana saja dan lupa menyetel kolom Akun untuk pesanan yang ditambahkan. Hal ini membuat sistem menjadi tidak stabil. API aplikasi tidak berdaya melawan pengguna sistem. Dengan pendekatan ini, kita hanya bisa berharap bahwa programmer akan menemukan fungsi yang dia butuhkan di IAccountService dan tidak akan menciptakan pendekatannya sendiri.

Solusi #3

Mari kita masukkan semua fungsi ini ke dalam objek domain Akun itu sendiri. Perhatikan bagaimana pengubah akses untuk bidang objek telah berubah:

Akun kelas publik (Daftar baca pribadi pesanan; Akun publik() ( pesanan = Daftar baru ();

Sekarang domain aplikasi kami memberi pengguna API siap pakai yang tidak memerlukan Pembantu atau layanan. Selain itu, kami melindungi pengguna dari kesalahan. Dia tidak lagi dapat mengaktifkan Akun hanya dengan mengatur IsApproved fungsi akan mengisi kolom yang diperlukan itu sendiri.

Kesimpulan

Jadi, jika suatu fungsi beroperasi pada data dan objek yang terletak di dalam domain, kemungkinan besar fungsi tersebut harus dibiarkan di dalam domain. Selain keandalan kode, Anda juga akan membuat bahasa khusus domain untuk aplikasi Anda.

Martin Fowler dalam karya klasiknya "Pola Aplikasi Perusahaan" ( Pola arsitektur aplikasi perusahaan) beberapa pendekatan untuk mengatur logika bisnis telah diidentifikasi.

  1. Skenario transaksional- logika bisnis dibagi menjadi beberapa prosedur, yang masing-masing sesuai dengan permintaan spesifik yang berasal dari lapisan presentasi.
  2. Modul tabel- logika bisnis, seperti pada versi sebelumnya, dijelaskan dalam gaya prosedural, namun manipulasi dengan setiap tabel ditempatkan di kelas terpisah, yang membuat kode lebih terstruktur.
  3. Model domain- pendekatan yang paling sulit untuk diterapkan, tetapi memiliki sejumlah keunggulan ketika menggambarkan logika yang kompleks. Intinya adalah bahwa objek-objek yang sesuai dengan objek-objek bidang studi dialokasikan. Hubungan antar objek tersebut dijelaskan, sesuai dengan hubungan antar objek di dunia nyata. Pada saat yang sama, solusi terhadap masalah teknologi seperti penyimpanan, keamanan, dan manajemen transaksi biasanya dilakukan di luar lapisan logika bisnis.

    Ada dua opsi untuk pendekatan ini:

    • Model Domain Kaya- data dan perilaku dienkapsulasi dalam objek domain.
    • Model domain anemia- hanya data yang dienkapsulasi dalam objek domain, sementara perilaku ditransfer ke lapisan layanan yang terletak di atas lapisan domain.
Jika pilihan antara templat mana - skrip transaksional, modul tabel, atau model domain - yang akan digunakan, biasanya tidak menimbulkan masalah, karena Jika kriteria penerapannya dijelaskan dengan jelas, maka jawaban atas pertanyaan perlu atau tidaknya menggunakan model domain anemia tidak begitu jelas. Di satu sisi, para ahli teori pendekatan berorientasi objek menganggap pola ini sebagai “anti-pola”; di sisi lain, pola ini telah mendapatkan popularitas dalam praktik pengembangan aplikasi perusahaan, yang menunjukkan adanya beberapa keuntungan. Mari kita coba memahami masalah ini.

Templat Model Domain

Sebelum membahas kelebihan dan kekurangan opsi tertentu, Anda perlu melihat template secara keseluruhan. Seperti disebutkan di atas, inti dari pola ini adalah terciptanya jaringan objek-objek yang terhubung, yang masing-masing merupakan model dari satu objek di dunia nyata. Pada saat yang sama, solusi ini memiliki sejumlah keunggulan yang menyederhanakan implementasi logika kompleks: programmer memiliki akses ke semua prinsip paradigma OOP, seperti enkapsulasi, pewarisan, dan polimorfisme. Pada saat yang sama, struktur kelas mencerminkan struktur dunia nyata, yang menyederhanakan interaksi sepanjang garis “programmer-analis”. Orang-orang di tim dapat berkomunikasi dalam bahasa yang sama. Untuk mengimplementasikan model, Anda dapat menggunakan pola desain yang sudah dikenal. Pola ini juga memungkinkan Anda untuk mengimplementasikan interaksi dengan penyimpanan data yang transparan ke lapisan logika bisnis - objek yang memodelkan area subjek tidak mengetahui apa pun tentang fakta bahwa objek tersebut sebenarnya disimpan, misalnya, dalam database.

Keuntungan penting juga adalah kenyataan bahwa Model Domain memungkinkan Anda menggunakan kembali logika bisnis aplikasi. Berbeda dengan pola Skrip Transaksional dan Modul Tabel, logika bisnis tidak terikat pada permintaan dari lapisan presentasi. Oleh karena itu, opsi lain untuk lapisan presentasi dapat ditempatkan di atasnya, misalnya Tenang atau SABUN-layanan.

Sayangnya, martabat apa pun ada harganya. Dalam hal ini, biayanya adalah sebagai berikut. Pertama, persyaratan kualifikasi pengembang yang merancang, mengimplementasikan, dan memelihara model domain semakin meningkat: diperlukan kemampuan untuk membangun abstraksi yang lebih kompleks dibandingkan saat menggunakan solusi lain. Kedua, kebutuhan akan teknologi yang digunakan semakin meningkat. Secara khusus, Anda perlu memiliki lapisan akses data yang cukup kuat yang dapat mengimplementasikan pemetaan relasional objek. Menerapkan pola Model Domain biasanya memerlukan penggunaan yang kuat ORM-kerangka kerja seperti Hibernasi, Tautan Teratas, Tautan Eclipse atau BukaJPA, yang, di satu sisi, membutuhkan lebih banyak pengembang yang berkualifikasi tinggi, dan di sisi lain, mengurangi kinerja sistem yang sedang dikembangkan dan meningkatkan kerapuhannya: setiap tindakan ceroboh, misalnya, mengubah satu baris dalam deskripsi suatu objek- pemetaan relasional dapat menyebabkan .

Anatomi model jenuh dan anemia

Apa perbedaan anatomi antara dua pendekatan untuk membangun model domain: jenuh dan anemia? Dengan pendekatan yang kaya, logika bisnis, mis. perilaku sistem diimplementasikan dalam objek domain. Pendekatan ini tidak mengecualikan pengalihan sebagian perilaku ke kelas utilitas, seperti *Melayani, *Manajer, *Pembantu, namun hal ini hanya dibenarkan jika logika memengaruhi beberapa objek domain dan tidak jelas objek mana yang terkait. Contohnya adalah bagian kecil model domain Telecom berikut ini. Pengguna perlu mengaktifkan layanan. Layanan ditambahkan sebagai bagian dari pesanan. Dalam hal ini, perlu untuk memeriksa apakah ada organisasi penyedia yang dapat menyediakan layanan dengan serangkaian parameter tertentu. Dalam kasus model domain kaya, logika untuk menambahkan layanan dienkapsulasi dalam metode tersebut addNewService(Layanan layanan) kelas Pesanan Layanan:

pribadi Daftar < Service>layanan;

private void addService(Layanan layanan) (

jika (layanan == null )

Layanan = Daftar Array baru< Service> () ;

Layanan.tambahkan(layanan);

public void addNewService(Layanan layanan) menampilkan NotFoundValidProviderException (

ServiceProviderRepository penyediaRepo = ...;

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

TambahkanLayanan(layanan) ;

kalau tidak(

melempar NotFoundValidProviderException(layanan) baru;


Model domain anemia bekerja secara berbeda. Kelas objek domain tidak memiliki perilaku. Mereka hanya memiliki konstruktor dan metode akses data. Satu-satunya hal yang mereka terapkan adalah hubungan dengan objek lain. Semua perilaku sistem ditransfer ke lapisan layanan yang diimplementasikan di atas lapisan model domain. Mari kita tunjukkan pendekatan ini menggunakan contoh yang sama, tetapi sekarang di kelas Pesanan Layanan hanya akan memiliki metode yang mengakses data. Menentukan apakah penyedia layanan yang sesuai tersedia dan menambahkannya ke pesanan akan dilakukan Manajer Pesanan Layanan(setuju itu LayananPesananLayanan terdengar agak aneh):

ServiceOrder kelas publik(

pribadi Daftar < Service>layanan;

publik Daftar < Service>dapatkan Layanan() (

layanan pengembalian;

layanan set kekosongan publik( Daftar < Service>layanan) (

ini .services = layanan;


kembali penyediaRepo;

jika (pesanan.getServices() == null)

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

Pesan.getServices().add(layanan);

kalau tidak(

Kritik terhadap Model Domain Anemik

Ada dua pertimbangan utama yang menentang penggunaan pola Model Domain Anemik dalam komunitas pembangunan:
  • Dengan menggunakan model domain anemia, kami menyimpang dari prinsip OOP. Inti dari kritik ini bermuara pada fakta bahwa sejak itu Objek domain dalam kasus model domain anemia tidak memiliki perilaku, maka kita bertentangan dengan ide dasar OOP - untuk memiliki data dan metode pemrosesan di satu tempat.
  • Ketika model domain merosot menjadi model anemia, semua keuntungan yang diberikan pola ini akan hilang, sementara kelemahannya tetap ada. Secara khusus, penggunaan pola ini masih memerlukan lapisan akses data yang cukup kuat, yang diimplementasikan, misalnya dengan menggunakan yang rumit ORM-kerangka kerja.
Mari kita lihat pertimbangan ini lebih terinci. Model domain anemia bertentangan dengan prinsip OOP. Dalam arti tertentu, pertimbangan ini benar, karena Objek domain tidak memiliki perilaku. Namun, akses ke keadaan internal objek dapat dienkapsulasi di balik metode objek tersebut. Mari kita tunjukkan ide ini menggunakan contoh kita menambahkan layanan ke order: ke kelas Pesanan Layanan metode ditambahkan tambahkanLayanan(), sedangkan metodenya setLayanan() menjadikannya pribadi:

ServiceOrder kelas publik(

pribadi Daftar < Service>layanan;

publik Daftar < Service>dapatkan Layanan() (

layanan pengembalian;

layanan set kekosongan pribadi( Daftar < Service>layanan) (

ini .services = layanan;

public void addService(Layanan layanan) (

jika (layanan == null )

Layanan = Daftar Array baru< Service> () ;

Layanan.tambahkan(layanan);


Kelas ServiceOrderManagerImpl akan memeriksa kemungkinan menambahkan pesanan dan memanggil metode tersebut tambahkanLayanan() kelas Pesanan Layanan:

kelas publik ServiceOrderManagerImpl mengimplementasikan ServiceOrderManager (

Penyedia LayananRepositori pribadiRepo;

ServiceProviderRepository publik getProviderRepo() (

kembali penyediaRepo;

public void setProviderRepo(ServiceProviderRepository penyediaRepo) (

ini .providerRepo = penyediaRepo;

public void addNewService(Pesanan ServiceOrder, Layanan layanan) menampilkan ProviderNotFoundException (

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

Order.addService(layanan);

kalau tidak(

melempar ProviderNotFoundException(layanan) baru;


Masalahnya adalah mengekspos perilaku ke kelas lain mengharuskan metode tersebut bersifat publik. Hal ini secara signifikan menurunkan enkapsulasi. Pengembang yang ceroboh akan dapat mengakses properti suatu objek dengan melewati metode layanan terkait, misalnya, menambahkan layanan ke pesanan tanpa memeriksa ketersediaan penyedia.

Solusinya bisa dengan merangkum semua logika bisnis, misalnya menggunakan template POJO-fasad. Dalam hal ini, perlu untuk memastikan kekekalan objek yang ditransfer di luar lapisan logika bisnis, atau setidaknya pemisahannya dari lapisan penyimpanan data, yang tidak akan memungkinkan penyimpanan perubahan pada objek tersebut melewati lapisan logika bisnis.

Prinsip OOP lainnya, seperti pewarisan dan polimorfisme, tetap tersedia saat menggunakan model domain anemia. Paling modern ORM-frameworks memungkinkan pemetaan hierarki kelas ke database. Misalnya, saat membangun model aplikasi keuangan, Anda harus mempertimbangkan berbagai strategi untuk menghitung batas cerukan. Misalkan ada dua strategi: tanpa cerukan dan cerukan dengan batas terbatas. Mari kita membangun hierarki kelas berikut:




Dalam hal ini, objek kelas Akun- akun - akan memiliki tautan ke implementasi spesifik dari strategi penghitungan cerukan yang berlaku untuk akun ini:

Akun kelas publik (

Strategi OverdraftLimitStrategi overdraftLimitStrategi pribadi;

Public OverdraftLimitStrategy getOverdraftLimitStrategy() (

mengembalikan cerukanLimitStrategy;


Dalam beberapa Layanan Akun kita sekarang dapat menggunakan implementasi polimorfik dari strategi penghitungan cerukan:

Layanan Akun kelas publik(

penarikan kekosongan publik(Rekening akun, Jumlah ganda) (

if (akun.getAmount() + akun.getOverdraftLimitStrategy().getLimit() > = jumlah) (

Akun.setAmount(akun.getAmount() - jumlah);


Semua manfaat yang diberikan pola Model Domain hilang. Seperti yang telah kita bahas di atas, keuntungan yang diberikan oleh pemodelan sistem dalam gaya OOP saat menggunakan model domain anemia masih tersedia bagi kita. Ada kemungkinan bahwa keuntungan ini hanya dapat diperoleh dengan pengembangan arsitektur sistem yang kompeten, khususnya antarmuka antar lapisan, tetapi ini adalah harga yang pantas untuk dibayar untuk model yang lebih sederhana. Kemampuan objek untuk disimpan secara transparan dalam memori jangka panjang juga tidak hilang. Seperti sebelumnya, objek disimpan dengan perintah yang sesuai di repositori ( Gudang) atau wilayah kerja ( Satuan Kerja), dan terus dilestarikan. Menyinkronkan perubahan keadaan internal suatu objek dengan penyimpanan data tidak bergantung pada bagaimana tepatnya perubahan ini dilakukan - dengan metode di dalam kelas objek atau dengan metode layanan.

Alasan popularitas pola model domain Anemik

Sekarang mari kita coba mencari jawaban atas pertanyaan mengapa pola Anemic Domain Model begitu populer. Menurut pendapat saya, alasan utamanya terletak pada kenyataan bahwa pola ini lebih mudah diterapkan dengan menggunakan teknologi modern dibandingkan dengan model kaya. Cara paling umum untuk menyusun kode sumber saat ini adalah pola Injeksi Ketergantungan. Pada saat yang sama, dua sumber objek terlihat jelas di aplikasi:
  • IoC- wadah yang mengimplementasikan pola Injeksi Ketergantungan dan membangun objek layanan: repositori, layanan, fasad;
  • ORM-framework yang membuat objek domain.
Saat menerapkan pola Model Domain Kaya, muncul masalah dalam menghubungkan objek yang dibangun dengan dua cara ini ke dalam satu grafik. Jika kita kembali ke contoh model domain kaya yang dijelaskan di atas, kita dapat melihat objek kelasnya Pesanan Layanan Anda harus meneruskan objek kelas yang mengimplementasikan antarmuka Repositori Penyedia Layanan. Tidak semua ORM-frameworks memungkinkan Anda memasukkan dependensi pihak ketiga ke dalam objek selama konstruksinya, diimplementasikan oleh IoC-wadah. Kita harus menggunakan pendekatan yang memiliki sejumlah kelemahan.
  • Injeksi melalui variabel dan metode statis. Repositori dan lain-lain IoC-objek ditransmisikan sebagai singleton. Kekurangan dari pendekatan ini: lebih sulit untuk mengganti suatu objek, misalnya dengan menggantinya dengan stub selama pengujian. Pendekatan ini juga menimbulkan ketergantungan tersembunyi.
  • Melewati dependensi melalui suatu metode (jangan bingung dengan injeksi melalui penyetel). Jika kita menyertakan metode yang berisi logika bisnis dalam objek domain, maka kita perlu meneruskan semua objek yang diperlukan ke metode ini: repositori, pabrik, koneksi, dll. Kerugian dari pendekatan ini: tanda tangan metode logika bisnis menjadi lebih kompleks, semua ketergantungan terekspos; karena logika suatu metode menjadi lebih kompleks, mungkin memerlukan ketergantungan baru, yang akan menyebabkan perubahan dalam tanda tangan metode dan kebutuhan untuk melakukan hal tersebut. keduanya memperbaiki pemanggilan metode di mana pun ia digunakan, dan meneruskan dependensi baru ke titik panggilan.
  • Gunakan templat Service Locator dan teruskan penerapan templat ini ke metode objek domain. Kekurangan dari metode ini adalah semua kekurangan dari template Service Locator.
  • Alih-alih ketergantungan, teruskan hasil pekerjaannya ke metode. Namun pendekatan ini menghilangkan logika dari objek domain dan pada dasarnya merupakan langkah pertama menuju model anemia.

Manfaat Pola Model Domain Anemia

Selain popularitasnya karena infrastruktur yang ada, pola Anemic Domain Model memiliki sejumlah keunggulan tersendiri. Mari kita lihat lebih dekat.
  1. Kemudahan desain dan pengembangan. Biasanya, model domain anemia memerlukan lebih sedikit usaha dan keterampilan untuk dikembangkan. Karena objek domain tidak memiliki perilaku yang dienkapsulasi dalam layanan, pertanyaan tentang objek domain mana yang akan menempatkan metode ini atau itu akan dihilangkan. Tentu saja, yang muncul justru pertanyaan tentang layanan mana yang akan ditempatkan, apakah akan membuat layanan baru atau tidak, tetapi pertanyaan-pertanyaan ini lebih mudah untuk diselesaikan.
  2. Pembuatan yang mudah berdasarkan gudang data: basis data, WSDL-deskripsi layanan, file konfigurasi pemetaan relasional objek, dll. Keuntungan ini terutama terlihat ketika kita membangun antarmuka ke sistem lama yang tidak diimplementasikan dalam bahasa OOP atau menampilkan antarmuka dalam gaya panggilan prosedur jarak jauh. Dengan fokus modern sistem informasi pada penggunaan arsitektur berorientasi layanan, fitur pendekatan ini memainkan peran yang semakin penting. Hal ini membedakan keadaan saat ini dengan saat artikel kritis Fowler ditulis, karena hampir 10 tahun telah berlalu. Sebagai pengembang klien untuk layanan perusahaan yang ada, jauh lebih mudah bagi saya untuk menghasilkan model data sesuai dengan - layanan - kontraknya (misalnya, menurut WSDL-deskripsi) dan mengembangkan lapisan kelas manajer pada model ini, daripada membangun model domain kaya dan menerapkan integrasinya dengan layanan jarak jauh.
  3. Mudah digunakan kembali. Jika kita memiliki aplikasi yang dibangun berdasarkan template Anemic Domain Model dan kita perlu mengimplementasikan aplikasi yang bekerja dengan data yang sama, namun mengimplementasikan logika bisnis yang berbeda, maka kita dapat menggunakan kembali kelas model yang ada. Dalam kasus model domain jenuh, penggunaan kembali tersebut akan sulit karena logika bisnis terprogram ke dalam kelas yang mengimplementasikan model domain. Dari sudut pandang ini, enkapsulasi berlebihan lebih berbahaya daripada bermanfaat.

Kesimpulan

Kesimpulannya, patut dikatakan bahwa hal terakhir, baik dalam melakukan diskusi maupun dalam mengambil keputusan, adalah mengikuti pendapat otoritas tertentu secara membabi buta. Perlu selalu diingat bahwa dalam sains ada yang namanya pluralisme pendapat. Ada berbagai aliran ilmiah yang menganut pendekatan tertentu. Persaingan antar sekolah semacam itu merupakan hal yang wajar. Kata-kata apa pun dari “guru” ini atau itu dapat disebabkan oleh komponen oportunistik. Tidak perlu membuat idola untuk diri sendiri agar tidak kecewa nantinya. Anda harus selalu berpikir sendiri dan memilih solusi berdasarkan pengalaman dan prioritas Anda sendiri, terutama proyek Anda.

Pembaruan terakhir: 19/07/2016

Salah satu komponen kunci dari pola MVC adalah model. Tugas utama model adalah mendeskripsikan struktur dan logika data yang digunakan.

Biasanya, semua entitas yang digunakan dalam aplikasi dipisahkan menjadi model terpisah, yang menggambarkan struktur setiap entitas. Tergantung pada tugas dan bidang studi, kita dapat memilih sejumlah model berbeda dalam aplikasi.

Semua model dirancang sebagai kelas POCO biasa (objek CRL biasa), yaitu kelas biasa dalam bahasa C#. Misalnya, jika kita bekerja dengan aplikasi toko telepon seluler online, maka kita dapat mendefinisikan model berikut dalam proyek untuk mewakili telepon:

Kelas publik Telepon ( public int Id ( get; set; ) public string Nama ( get; set; ) public string Perusahaan ( get; set; ) public int Harga ( get; set; ) )

Model Telepon menentukan sejumlah properti: ID pengidentifikasi unik, nama, pabrikan, dan harga. Ini klasik model anemia. Model anemia tidak memiliki perilaku dan hanya menyimpan status sebagai properti.

Namun, suatu model tidak harus hanya terdiri dari properti. Selain itu, ia mungkin memiliki konstruktor, beberapa metode, bidang, dan umumnya mewakili kelas standar dalam C#. Model yang juga menentukan perilaku, berbeda dengan model anemia, disebut model “tebal” (Model Domain Kaya / Model Gemuk / Model Tebal). Misalnya, kita dapat beralih dari model anemia dengan memodifikasinya sebagai berikut:

Telepon kelas publik ( desimal pribadi _diskon = 0; Telepon publik (diskon desimal) ( this._discount = diskon; ) Id int publik ( dapatkan; set; ) string publik Nama ( dapatkan; set; ) string publik Perusahaan ( dapatkan; set; ) Harga desimal publik ( dapatkan; set; ) desimal publik GetPriceWithDiscount() ( kembalikan this.Price - (this.Price * this._discount); ) )

Namun metode apa pun untuk mendeskripsikan suatu entitas yang dipilih, hal utama adalah jangan membebani kelas model secara berlebihan dan ingat bahwa tujuannya terutama untuk mendeskripsikan data. Dan model tersebut harus menggambarkan hanya satu entitas, dengan mengikuti prinsip tanggung jawab tunggal.

Dalam aplikasi ASP.NET MVC Core, model dapat dibagi menjadi beberapa kelompok sesuai dengan tingkat penerapannya:

    Model yang objeknya disimpan di penyimpanan data khusus (misalnya, dalam database, file xml, dll.)

    Model yang digunakan untuk meneruskan data ke tampilan atau sebaliknya untuk menerima data dari tampilan. Model seperti ini disebut juga model presentasi

    Model tambahan untuk perhitungan perantara

Biasanya, folder Model terpisah dibuat di proyek untuk menyimpan model. Model tampilan sering kali ditempatkan di folder terpisah, sering disebut ViewModels.

Proyek ASP.NET MVC Core dengan autentikasi bawaan secara default sudah berisi folder ini, dan berisi semua model yang diperlukan. Namun, jika kita membuat proyek tanpa autentikasi bawaan, maka folder ini akan hilang. Oleh karena itu, kita perlu menambahkan folder ini secara manual. Namun sekali lagi, saya tekankan bahwa kita tidak perlu memberi nama folder untuk menyimpan model dengan tepat Models dan ViewModels. Ini bisa berupa direktori dengan nama apa pun, Anda dapat menempatkan model di akar proyek, tetapi gaya yang lebih umum adalah nama Models dan ViewModels.

Misalnya, mari kita buat proyek ASP.NET Core baru dengan tipe Aplikasi Web dan beri nama ModelsApp. Pertama, mari tambahkan folder Models ke proyek untuk menyimpan model.

Dan kami akan menempatkan kelas Perusahaan baru di dalamnya:

Perusahaan kelas publik ( Id int publik ( get; set; ) string publik Nama ( get; set; ) string publik Negara ( get; set; ) )

Dan tambahkan juga kelas Telepon ke folder Models

Telepon kelas publik ( Id int publik ( dapatkan; set; ) string publik Nama ( dapatkan; set; ) Produsen Perusahaan publik ( dapatkan; set; ) Harga desimal publik ( dapatkan; set; ) )

Model-model ini akan menggambarkan data yang akan kita gunakan. Data ini dapat disimpan dalam database, namun untuk mempermudah kita akan mendefinisikannya di controller. Mari kita ubah HomeController sebagai berikut:

Menggunakan System.Collections.Generik; menggunakan System.Linq; menggunakan Microsoft.AspNetCore.Mvc; menggunakan ModelsApp.Models; // namespace model namespace ModelsApp.Controllers ( kelas publik HomeController: Controller ( Daftar perusahaan; Telepon; public HomeController() ( Perusahaan apple = Perusahaan baru ( Id = 1, Nama = "Apple", Country="USA" ); Perusahaan microsoft = Perusahaan baru ( Id = 2, Nama = "Microsoft", Country="USA" ) ; Perusahaan google = Perusahaan baru ( Id = 3, Nama = "Google", Negara = "USA" ); (apel, microsoft, google);

telepon = Daftar baru

( Telepon baru ( Id=1, Produsen= apple, Nama="iPhone 6S", Harga=56000 ), Telepon baru ( Id=2, Produsen= apple, Nama="iPhone 5S", Harga=41000 ), Telepon baru ( Id=3, Produsen= microsoft, Nama="Lumia 550", Harga=9000 ), Telepon baru ( Id=4, Produsen= microsoft, Nama="Lumia 950", Harga=40000), Telepon baru ( Id=5, Pabrikan= google, Nama="Nexus 5X", Harga=30000 ), Telepon baru ( Id=6, Pabrikan= google, Nama="Nexus 6P", Harga=50000 ) ); ) Indeks IActionResult publik() ( return View(ponsel); ) ) ) Daftar objek model diteruskan ke tampilan menggunakan metode View().

Dan pada akhirnya kami mengubah pandangan Indeks.cshtml

, yang akan menampilkan semua objek: }
@menggunakan ModelsApp.Models @model IEnumerable@( ViewData["Judul"] = "Halaman Beranda"; )@foreach (Telepon p dalam Model) (

@p.Nama

@p.Produsen?.Nama

@p.Harga

Dalam dunia kedokteran, ada beberapa jenis sindrom klinis dan hematologi ini, yang bisa bersifat bawaan atau didapat. Telah dibuktikan secara ilmiah bahwa remaja putri sensitif terhadap kekurangan sel darah merah karena banyak kehilangan darah selama siklus menstruasi. Pada orang tua, anemia berkembang karena gizi buruk dan penyakit kronis. Dengan demikian, anemia berperan sebagai gejala sekunder dari kelainan yang ada pada tubuh.

Beberapa bentuk penyakit yang muncul selama kehamilan memang dianggap normal, namun perlu Anda ketahui mengapa anemia berbahaya bagi pasien dari berbagai kelompok umur. Dengan hipoksia yang berkepanjangan, proses metabolisme internal terganggu, produk beracun menumpuk, dan disfungsi ginjal dan hati, jantung, dan paru-paru berkembang. Pasien mungkin tidak menyadari adanya penyakit untuk waktu yang lama, yang secara bertahap akan berkembang menjadi bentuk kronis. Pada akhirnya muncullah keluhan sesak napas, pembengkakan pada lengan dan kaki, detak jantung cepat, hingga penurunan performa. Sebelum menjalani pemeriksaan laboratorium, dokter berasumsi adanya anemia yang patogenesisnya tidak diketahui.

Etiologi penyakit

Anemia didiagnosis pada pasien berdasarkan identifikasi berbagai faktor. Penyebab utama anemia berikut diketahui:

  1. Kehilangan sejumlah besar darah selama siklus menstruasi yang berat, luka yang dalam, dengan latar belakang kanker usus besar yang ganas, tukak usus.
  2. Disfungsi ginjal, dimana produksi eritropoietin di sumsum tulang, yang menghasilkan retikulosit (prekursor sel darah merah), berkurang.
  3. Penyakit ini bisa diturunkan dari kerabat tingkat pertama.
  4. Gizi buruk, kekurangan vitamin B12 dan C, asam folat, zat besi.
  5. Anemia berkembang dengan latar belakang patologi kronis: penyakit Crohn, AIDS, HIV, rheumatoid arthritis, karsinoma.
  6. Manifestasi tanda-tanda kerusakan sistem hematopoietik juga dikaitkan dengan psikosomatik. Anemia bertindak sebagai sinyal spesifik dari tubuh bahwa seseorang terlalu kritis terhadap diri sendiri dan tidak puas dengan hidupnya. Dalam hal ini, psikolog menyarankan untuk mengulangi secara mental kepada diri sendiri bahwa jalan dan pemikiran baru tidak menimbulkan ancaman dan sepenuhnya aman.
  7. Tubuh beberapa orang tidak mampu menyerap vitamin B12, yang menyebabkan berkembangnya anemia. Penurunan penyerapan nutrisi dapat disebabkan oleh produk susu, makanan padat, dan sereal mentah.
  8. Tanpa adanya penyakit, sel darah merah dapat hidup 100 hari. Ketika limpa rusak, hemolisis berkembang, yang mengganggu fungsinya.
  9. Etanol bersifat racun bagi aktivitas otak dan memperlambat produksi sel darah merah. Ketika faktor-faktor ini digabungkan, pecandu alkohol kronis memiliki peningkatan risiko anemia yang signifikan.
  10. Menipisnya cadangan zat besi internal paling sering dipicu oleh wanita yang berjuang melawan kelebihan berat badan dan menjalankan diet ketat.
  11. Anemia sering muncul pada periode pra operasi. Oleh karena itu, ahli bedah harus menilai sepenuhnya risiko intervensi dan meningkatkan kadar hemoglobin menjadi normal untuk mengurangi beban pada sistem kardiovaskular.


Apakah Anda menyukai artikelnya? Bagikan dengan teman Anda!