2011-08-18 4 views
2

이 질문은 가치있는 객체 및 서비스를 기반으로하는 테스트 가능한 소프트웨어 디자인에 관한 것입니다.드물게 사용 된 서비스 - 생성자 대 메서드

다음은 데이터를 파일에 저장할 수있는 간단한 서비스 API의 예입니다.

saveToFile(data, fileName) 
saveToUniqueFile(data, fileNameGenerator) 

fileNameGenerator은 임의의 파일 이름을 생성하는 서비스입니다. 데이터를 저장할 고유 한 파일 이름을 찾는 데 사용됩니다. 이 예에서는 fileNameGenerator이 메소드 매개 변수로 주입됩니다. 대안의

하나는 API 단순화 할 생성자 주입입니다 :

saveToFile(data, fileName) 
saveToUniqueFile(data) 

확실히 모든 시간을 사용하지 않는 고유 한 파일에 저장을, 그래서는 필수 생성자 매개 변수가 안 보이는군요 필수. 반면에 서비스는 대개 데이터를 통해 통신하며 여기서 서비스가 제공되며 API가 약간 혼란 스럽습니다.

메서드 매개 변수로 서비스를 전달할 때 발생할 수있는 문제/불편한 점이 있습니까? 그런 상황에서 생성자 주입을 여전히 선호해야합니까?

답변

4

매개 변수로 서비스를 전달하는 것은 필요할 때를 모르기 때문에 문제가됩니다. Methods and their parameters constitute your API, whereas the constructor doesn't. 생성자를 사용하여 서비스를 삽입하면 메서드에서 표현 된 API에서 종속성을 분리 할 수 ​​있기 때문에 훨씬 더 큰 자유도를 얻을 수 있습니다.

그렇지 않으면 그 중 하나 또는 두 가지가 필요할 수도있는 기회에 API의 모든 메소드로 메소드 인수를 전달해야합니다.

심지어 when a service is only used once in a while, it's rarely an issue을 사용하면 생성자를 통해 주입 할 수 있습니다.

0

saveToUniqueFile() 메서드가 "속한"프로그램의 컨텍스트에서 더 중요한지 여부에 달려 있습니다. 논리적으로 스스로를 저장할 수 있어야하는 객체로 작업하는 경우 생성자 주입을 사용하십시오. 객체 저장이 다른 객체 나 서비스에 의해 관리되는 경우 메서드 매개 변수 thing을 사용합니다.

서비스를 메소드 매개 변수로 사용하는 경우 참조로 전달해야합니다.

관련 문제