일대 다 관계의 여러 계층에 대해 DAL을 처리하는 방법은 무엇입니까?

Bercovici Adrian

다음과 같은 문제가 있습니다. 일대 다 관계의 여러 계층이있는 집계 루트가 있습니다.

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 데이터베이스에서 동등한 것을 언급 할 때
ChildCreateDeleteGETGET 5 children starting from index=10

GrandchildrenCRUDUpdateGrandChildrenGrandchildtablecolumn

데본 부리스

(클래식) DDD 관점에서 리포지토리는 완전히 구체화 된 집계를 반환하며, 여기서 집계는 일관성 / 트랜잭션 경계를 나타냅니다. 자녀와 손자 저장소가 있다는 것은 그것을 포기하고 DDD의 큰 이점을 의미합니다. 즉, 일관성 경계가 어디에 있는지 확인해야합니다. 엔티티 사이에 제약이 있습니까? 그렇지 않은 경우 자체 집계가있을 수 있습니다. 집계는 다른 집계에 나타나지 않으며 항목의 참조는 집계 루트로만 이동해야하며 다른 집계의 계층 구조에있는 일부 다른 항목으로 이동해서는 안됩니다.

나는 이미 여기 내 대답에서 흥미로울 수있는 몇 가지 다른 요점, 특히 데이터가 너무 많은 경우의 방향을 언급했습니다. https://stackoverflow.com/a/59189413/2613363

마지막으로 Raven에는 버전 (etags)이 있습니다. 많은 하위 항목을 업데이트하는 경우이를 사용하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

일대 다 관계 : 자식 테이블의 단일 행에서 여러 열을 반환하는 방법은 무엇입니까?

분류에서Dev

관계 중 하나가 선택 사항 인 동안 다 대일 관계의 두 계층 수준을 정규화하는 방법은 무엇입니까?

분류에서Dev

일대 다 관계의 여러 계층을 통한 MYSQL 쿼리

분류에서Dev

단일 사용자의 여러 요소에 대해 서로 다른 역할을 처리하는 방법은 무엇입니까?

분류에서Dev

다 대일 관계의 한쪽에 참조 무결성을 적용하는 방법은 무엇입니까?

분류에서Dev

Laravel에서 다 대다 관계의 일대 다 관계에서 항목을 얻는 방법은 무엇입니까?

분류에서Dev

Plotly : 여러 다른 시계열에 대해 하나의 변수에 대한 회귀선을 표시하는 방법은 무엇입니까?

분류에서Dev

GraphQL을 사용하여 일대 다 관계를 만드는 방법은 무엇입니까?

분류에서Dev

다 대다 관계의 속성에서 장고 쿼리의 값을 얻는 방법은 무엇입니까?

분류에서Dev

다 대다 관계의 속성에서 장고 쿼리의 값을 얻는 방법은 무엇입니까?

분류에서Dev

SQL을 사용하여 Oracle에서 일대 다 관계의 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

계산 된 쿼리 셋 값을 수정하는 방법은 무엇입니까? (다 대일 관계 반전)

분류에서Dev

Postgres에서 다 대다 관계에 대해 관련되지 않은 항목을 선택하는 SQL 쿼리를 작성하는 방법은 무엇입니까?

분류에서Dev

laravel에 일대 다 관계를 삽입하는 방법은 무엇입니까?

분류에서Dev

라 라벨에서 hasMany 관계를 통해 일대일 다형성 관계 열을 합하는 방법은 무엇입니까?

분류에서Dev

Mirage JS에서 다형성 일대일 관계로 모델을 시드하는 방법은 무엇입니까?

분류에서Dev

Entity Framework에서 일대 다 관계에 참여하는 방법은 무엇입니까?

분류에서Dev

ManyToOne 관계의 반대쪽을 쿼리하는 방법은 무엇입니까?

분류에서Dev

일대 다 관계에 대한 중간 테이블을 갖는 방법은 무엇입니까?

분류에서Dev

Id 대신 관계 (일대 다) 값을 직접 반환하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

다른 유형의 두 노드가 특정 속성에 대해 동일한 값을 가질 때 cypher와 관계를 만드는 방법은 무엇입니까?

분류에서Dev

일대 다 관계에서 연관을 null로 만드는 방법은 무엇입니까?

분류에서Dev

여러 개체에 대해 하나의 처리기를 사용하는 방법은 무엇입니까?

분류에서Dev

다 대다 관계에서 단일 역할을 가진 사용자를 찾는 방법은 무엇입니까?

분류에서Dev

이 일대 다 관계 데이터를 laravel에서 계층 적 순서로 표시하는 방법은 무엇입니까?

분류에서Dev

'다'측을 선택한 후 유성에서 일대 다 관계의 '일'측을 게시하는 방법은 무엇입니까?

분류에서Dev

다 대다 관계의 참조 컬렉션을 설정하는 방법은 무엇입니까?

분류에서Dev

Access VBA : 일대 다 관계에서 하위 폼을 검색하여 메인폼을 필터링하는 방법은 무엇입니까?

분류에서Dev

이 다 대다 관계에 대해 관계형 데이터베이스 테이블을 설정하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    일대 다 관계 : 자식 테이블의 단일 행에서 여러 열을 반환하는 방법은 무엇입니까?

  2. 2

    관계 중 하나가 선택 사항 인 동안 다 대일 관계의 두 계층 수준을 정규화하는 방법은 무엇입니까?

  3. 3

    일대 다 관계의 여러 계층을 통한 MYSQL 쿼리

  4. 4

    단일 사용자의 여러 요소에 대해 서로 다른 역할을 처리하는 방법은 무엇입니까?

  5. 5

    다 대일 관계의 한쪽에 참조 무결성을 적용하는 방법은 무엇입니까?

  6. 6

    Laravel에서 다 대다 관계의 일대 다 관계에서 항목을 얻는 방법은 무엇입니까?

  7. 7

    Plotly : 여러 다른 시계열에 대해 하나의 변수에 대한 회귀선을 표시하는 방법은 무엇입니까?

  8. 8

    GraphQL을 사용하여 일대 다 관계를 만드는 방법은 무엇입니까?

  9. 9

    다 대다 관계의 속성에서 장고 쿼리의 값을 얻는 방법은 무엇입니까?

  10. 10

    다 대다 관계의 속성에서 장고 쿼리의 값을 얻는 방법은 무엇입니까?

  11. 11

    SQL을 사용하여 Oracle에서 일대 다 관계의 데이터를 얻는 방법은 무엇입니까?

  12. 12

    계산 된 쿼리 셋 값을 수정하는 방법은 무엇입니까? (다 대일 관계 반전)

  13. 13

    Postgres에서 다 대다 관계에 대해 관련되지 않은 항목을 선택하는 SQL 쿼리를 작성하는 방법은 무엇입니까?

  14. 14

    laravel에 일대 다 관계를 삽입하는 방법은 무엇입니까?

  15. 15

    라 라벨에서 hasMany 관계를 통해 일대일 다형성 관계 열을 합하는 방법은 무엇입니까?

  16. 16

    Mirage JS에서 다형성 일대일 관계로 모델을 시드하는 방법은 무엇입니까?

  17. 17

    Entity Framework에서 일대 다 관계에 참여하는 방법은 무엇입니까?

  18. 18

    ManyToOne 관계의 반대쪽을 쿼리하는 방법은 무엇입니까?

  19. 19

    일대 다 관계에 대한 중간 테이블을 갖는 방법은 무엇입니까?

  20. 20

    Id 대신 관계 (일대 다) 값을 직접 반환하는 가장 좋은 방법은 무엇입니까?

  21. 21

    다른 유형의 두 노드가 특정 속성에 대해 동일한 값을 가질 때 cypher와 관계를 만드는 방법은 무엇입니까?

  22. 22

    일대 다 관계에서 연관을 null로 만드는 방법은 무엇입니까?

  23. 23

    여러 개체에 대해 하나의 처리기를 사용하는 방법은 무엇입니까?

  24. 24

    다 대다 관계에서 단일 역할을 가진 사용자를 찾는 방법은 무엇입니까?

  25. 25

    이 일대 다 관계 데이터를 laravel에서 계층 적 순서로 표시하는 방법은 무엇입니까?

  26. 26

    '다'측을 선택한 후 유성에서 일대 다 관계의 '일'측을 게시하는 방법은 무엇입니까?

  27. 27

    다 대다 관계의 참조 컬렉션을 설정하는 방법은 무엇입니까?

  28. 28

    Access VBA : 일대 다 관계에서 하위 폼을 검색하여 메인폼을 필터링하는 방법은 무엇입니까?

  29. 29

    이 다 대다 관계에 대해 관계형 데이터베이스 테이블을 설정하는 방법은 무엇입니까?

뜨겁다태그

보관