Tôi đã đến từ một thế giới kịch bản giao dịch và tôi mới bắt đầu xem xét DDD. Tôi không chắc chắn về cách chính xác để tích hợp thiết kế DDD với sự kiên trì của cơ sở dữ liệu. Đây là những gì tôi có:
Một lớp dịch vụ có tên OrganisationService có giao diện chứa các phương thức để truy xuất và lưu các thể hiện của các đối tượng miền Tổ chức. Tổ chức là một gốc tổng hợp và có dữ liệu khác liên quan đến nó: Thành viên và Giấy phép. Cơ sở dữ liệu EF6 DBContext đầu tiên được sử dụng trong OrganisationService để truy xuất các thực thể OrganisationDB và các thực thể MemberDB và LicenseDB có liên quan. Tất cả đều được chuyển đổi thành tương đương lớp đối tượng miền của họ khi được OrganisationService truy xuất và được tải vào đối tượng miền Tổ chức. Đối tượng này trông giống như vậy:
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
}
Tôi hiện không sử dụng mẫu Kho lưu trữ trong Tổ chức dịch vụ ... Tôi đang sử dụng chính EF làm Kho lưu trữ vì có vẻ như hiện tại, EF6 đã khiến kho lưu trữ trở nên dư thừa.
Tại thời điểm này trong thiết kế, đối tượng miền Tổ chức bị thiếu máu: nó trông giống như lớp Tổ chức EF POCO. Lớp OrganisationService trông rất giống Kho lưu trữ!
Bây giờ tôi cần bắt đầu thêm logic. Logic này bao gồm quản lý một giấy phép tổ chức và thành viên. Bây giờ trong tập lệnh giao dịch, tôi sẽ thêm các phương thức vào OrganisationService để xử lý các hoạt động này và gọi vào Kho lưu trữ để tương tác với DB, nhưng với DDD tôi tin rằng logic này nên được gói gọn trong chính đối tượng miền Tổ chức ...
Đây là nơi tôi không chắc chắn về những gì tôi nên làm: Tôi sẽ cần phải duy trì dữ liệu này trở lại cơ sở dữ liệu như là một phần của logic. Điều này có nghĩa là tôi nên sử dụng DbContext trong đối tượng miền Tổ chức để làm điều này? Là sử dụng kho lưu trữ / EF trong đối tượng tên miền thực hành xấu? Nếu vậy, sự kiên trì này thuộc về đâu?
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
public void AddLicensesToOrganisation(IList<License> licensesToAdd)
{
// Do validation/other stuff/
// And now Save to the DB???
using(var context = new EFContext())
{
context.Licenses.Add(...
}
// Add to the Licenses collection in Memory
Licenses.AddRange(licensesToAdd);
}
}
Thay vào đó tôi có nên thay đổi đối tượng miền Tổ chức trong bộ nhớ và sau đó đẩy nó trở lại OrganisationService để duy trì không? Sau đó, tôi phải theo dõi những gì thực sự thay đổi trên đối tượng (đó là những gì EF làm với POCO của chính nó! Tôi cảm thấy rằng EF không chỉ là một kho lưu trữ thay thế, mà còn có thể là lớp miền!)
Bất kỳ hướng dẫn ở đây được đánh giá cao.