The model domain anemia digambarkan sebagai anti-pola dalam domain desain didorong oleh Martin Fowler. Untuk memiliki logika bisnis pada model domain sering layanan domain digunakan. Tetapi menyuntikkan layanan domain ke dalam model domain dianggap berbahaya oleh Vaughn Vernon (lihat "Menerapkan Desain Berbasis Domain, Halaman 387).
Menurut saya, pendapat itu kontradiktif, apakah ini benar? Bagaimana kedua poin dipertimbangkan?
Apakah benar - benar model domain yang kaya dengan layanan domain yang disuntikkan vs model domain anemia dan layanan domain normal ?
domain-driven-design
dependency-injection
services
Sjoerd222888
sumber
sumber
Jawaban:
Model anemia hanyalah sebuah wadah data. Itu tidak mengandung perilaku. (Ini sebenarnya bisa dianggap sebagai hal yang baik dalam paradigma fungsional.) Kebalikan dari model anemia bukanlah model yang disuntikkan penuh layanan domain. Anda menggambarkan dua ekstrem - keduanya buruk.
Jika Anda memiliki model anemia, Anda tidak sepenuhnya memahami apa yang ditawarkan OOP. Jika Anda mulai menyuntikkan layanan ke dalam model-model itu, Anda kemungkinan menyuntikkan masalah yang bukan miliknya. Entah itu atau model Anda lebih anemia daripada yang Anda pikirkan. Kenapa lagi Anda membutuhkan layanan selain menyediakan sesuatu yang diperlukan tetapi tidak ada? (Hilang bisa berarti anemia.)
Menghindari "menceritakan" mengarah ke desain yang lebih kuat. Apakah Anda memiliki sesuatu dalam layanan yang dibutuhkan model? Mungkin itu harus dipindahkan ke model. Jika tidak, mungkin Anda harus mempertimbangkan kembali kekhawatiran Anda. Perilaku model harus bekerja di dalam model. Ini terutama harus (jika tidak hanya) berkaitan dengan anggota. Tetapi ingat, masih akan ada hal-hal yang bekerja pada atau dengan model. Misalnya, model tidak boleh membuka koneksi TCP atau mendengarkan acara UI, bahkan jika mereka terlibat. Itu tanggung jawab orang lain dan bahwa seseorang tidak pernah termasuk dalam model.
sumber
Itu tidak bertentangan. Kedua pendukung menginginkan Anda untuk meletakkan kode Anda yang sebenarnya di objek domain itu sendiri.
yaitu.
vs ADM
vs layanan yang disuntikkan
Terus terang setiap pendekatan memiliki kelebihan dan kekurangan. Yang Anda pilih sebagian besar adalah masalah preferensi pribadi
sumber