İş mantığımızda bazen böyle bir şeyi tanımlayan yöntemlerimiz vardır:
User.ResetCourse(Course courseToReset)
Sorun, hem Kullanıcı hem de Ders'in Entity Framework proxy nesneleri olmasıdır. Bu, Kullanıcı veya Parkurda navigasyon özelliklerine bastığımızda, veritabanına büyük bir isabet yaratabileceği anlamına gelir, çünkü bu nesneler IQueryable değildir, bu yüzden normalde bunlar üzerinden yinelenir.
Bunu çözmek için imzayı şu şekilde değiştirdik:
User.ResetCourse(MyDBContext db, Course courseToReset)
Bu, ihtiyaç duyduğumuz değişiklikleri verimli bir şekilde yapmak için veritabanını doğrudan sorgulayabileceğimiz anlamına gelir, ancak Veritabanı bağlamını bir iş nesnesine geçirmek çok yanlış görünüyor.
Daha sonra bir hizmet katmanını kullanıcıya taşıdık, yani şöyle bir şeyimiz var:
CourseService.ResetForUser(Course courseToReset, User forUser)
Bu hizmetin yaratılmasında enjekte edilen DBContext'e bir referansı vardır, ancak şimdi iş nesnelerimiz sadece davranışsız veri torbalarıdır (yani Anemik Alan Modeli).
Bundan nasıl kaçınabiliriz?