나는 거래 스크립트 세계에서 왔으며 방금 DDD를 살펴보기 시작했습니다. DDD 디자인을 데이터베이스 지속성과 통합하는 올바른 방법이 확실하지 않습니다. 이것이 내가 가진 것입니다 :
인터페이스에 Organization 도메인 객체의 인스턴스를 검색하고 저장하는 메소드가 포함 된 OrganisationService라는 서비스 클래스. 조직은 집계 루트이며 이와 관련된 다른 데이터가 있습니다 (멤버 및 라이센스). EF6 데이터베이스의 첫 번째 DBContext는 OrganisationService 내에서 OrganisationDB 엔티티 및 관련 MemberDB 및 LicenseDB 엔티티를 검색하는 데 사용됩니다. 이들은 모두 OrganisationService에 의해 검색되어 Organization 도메인 객체로로드 될 때 해당 도메인 객체 클래스로 변환됩니다. 이 객체는 다음과 같습니다.
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
}
OrganisationService에서 Repository 패턴을 사용하고 있지 않습니다 ... EF6가 현재 리포지토리를 대체로 중복시킨 것으로 보이므로 EF 자체를 리포지토리로 사용하고 있습니다.
디자인의 현재 시점에서 조직 도메인 개체는 혐의입니다. EF POCO Organization 클래스처럼 보입니다. OrganisationService 클래스는 리포지토리와 매우 비슷합니다!
이제 논리 추가를 시작해야합니다. 이 논리에는 조직 라이센스 및 멤버 관리가 포함됩니다. 이제 트랜잭션 스크립트 일에 이러한 작업을 처리하기 위해 OrganisationService에 메소드를 추가하고 DB와 상호 작용하기 위해 리포지토리를 호출하지만 DDD를 사용하면이 논리가 조직 도메인 객체 자체 내에 캡슐화되어야한다고 생각합니다 ...
여기에서 내가 무엇을해야할지 잘 모르겠습니다.이 데이터를 논리의 일부로 데이터베이스에 다시 유지해야합니다. 이것이 조직 도메인 개체 내에서 DbContext를 사용해야한다는 의미입니까? 도메인 개체 내에서 리포지토리 / EF를 사용하는 것이 좋지 않습니까? 그렇다면이 지속성은 어디에 속합니까?
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);
}
}
대신 메모리에서 조직 도메인 개체를 변경 한 다음 지속성을 위해 다시 조직 서비스로 푸시해야합니까? 그런 다음 객체에서 실제로 변경된 사항을 추적해야합니다 (EF가 자체 POCO에 수행하는 작업입니다! EF가 저장소 교체가 아니라 도메인 계층이 될 수 있음을 느끼게됩니다!)
여기에 모든 지침을 부탁드립니다.