jadi tidak mungkin untuk beralih ke ORM lain (bukan yang kita inginkan)).
Sepertinya itu salah. Keuntungan utama dari pola repositori adalah Anda menyembunyikan logika akses data dan mudah ditukar.
Sejauh ini rasanya seolah-olah saya meletakkan logika bisnis saya dalam model domain saya dan melalui repositori saya akan bekerja dengan ORM (yang pernah saya pilih). Namun, jika saya ingin terus menggunakan alat MDA untuk bagian ORM dari aplikasi, model yang dibuat di sini akan sangat anemia (yaitu tidak mengandung logika bisnis). Demikian pula jika saya menggunakan kerangka kerja Entity (.net) atau NHibernate untuk ORM saya juga akan menjadi model anemia. Saya tidak yakin di mana Anda akan meletakkan logika bisnis jika saya hanya menggunakan NHibernate.
Model domain anemik dianggap praktik buruk oleh banyak orang, misalnya oleh Martin Fowler. Anda harus menghindari desain seperti itu karena model seperti itu mengarah pada teknik desain prosedural daripada desain berorientasi objek yang baik. Anda kemudian memiliki kelas data dan kelas manajer / pemrosesan yang berarti Anda memisahkan status dan perilaku. Tetapi suatu objek haruslah "keadaan dan perilaku".
NHibernate melakukan pekerjaan yang bagus dengan ketidaktahuan yang gigih. Anda dapat menyembunyikan detail pemetaan dalam XML atau dengan FluentNHibernate dan cukup menulis POCO biasa. Sangat mudah untuk membuat model domain yang kaya dengan NHibernate. Saya pikir Anda bisa melakukannya dengan kerangka kerja entitas dan alat MDA juga. Selama alat ini menghasilkan kelas parsial, Anda dapat memperpanjang kode yang dihasilkan dengan mudah tanpa harus khawatir bahwa generasi baru dapat merusak kode yang ditulis pengguna Anda.
Singkat cerita ini. Saat Anda menggunakan NHibernate, tidak ada, saya tidak mengulangi apa pun , menghentikan Anda untuk merangkul model domain kaya. Saya sarankan menggunakannya dengan FluentNHibernate dan pemetaan dengan tangan. Kode pemetaan hanya membutuhkan 5 hingga 10 menit untuk menulis. Saya kira hal yang sama juga berlaku untuk kerangka kerja entitas dan alat-alatnya setidaknya membuat kelas parsial yang mudah diperluas.
Apakah saya benar dalam berpikir seperti ini, dengan kata lain dengan DDD semua logika bisnis dalam domain dan hanya menggunakan ORM untuk kegigihan melalui repositori?
Sebagian besar Anda benar. Anda harus memiliki model domain yang kaya. Terutama ketika hal-hal menjadi lebih dan lebih kompleks, lebih mudah untuk mempertahankan dan memperluas ketika Anda telah mendesainnya dengan benar. Tetapi perlu diingat bahwa DDD juga tahu (Lapisan Domain dan Lapisan Aplikasi) Layanan untuk mengimplementasikan logika bisnis dan Pabrik untuk merangkum logika kreasi.
Saya juga cenderung membedakan logika bisnis menjadi logika domain dan logika bisnis aplikasi aktual. Logika domain adalah bagaimana domain berinteraksi dan berperilaku sementara logika aplikasi, yang merupakan lapisan yang sama sekali berbeda, merangkum bagaimana domain digunakan untuk kasus penggunaan / aplikasi tertentu. Sering kali saya harus memperbarui model domain untuk mendukung kasus penggunaan khusus dan membuatnya lebih kuat.
Saya tidak tahu alat MDA mana yang Anda gunakan, tetapi yang saya kerjakan selalu membuat kelas parsial sehingga Anda bebas untuk melengkapinya dengan logika bisnis sebanyak yang Anda inginkan.
Namun, saya merasa alat MDA sedikit kurang tepat dalam konteks DDD daripada ORM, karena pembuatan kode sering cenderung menghasilkan kelas yang kacau dengan kebisingan khusus alat alih-alih entitas domain yang ramping dan jelas diekspresikan yang kami harapkan. Sebenarnya, yang sering Anda dapatkan adalah campuran data domain, logika persistensi, logika validasi kendala ... dan saya tidak tahu apakah ada cara untuk memisahkan masalah ini dengan sebagian besar alat MDA.
Dan tentu saja, Anda tidak dapat menyentuh kode yang dihasilkan kecuali melalui kelas parsial, yang berarti Anda tidak dapat menghilangkan perilaku anti-DDD potensial yang akan diintegrasikan. Ini bermasalah dalam pendekatan di mana Anda ingin menegakkan hambatan ketat antara Agregat dan menyesuaikan hubungan antara entitas Anda dengan sempurna. Membangun waktu dalam lingkungan integrasi berkesinambungan dapat menderita dari langkah pembuatan kode tambahan juga.
Terlepas dari itu, saya pikir Falcon cukup banyak mengatakan itu semua - sama sekali tidak ada dalam alat ORM atau MDA mencegah Anda dari memiliki entitas domain yang kaya.
sumber
Apa yang saya lakukan di tim saya adalah memodelkan objek, domain, dan menambahkan logika bisnis saya secara bersamaan. Saya tidak menggunakan Pengembangan Model Driven yang akan menghasilkan kode dari model tetapi lebih suka pendekatan penjelasan. Maksud saya bahwa pada level objek di dalam diagram kelas saya menambahkan stereotip ORM. Ini akan menambah anotasi persistensi langsung dalam kode yang kompatibel dengan EJB3 / hibernate. Pembuatan basis data dilakukan oleh Hibernate dan tentu saja bukan oleh template UML. Ini jauh lebih baik karena jika perubahan kode dan penjelasan yang ditambahkan tidak persis apa yang hibernate spesialis maka dia dapat mengubahnya tetapi modelnya masih bagus. Saya juga dapat mengubah persyaratan saya dan model domain saya masih ok.
Pengembang dapat menambahkan logika bisnis di dalam setiap metode dan menambahkan komentar, saya juga bisa membuat model dan menambahkan kendala. Misalnya penjualan harus lebih dari 50rb jika tidak dll .... Saya tidak perlu kode itu tetapi hanya menulis dalam model dan informasi ini akan terlihat oleh tim pengembang. UML sangat keren dan fleksibel.
sumber