2010-06-15 7 views
1

내 비즈니스 라인에 제품이 있습니다. 이러한 제품은 사용자가 수정을 추가하여 수정할 수 있습니다. 수정은 가격 변경 및 제품 속성 변경과 같은 일을 할 수 있습니다. 이것은 나에게 데코레이터 패턴 을 완벽하게에 맞게 나타납니다.엔터티 프레임 워크 데코레이터 패턴

이제 하나의 테이블에 제품이 있고 다른 테이블에 수정이 있고 데이터베이스가 Entity Framework를 통해 내 앱에 연결되는 데이터베이스를 구상하십시오. Product 객체와 Modification 객체를 동일한 인터페이스로 구현하여 교환 할 수 있도록하려면 어떻게해야합니까?

예를 들어 내가 할 수있는 일의 종류는 다음과 같습니다. 수정 개체가있는 경우 .GetNumThings()을 호출하면 원래 개체의 수를 더한 값 또는 더하기 수를 반환합니다. 수정으로 추가 된 것들.

이 질문은 EF의 핵심적인 부분에 대한 노출이 매우 심각한 결점으로 인해 생길 수 있습니다 (지금까지 LOB Silverlight 앱을 사용해 본 모든 경험이 사실임). RTFM에 대해 말해줘.

미리 감사드립니다.

편집 : (일대) 수정에 제품을 연결, 세 번째 테이블을 감안할 경우 그것은 또한 내가이 경계의 밖으로 가능성이 방법은 실현 (장식 된 개체를 복원 할 수 좋을 것이다 EF가 자동으로 수행하도록). 이 문제에 대해 어떻게 생각하니, 그 코드가 어디에 있을까요? 그것이 EF 클래스의 일부가 되었습니까? 아니면 DB에서받은 모든 엔티티가 Product와 수정 목록에서 데코 레이팅 된 객체를 만들기 위해 일종의 "빌더"를 통과해야합니까?

답변

0

귀하의 질문을 정확하게 이해할 수 있을지 모르겠지만 여기에 있습니다. EF 모델에 정의 된 부분 클래스를 만들 수 있습니다. 공통 인터페이스를 정의하고 부분 클래스를 사용하여 해당 인터페이스를 구현할 수 있습니다. 예를 들어

는 :

public interface IProduct{ 
    public int GetNumThings(); 
} 

public partial class Product : IProduct{ 

    public int GetNumThings() 
    { 
    ... 
    } 
} 

public partial class Modification: IProduct{ 
    public int GetNumThings() 
    { 
    ... 
    } 
} 
+0

이 동일한 인터페이스를 구현하는 두 가지를 필요로하는 문제에 응답합니다. IProduct 인터페이스가 IProduct 유형의 속성을 포함하는 것을 막을 수있는 것이 있습니까? –

+0

@Anthony Compton : 아니오, 데이터베이스에 포함 된 참조를 사용할 수도 있습니다. 결국 그것은 어쨌든 제품과 데코레이터간에 참조를 저장해야하는 것처럼 보입니다. –