2009-10-08 3 views
0

이것은 약간의 개념적 질문이지만 생각해 보면 적절하다고 생각합니다.관계가 있지만 콜렉션이없는 POCO 객체를 알 수 없음 - Mutli tier

얼마 동안 NHibernate와 작업하고 있지만 POCO 객체내에서 컬렉션을 사용하는 것이 어렵다는 것을 알았습니다. 1. 프록시 개념이 좋다고 생각합니다. 그러나 다중 계층 아키텍처에서 사용하기를 원할 때 . 2. DB의 모든 유형의 요청에 비즈니스 로직을 추가하고 싶습니다. 예 : 승인 제한 등. 3. 컬렉션에서 엔티티를 추가하거나 제거 할 때 비즈니스 로직을 추가하고 싶습니다.

그리고 컬렉션과 프록시에 문제가있는 이유가 더 있습니다.

아마도 컬렉션이 없으면 POCO 개체를 사용하고 하위 쿼리 및 연결 등을 처리하도록 서비스 레이어를 사용할 수있는 방법이 있다고 생각했습니다. Nhibernate가 작동하려면 모음이 필요하지만 나는 서비스 계층에서 벗어나 객체를 플랫 화하고 모든 콜렉션을 제거하려고합니다. 이 방법은 내 자신의 운영 및 비즈니스 논리를 구현할 수 있습니다.

표준 방법은 무엇입니까? 개체를 부착하고 분리해야합니까? POCO 개체에서 DTO 개체를 만들고 필드 등을 복사하는 방법은 무엇입니까?

누구나 그 모범 사례를 가지고 있었고 동일한 작업을 수행 했습니까?

나는 어떤 관계도없이 POCO 객체를 만들고 매핑을 통해 관계를 nhibernat 만 알 수있었습니다. 다음 세션을 사용하여 개체 간의 연결을 제어 할 수 있습니다.

감사합니다, 노암

+0

나는 당신의 질문을 완전히 이해하고 있는지 잘 모르겠다.뉴 햄프셔는 'ID'값을 제외하고는 아무것도 작동하지 않아도되므로, 원하지 않는 매핑의 모든 것을 무시할 수 있습니다. 그러나 이것이 당신의 질문이 아니란 것 같군요. –

+0

매핑에서 컬렉션을 항상 지정할 필요는 없습니다. 다른 쪽 끝이 다 대일 인 경우 이러한 컬렉션을 개별적으로 관리 할 수 ​​있습니다. 나는 일반적으로 cascade = "delete"의 편의를 위해서만 컬렉션을 정의한다. – dotjoe

답변

0

당신은 내가 당신에게이 방법을 제안 할 수 있습니다 컬렉션에서 전체 제어를 원한다면 :

  1. 당신은 읽기 전용 컬렉션을 사용됩니다 :

    가상 공개 ReadOnlyCollection ChildActions { 을 얻습니다. { return new ReadOnlyCollection (새 목록 (childActions)); } } 사용할 수있는 매핑 백업 필드에서

  2. 개인 ISET childActions; null도하지 않습니다 컬렉션을 보장하기 위해

  3. 당신이 생성자에서 다음 일은하기 위해 할 수있는 (unnessesary 검사를 피하기) :

    childActions = 새로운 HashedSet(); 당신이 방법을 사용할 수 있습니다 컬렉션에서 항목을 추가 및 제거에 대한

  4. :

    public virtual void AddChildAction(ActionOnClient actionToAdd) 
    { 
        //some logic here 
    
        childActions.Add(actionToAdd); 
    } 
    public virtual void AddChildAction(ActionOnClient actionToAdd) 
    { 
        //some logic here 
    
        childActions.Remove(actionToAdd); 
    } 
    

    이 방법은 당신에게 당신의 컬렉션에 대한 모든 권한을 줄 것이다. 도움이 되었으면 좋겠다.

+0

이것은 좋은 시도 다. 내가 찾은 것을 당신에게 알려줄 것입니다. –

관련 문제