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.