Trong logic kinh doanh của chúng tôi, đôi khi chúng tôi có các phương thức được định nghĩa như thế này:
User.ResetCourse(Course courseToReset)
Vấn đề là cả Người dùng và Khóa học đều là các đối tượng proxy Entity Framework. Điều này có nghĩa là khi chúng ta nhấn các thuộc tính điều hướng trên Người dùng hoặc Khóa học, nó có thể gây ra một cú hích lớn cho cơ sở dữ liệu vì các đối tượng đó không phải là IQueryable nên nó lặp đi lặp lại thông thường.
Để giải quyết điều này, chúng tôi đã thay đổi chữ ký thành:
User.ResetCourse(MyDBContext db, Course courseToReset)
Điều này có nghĩa là chúng ta có thể truy vấn trực tiếp cơ sở dữ liệu để thực hiện các thay đổi mà chúng ta cần một cách hiệu quả nhưng việc chuyển ngữ cảnh Cơ sở dữ liệu đến một đối tượng kinh doanh có vẻ rất sai.
Sau đó chúng tôi đã chuyển sang người dùng một lớp dịch vụ, điều đó có nghĩa là chúng tôi có một cái gì đó như:
CourseService.ResetForUser(Course courseToReset, User forUser)
Dịch vụ này có tham chiếu đến DBContext được đưa vào khi tạo nhưng bây giờ các đối tượng kinh doanh của chúng tôi chỉ là các túi dữ liệu không có hành vi (ví dụ: Mô hình miền thiếu máu).
Làm thế nào chúng ta có thể tránh điều này?