Dalam logika bisnis kami, kami terkadang menetapkan metode seperti ini:
User.ResetCourse(Course courseToReset)
Masalahnya adalah bahwa Pengguna dan Kursus adalah objek proxy Entity Framework. Ini berarti bahwa ketika kita menekan properti navigasi pada Pengguna atau Kursus itu dapat menyebabkan hit besar ke database karena objek-objek tersebut tidak dapat IQuery sehingga beralih melalui mereka secara normal.
Untuk mengatasi ini kami mengubah tanda tangan menjadi:
User.ResetCourse(MyDBContext db, Course courseToReset)
Ini berarti kita dapat secara langsung meminta basis data untuk membuat perubahan yang kita butuhkan secara efisien tetapi meneruskan konteks Database ke objek bisnis sepertinya sangat salah.
Kami kemudian bermigrasi ke pengguna lapisan layanan yang berarti kami memiliki sesuatu seperti:
CourseService.ResetForUser(Course courseToReset, User forUser)
Layanan ini memiliki referensi ke DBContext yang disuntikkan pada penciptaan tetapi sekarang objek bisnis kami hanya tas data tanpa perilaku (yaitu Model Domain Anemik).
Bagaimana kita bisa menghindari ini?