Rất nhiều hướng dẫn về DDD tôi đã nghiên cứu chủ yếu bao gồm lý thuyết. Chúng đều có các ví dụ mã thô sơ (Pluralsight và tương tự).
Trên trang web cũng có một số nỗ lực của một số người để tạo ra các hướng dẫn bao gồm DDD với EF. Nếu bạn bắt đầu nghiên cứu chúng chỉ trong một thời gian ngắn - bạn nhanh chóng nhận thấy chúng khác biệt rất nhiều với nhau. Một số người khuyên nên giữ ứng dụng ở mức tối thiểu và để tránh giới thiệu các lớp bổ sung, ví dụ như kho lưu trữ trên đầu của EF , những người khác quyết định tạo thêm các lớp, thậm chí vi phạm SRP bằng cách tiêm DbContext
vào Rễ tổng hợp.
Tôi xin lỗi khủng khiếp nếu tôi hỏi một câu hỏi dựa trên ý kiến, nhưng ...
Khi đi vào thực tế - Entity Framework là một trong những ORM mạnh nhất và được sử dụng rộng rãi. Thật không may, bạn sẽ không tìm thấy một khóa học toàn diện bao gồm DDD với nó, thật không may.
Khía cạnh quan trọng:
Entity Framework mang UoW & Rep Kho (
DbSet
) ra khỏi hộpvới EF mô hình của bạn có thuộc tính điều hướng
với EF tất cả các mô hình luôn sẵn tắt
DbContext
(họ được thể hiện dưới dạng mộtDbSet
)
Cạm bẫy:
bạn không thể đảm bảo các mô hình con của bạn chỉ bị ảnh hưởng thông qua Root tổng hợp - các mô hình của bạn có các thuộc tính điều hướng và có thể sửa đổi chúng và gọi
dbContext.SaveChanges()
với
DbContext
bạn có thể truy cập mọi mô hình của mình, do đó phá vỡ Root tổng hợpbạn có thể hạn chế truy cập cho trẻ em các đối tượng gốc của thông qua
ModelBuilder
trongOnModelCreating
phương pháp bằng cách đánh dấu chúng như các lĩnh vực - Tôi vẫn không tin rằng đó là con đường đúng để đi về DDD cộng thật khó để đánh giá những gì loại phiêu lưu này có thể dẫn đến trong tương lai ( khá hoài nghi )
Xung đột:
mà không thực hiện một lớp kho lưu trữ khác trả về Uẩn, chúng ta thậm chí không thể giải quyết được một phần các cạm bẫy đã nói ở trên
bằng cách triển khai thêm một lớp kho lưu trữ, chúng tôi bỏ qua các tính năng tích hợp sẵn của EF (mọi thứ
DbSet
đã là repo) và làm phức tạp ứng dụng
Kết luận của tôi:
Xin thứ lỗi cho sự thiếu hiểu biết của tôi, nhưng dựa trên thông tin trên - Khung thực thể không phù hợp với Thiết kế hướng tên miền hoặc Thiết kế hướng tên miền là một cách tiếp cận không hoàn hảo và lỗi thời .
Tôi nghi ngờ mỗi phương pháp đều có giá trị của nó, nhưng hiện tại tôi đã hoàn toàn lạc lối và không có ý tưởng nhỏ nhất về cách dung hòa EF với DDD.
Nếu tôi sai - ít nhất có ai có thể nêu chi tiết một bộ hướng dẫn đơn giản (hoặc thậm chí cung cấp các ví dụ mã hợp lý) về cách thực hiện DDD với EF không, làm ơn?