ในตรรกะทางธุรกิจของเราบางครั้งเรามีวิธีการที่กำหนดไว้ดังนี้:
User.ResetCourse(Course courseToReset)
ปัญหาคือทั้งผู้ใช้และหลักสูตรเป็นวัตถุพร็อกซี Entity Framework ซึ่งหมายความว่าเมื่อเราเข้าสู่คุณสมบัติการนำทางทั้งผู้ใช้หรือหลักสูตรมันสามารถทำให้เกิดความนิยมอย่างมากในฐานข้อมูลเพราะวัตถุเหล่านั้นไม่ได้เป็น IQueryable ดังนั้นจึงวนซ้ำผ่านพวกเขาตามปกติ
เพื่อแก้ปัญหานี้เราเปลี่ยนลายเซ็นเป็น:
User.ResetCourse(MyDBContext db, Course courseToReset)
ซึ่งหมายความว่าเราสามารถสอบถามฐานข้อมูลโดยตรงเพื่อทำการเปลี่ยนแปลงที่เราต้องการอย่างมีประสิทธิภาพ แต่การส่งบริบทฐานข้อมูลไปยังวัตถุทางธุรกิจดูเหมือนจะผิดพลาด
หลังจากนั้นเราย้ายไปยังชั้นบริการที่ให้ผู้ใช้ซึ่งหมายความว่าเรามีสิ่งที่ชอบ:
CourseService.ResetForUser(Course courseToReset, User forUser)
บริการนี้มีการอ้างอิงถึง DBContext ที่ถูกสร้าง แต่ตอนนี้วัตถุธุรกิจของเราเป็นเพียงถุงข้อมูลที่ไม่มีพฤติกรรม (เช่นรุ่น Anemic Domain Model)
เราจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร