다음과 같은 문제가 있습니다. 일대 다 관계의 여러 계층이있는 집계 루트가 있습니다.
Root -> has many
Child -> has many
GrandChild
나는이 Controller
\가 집계 루트의 각 계층에서 수행하는 핸들 논리에요.
데이터 액세스 계층을 처리하는 방법을 모르겠습니다.
난 그냥 집계 루트 저장소 및 모든 생성해야 Child
하고 GrandChild
작업이 그것을 통해 처리받을 아니면 모든 수준의 저장소를 만들 수 괜찮을까요?
또한 GrandChildren
내 경우 엔티티는 많은 공간을 차지하므로 (텍스트 포함) 문서 데이터베이스를 사용할 것 RavenDB
입니다.
public class Root
{
public int ID{get;set;}
public IEnumerable<Child>Children;
}
public class Child
{
public int ChildID{get;set;}
public IEnumerable<Child>GrandChildren; //occupy a loot of space !
}
public class GrandChild
{
public int GrandChildID{get;set;}
}
public interface IGenericRepository<T>
{
bool Add<T>(T newValue);
T Get<T>(int id);
IEnumerable<T> GetAll();
bool Delete(int id);
bool Update<T>(T value);
}
제어 장치
public class ParentController
{
IGenericRepository<Root> repo;
public IActionResult<Root> Get(int rootId)
{
return this.repo.Get(rootId);
}
}
public class ChildControiller_V1
{
IGenericRepository<Child>repo;
public IActionResult<Child> Get(int childid)
{
this.repo.Get(childid); //the id is unique
}
}
루트를 통한 액세스
public class RootRepository:IGenericRepository<Root>
{
/// implementations
public IGenericRepository<Child> GetChildRepository()
{
return //some implementation of IGenericRepository for Child
}
}
public class ChildController_V2
{
IGenericRepository<Root>repo;
public IActionResult<Child> Get(int rootId,int childid)
{
var root=this.repo.Get(rootId);
var childRepo=root.GetChildRepository();
var get= childRepo.Get(childId);
}
}
아이디어를 얻길 바랍니다. 더 많은 레이어에 대해서는 아래까지이 작업을 수행합니다. 가장 낮은 엔티티가 다른 엔티티에 비해 많은 공간을 차지한다는 점을 고려할 때 좋은 접근 방법은 무엇입니까?
최신 정보
는 Root
지원해야합니다 Create
, Delete
많은 여기 일이 없습니다 - 지원해야합니다 , - (포커스가 될 것입니다 , 같은 여기)를 (가) 전체 지원해야합니다 무거운 집약적 인 작업과 의 .Their 테이블 크기 >> 될 것입니다 >>> 다른 모든 항목이 결합되어 모두 일반 텍스트 열이 있습니다. 내가 말 하거나 전형적인 SQ L 데이터베이스에서 동등한 것을 언급 할 때Child
Create
Delete
GET
GET 5 children starting from index=10
Grandchildren
CRUD
Update
GrandChildren
Grandchild
table
column
(클래식) DDD 관점에서 리포지토리는 완전히 구체화 된 집계를 반환하며, 여기서 집계는 일관성 / 트랜잭션 경계를 나타냅니다. 자녀와 손자 저장소가 있다는 것은 그것을 포기하고 DDD의 큰 이점을 의미합니다. 즉, 일관성 경계가 어디에 있는지 확인해야합니다. 엔티티 사이에 제약이 있습니까? 그렇지 않은 경우 자체 집계가있을 수 있습니다. 집계는 다른 집계에 나타나지 않으며 항목의 참조는 집계 루트로만 이동해야하며 다른 집계의 계층 구조에있는 일부 다른 항목으로 이동해서는 안됩니다.
나는 이미 여기 내 대답에서 흥미로울 수있는 몇 가지 다른 요점, 특히 데이터가 너무 많은 경우의 방향을 언급했습니다. https://stackoverflow.com/a/59189413/2613363
마지막으로 Raven에는 버전 (etags)이 있습니다. 많은 하위 항목을 업데이트하는 경우이를 사용하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다