1

필요한 경우 (생성자) DI를 사용하여 멋진 도메인 모델이 있다고 가정 해보십시오. 이제이 모델을 유지할 수 있기를 원하므로 인프라 (Entity Framework)를 추가하기 시작합니다. 이제는 지속성 프레임 워크가 IoC 컨테이너를 사용하여 유형을 초기화 할 수 있어야합니다.DDD를 할 때 POCO 클래스에서 DI를 사용해야합니까?

어쩌면 가능할 수도 있지만 그렇지 않을 수도 있습니다. 어쨌든, 지금 내가 궁금해하는 것은; POCO 수업에서 DI를 사용하는 것이 일반적입니까? 그렇다면 어떻게 Entity Framework에서 내 좋아하는 IoC 컨테이너 (내 경우 NInject)를 사용하여 클래스를 구성 할 수 있습니까?

답변

2

이것은 DDD 커뮤니티의 종교적 논거 중 하나입니다. 서비스를 내 회사에 투입해야합니까?? 그것은 정말로 당신이 스스로에게 대답해야 할 질문입니다. 문맥 상 매우 상황이 다양해서 몇 가지 요인에 따라 변화한다고 생각합니다. 저는 ddd list의 아카이브를 몇 시간 동안 다룰 필요가 있다고 생각합니다.

+0

당신은 아마도 그것이 어떤 요소에 달려 있는지 자세히 설명해 주시겠습니까? ddd 아카이브에 대한 링크를 보내 주셔서 감사합니다. –

+0

물론 .. 모든것에 달려 있습니다. 테스트 스토리는 무엇입니까, 무엇이 인젝션이 가능한가, 디자인 및 아키텍처 목표는 무엇인지, 아키텍처 스타일은 무엇인지, 어떻게 디버그하고 달리 작업 할 것인가 ... –

5

데이터베이스에서 가져온 엔티티를 구성하는 데 IoC 컨테이너를 사용하는 것 이상으로 좋으며 프로젝트에서 그렇게합니다.

ORM이 디자인을 지정해서는 안됩니다. NHibernate는 IoC Container로 훌륭하게 작동 할 수 있습니다. EF에 대해서는 전혀 몰라요. NHibernate에 대해 EF를 교환 할 수 있습니다.

+0

좋습니다. 그게 내 질문 중 하나에 대한 답변이므로 DI를 계속 사용하겠습니다. NH에 대한 귀하의 추천에 감사하지만, EF와 함께 일하는 것이 정말 좋을 것입니다. –

+1

EF2를 체크 아웃하는 것보다 훨씬 덜 침략적일 수 있으므로 IOC 컨테이너에서 서비스를 제공하기 위해 건설 파이프 라인에 연결할 수 있습니다. –

+0

EF4를 POCO 템플릿과 함께 사용하고 있지만 설명서는 다음과 같습니다. 조금 지저분 해 웹 전체에 퍼져 나갔다. –

1

EF를 사용하고 싶습니다. 실제로 POCO 템플릿을 사용할 수있는 EF4를 고려해보십시오. POCO 클래스 주변에 리포지토리를 구현하면 IoC를 사용할 수있게됩니다. 다른 ORM과 함께 사용하십시오 .POCO를 사용하는 경우 응용 프로그램 아키텍처를 배치하는 것이 전부입니다.

이 산책로를 보니 :

http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx

+0

그건 정확히 내가 사용하고있는 것입니다 :-) 또한 저장소,하지만 내 개체는 아직 EF에 의해 인스턴스화 얻을. 그리고 Lazy Loading (프록시 클래스 필요)을 사용하려면 EF에서 context.CreateObject를 사용해야한다. 이 방법은 가상이 아니며 다른 확장 점도 표시되지 않습니다. –

+1

Youd는 컨텍스트를 사용할 필요가 없습니다. POCO 클래스의 모든 속성을 가상으로 표시하면 EF는 깔끔한 트릭을 수행합니다. EntityObjects가 이미 알고있는 것을 수행 할 POCO 클래스를 대신하여 프록시 EntityObjects를 스핀 업합니다. 속성 및 관계에 대한 변경 컨텍스트를 알리고 지연로드를 허용합니다. –

관련 문제