2012-02-02 2 views
4

내 목표는 가능하면 내 응용 프로그램과 분리 된 상태로 프레임 워크를 유지하는 것입니다 (완전히 가능하지는 않지만).종속성 삽입을 사용하여 비즈니스 계층 개체를 만드는 방법은 무엇입니까?

내 응용 프로그램, 매퍼 (mappers), 데이터 개체 및 값 개체에 사용되는 여러 가지 일반적인 유형의 모델이 있습니다. 예를 들어 UserMapper는 UserData 객체를 가져 와서 데이터베이스에서 정보를 수집 한 다음 Controller 내에서 사용하기 위해 UserValue 객체에 매핑합니다.

  1. UserMapper가 : UserData를 필요하며, UserValue (들)
  2. UserData를 구축 할 수있는 방법 :이 모델은 다음과 같은 종속성이 있음을 의미

    는 DB

  3. (프레임 워크)에서 UserValue이 필요합니다 : 필요 없음

종속성을 자동으로 주입 할 수 있도록 매퍼 개체, 데이터 개체 및 값 개체를 만들기 위해 프레임 워크의 DIC 메서드에 포함합니까? 아니면 비즈니스 레이어 항목을 처리하기 위해 별도의 DIC/Factory를 만들까요?

+1

모듈을 다른 모듈과 완전히 분리 할 수 ​​없습니다. 결국, 다른 모듈과 완전히 분리 된 상태로 작동하는 모듈은 누구에게도별로 사용되지 않습니다! 중요한 것은 커플 링이 얼마나 "단단한 지"입니다. DI는 모듈 간의 연결을 느슨하게 유지하는 기술입니다. 요청 된 클래스의 하위 클래스를 대체 할 수 있기 때문에 유형 삽입 힌트는 메소드 자체에서 클래스를 생성/가져 오는 것보다 느슨합니다. 인터페이스를 구현할 때 제공되는 모든 객체를 전달할 수 있기 때문에 인터페이스 유형 힌팅은 더 가깝습니다. – GordonM

+0

관련 항목 : http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to-resolve-dependencies-for-entities-business-objec/4836790#4836790 –

답변

0

종속성 주입 컨테이너가 모든 객체 생성을 처리 할 수 ​​있습니다. 여기에는 공장 패턴을 사용하는 특정 오브젝트를 작성하기 위해 팩토리를 사용하는 DIC가 포함됩니다.

DIC를 개체를 만드는 클로저로로드하고 싶습니다. 이렇게하면 모든 객체는 요청할 때만로드가 지연되지만 객체 생성과 관련하여 여전히 많은 유연성을 가질 수 있습니다.

datamapper에 빈 uservalue 개체가 지정된 방식으로 작성한 다음 DB 데이터를 기반으로 개체의 데이터를 초기화 할 수 있습니다. 다른 방법은 datamapper와 uservalue 클래스 사이에 긴밀한 연결을 생성하는 것입니다.

비즈니스 로직에서 프레임 워크를 분리하려고하면 프레임 워크의 코드에 비즈니스 로직 코드가 포함되지 않는다는 것을 의미하지 않습니다. DIC를 사용하여 비즈니스 로직에 사용되는 오브젝트를 작성했다고해서 DIC에 비즈니스 로직이 있다는 것을 의미하지는 않습니다.

+0

답변 해 주셔서 감사합니다. .. 그럼, 당신은 그때, 내 DIC는 구성, 캐시 및 세션 개체 및 UserMapper, UserValue 같은 비즈니스 물건과 같은 프레임 워크 물건을 만들 수 있다고 말하는거야? – johnnietheblack

+0

나는 왜 안 보이지. – dqhendricks

+0

생성하려는 객체의 수에 따라 컨테이너의 성능을 살펴볼 수 있습니다. DI 용기는 스테로이드가있는 공장이 아닙니다. 두건 아래에서 무거운 짐을 많이 듭니다. 문제가되지 않는 수 백 또는 수천 개의 물체. 그러나 그 숫자가 클수록 컨테이너에 더 큰 영향을 미칩니다. 일부 컨테이너는 분석 된 오브젝트 그래프의 특정 부분을 처리 할 수 ​​있도록 작성한 오브젝트를 추적합니다. 메모리 소비를 증가시킬 수있는 많은 비즈니스 오브젝트가있는 경우. –

관련 문제