디자인 작업을하고 있지만 계속 장애물을 치고 있습니다. XML 스키마를 구문 분석하여 생성 한 복잡한 노드 트리의 소유자 인 DOM (특정 클래스) 인 특정 클래스 (ModelDef)가 있습니다. 좋은 설계 원칙 (SOLID)을 따르고 결과 시스템을 쉽게 테스트 할 수 있는지 확인하고 싶습니다. DI를 사용하여 종속성을 ModelDef의 생성자로 전달하려는 모든 의도가 있습니다 (필요한 경우 테스트 중에 쉽게 바꿀 수 있도록).
그래도 내가 고투하고있는 것은 노드 트리를 만드는 것입니다. 이 트리는 독립적으로 테스트 할 필요가없는 단순한 "값"객체로 구성됩니다. (그러나 여전히 이러한 팩토리 생성을 돕기 위해 추상 팩토리를 ModelDef로 전달할 수 있습니다.)
그러나 나는 생성자 가 실제 작업을 수행해서는 안된다는 것을 계속 읽 습니다 (예 : Flaw : Constructor does Real Work ). "실제 작업"이 나중에 테스트를 위해 스터브하고 싶을 때 무거운 중량의 종속물을 만드는 것이 의미가 있다면 이것은 나에게 완벽하게 이해됩니다. (이들은 DI를 통해 전달되어야합니다.)
그러나이 노드 트리와 같은 경량의 값 객체는 어떻습니까? 나무는 어딘가에 만들어야합니까? 왜 ModelDef의 생성자를 통해 (예를 들어, buildNodeTree () 메소드를 사용하여)?
스키마를 파싱하여 노드 트리를 만들려면 상당한 양의 복잡한 코드 (철저히 테스트 해야하는 코드)가 필요하기 때문에 ModelDef 외부에서 노드 트리를 생성 한 다음 생성자 DI를 통해 전달하고 싶지 않습니다. . 나는이 코드를 "접착제 (glue)"코드로 공개하고 싶지 않다.
별도의 "builder"객체에 노드 트리를 작성하는 코드를 넣는 것을 생각했지만 실제로는 Builder Pattern과 일치하지 않기 때문에 "builder"라고 부르는 것이 주저합니다. 생성자). 그러나 내가 그것을 다른 것으로 불렀더라도 (예를 들어 NodeTreeConstructor) ModelDef 생성자가 노드 트리를 작성하지 못하게하는 것은 여전히 약간의 해킹처럼 느껴집니다. 어딘가에 지어 져야한다. 왜 그것을 소유 할 대상에 있지 않습니까?