시스템을 설계 할 때 다른 모듈에서 사용하는 많은 모듈 (로깅, 데이터베이스 액세스 등)이 발생하는 문제에 종종 직면합니다. 문제는 이러한 구성 요소를 다른 구성 요소에 제공하는 방법은 무엇입니까? 두 가지 대답은 가능한 의존성 주입 또는 팩토리 패턴을 사용하는 것 같습니다. 그러나 둘 다 잘못된 것 같습니다.
- 팩토리는 테스트를 어렵게 만들고 구현을 쉽게 교체 할 수 없습니다. 또한 종속성을 명확하게 나타내지 않습니다 (예 : 데이터베이스를 사용하는 메소드를 호출하는 메소드를 호출하는 메소드를 호출한다는 사실을 알지 못하는 메소드 검사).
- Dependecy injection은 생성자 인수 목록을 크게 팽창시키고 코드 전체에서 일부 측면을 번집니다. 일반적인 상황은 반 이상의 클래스 생성자가 다음과 같은 경우입니다.
(....., LoggingProvider l, DbSessionProvider db, ExceptionFactory d, UserSession sess, Descriptions d)
여기에 문제가있는 일반적인 상황이 있습니다. 예외 클래스가 있습니다. 사용자 클래스 개체에있는 사용자 언어 설정 매개 변수가있는 쿼리를 사용하여 데이터베이스에서로드 된 오류 설명을 사용하는 예외 클래스가 있습니다. 따라서 새로운 예외를 만들려면 데이터베이스 세션과 사용자 세션이 필요한 설명이 필요합니다. 따라서 예외를 던질 필요가있는 경우를 대비하여 모든 메소드 에서이 모든 객체를 드래그하는 운명입니다.
그런 문제를 어떻게 해결합니까?