apakah mungkin menggunakan IoC dan Rich Domain? Apakah ada contoh bagus mereka, proyek sumber terbuka yang melakukan itu?
Saya menganggap maksud Anda DI bukan IoC, dan proyek yang Anda kerjakan menggunakan wadah DI seperti Spring. IoC memiliki dua rasa utama: DI dan pola Locator. Saya tidak melihat mengapa pola Locator menjadi masalah, jadi mari kita fokus pada DI.
Saya tidak berpikir itu mungkin, atau setidaknya akan sangat tidak praktis. Aspek utama dari wadah DI adalah bahwa mereka mengontrol pembuatan objek ketika mereka menyuntikkannya ke orang lain ("objek yang dikelola"). Himpunan objek terkelola yang hidup ketika proyek berjalan independen dari item domain mana yang ada di proyek Anda, tetapi bergantung pada bagaimana objek dikabel dan cakupan mana (singleton, prototipe) yang ditugaskan padanya.
Inilah sebabnya mengapa Anda tidak ingin membiarkan wadah DI mengelola objek domain Anda. Tetapi jika Anda membuat objek secara manual (dengan yang baru), Anda tidak bisa mendapatkan objek lain yang disuntikkan ke objek domain Anda. (Meninggalkan potensi penyelesaian dengan pengkabelan manual.) Karena Anda memerlukan suntikan ini untuk menggantikan implementasi dengan yang lain, Anda tidak dapat mengganti fungsionalitas objek domain kaya menggunakan DI. Karenanya, Anda tidak akan ingin menempatkan fungsionalitas ke objek domain, atau Anda akan kehilangan fitur DI.
Saya tidak melihat bagaimana wadah DI hipotetis bisa bekerja yang tidak mengelola objek Anda, dan tidak ada implementasi yang ada yang memungkinkan itu. Jadi adil untuk mengklaim bahwa DI bergantung pada pengelolaan objek. Karena itu akan selalu menggoda Anda untuk membagi objek Rich Domain potensial menjadi satu kelas anemik dan satu atau beberapa kelas skrip transaksi.