Bir işlem komut dosyası dünyasından geldim ve DDD'ye bir göz atmaya başladım. Bir DDD tasarım veritabanı kalıcılığı ile entegre doğru yolu emin değilim. Sahip olduğum şey bu:
Arayüzü Organizasyon etki alanı nesnelerinin örneklerini alma ve kaydetme yöntemleri içeren OrganisationService adlı bir hizmet sınıfı. Kuruluş, toplu bir köküdür ve bununla ilgili başka verileri de vardır: Üyeler ve Lisanslar. EF6 veritabanı önce DBContext, OrganisationService içinde OrganisationDB varlıklarını ve ilgili MemberDB ve LicenseDB varlıklarını almak için kullanılır. OrganisationService tarafından alındığında ve Organization etki alanı nesnesine yüklendiğinde bunların tümü etki alanı nesne sınıfı eşdeğerlerine dönüştürülür. Bu nesne şöyle görünür:
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
}
OrganisationService'te Depo desenini kullanmıyorum ... EF6'nın artık depoyu artık gereksiz hale getirdiği anlaşıldığı için EF'i Depo olarak kullanıyorum.
Tasarımın bu noktasında Organizasyon etki alanı nesnesi anemiktir: EF POCO Organizasyon sınıfına benzer. OrganisationService sınıfı bir Havuz'a çok benziyor!
Şimdi mantık eklemeye başlamalıyım. Bu mantık bir Kuruluş Lisanslarının ve Üyelerinin yönetimini içerir. Şimdi işlem komut dosyası günlerinde OrganisationService'e bu işlemleri yürütmek ve DB ile etkileşim kurmak için bir Depoya çağrı yapmak için yöntemler ekleyeceğim, ancak DDD ile bu mantığın Organization etki alanı nesnesinin içinde kapsüllenmesi gerektiğine inanıyorum ...
Burada ne yapmam gerektiğinden emin değilim: Bu verileri veritabanına geri mantığın bir parçası olarak sürdürmem gerekecek. Bu, bunu yapmak için Organization etki alanı nesnesi içinde DbContext kullanmanız gerektiği anlamına mı geliyor? Etki alanı nesnesinde depo / EF kullanmak kötü bir uygulama mı? Eğer öyleyse, bu kalıcılık nereye aittir?
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);
}
}
Bunun yerine, yalnızca bellekte Organizasyon etki alanı nesnesini mutasyona uğratmalı ve daha sonra kalıcılık için OrganisationService'e geri itmeli miyim? O zaman nesne üzerinde gerçekte ne değiştiğini takip etmeliyim (EF'in kendi POCO'larına yaptığı şey budur! EF'in sadece bir depo değiştirme değil, aynı zamanda etki alanı katmanı olabileceğini de hissetmeye başlıyorum!)
Buradaki herhangi bir rehberlik takdir edilmektedir.