제목의 질문보기! Comparator를 주입하거나 오히려 '새로운'것이라고 생각하십니까? 요소의 순서가 사양에 설정되어 있고 변경되지 않을 가능성이 있다면 새로 도입 하시겠습니까?비교기는 새로운 개체 또는 주사 가능한 개체입니까?
답변
"이 종속성을 주입해야합니까?" 참조하는 객체가이 종속성의 본질에 대해 알고 있어야 하는가? " 어, 오직 부정입니다.
클래스가 FastestPonyFinder
이고 속도로 List<Pony>
을 정렬해야하는 경우 비교기에 대해 알아야한다고 말하고 싶습니다. 비교기는 속도로 비교해야하며 목록의 가장 빠른 순서로 정렬해야합니다. 다른 콤퍼레이터는 그 작업에 적합하지 않습니다. 객체는 List
을 만든 것처럼 비교기를 만들어야합니다.
클래스가 BestPonyFinder
인 경우 가장 적합한 구성 요소의 정의가이를 충족하는 조랑말을 찾는 방법의 정의와 분리 될 수 있기 때문에 아마도 비교기를 주입해야합니다. 이렇게하면 코드를 테스트하기가 쉬워지고 앞으로는 더 쉽게 변경 될 것입니다.
답변 해 주셔서 감사합니다! 이 사고 방식에 따라, 특정 날에 조랑말 경주에서 항상 응용 프로그램이 작동한다는 것을 알면 FastestPonyFinder에 TodaysPoniesFinder를 새로 도입 하시겠습니까? 또는 TodaysPoniesFinder가 아마도 Comparator보다 더 복잡한 것으로 생각하면 그렇지 않습니까? (사실, 그 중 하나는 아마도 'TodaysPoniesFinder'와 같은 일을하지 않을 것임을 무시하십시오). 감사! – user1405469
'TodaysPoniesFinder'의 일이 오늘 모든 경쟁하는 조랑말의 목록을 만드는 것이라면,'FastestPonyFinder'는 자신이하는 일에 대해 알 필요가 없다고 말할 것입니다; 그것은 조랑말의 명부를 일으킨 ㄴ다는 것을 단지 걱정한다. 따라서 주사해야합니다. 그것은 구체적 유형이 아닌 'PonyFinder'와 같은 유형의 매개 변수로 주입되어야합니다. –
제쳐두고,'TodaysPoniesFinder'는 완벽하게 테스트 할 수 있습니다 - 당신이 'today'의 값을 주입하는 한! 이것은 [모의목 TDD의 고전적 동작]입니다 (http://www.mockobjects.com/2007/04/test-smell-i-need-to-mock-object-i-cant.html). 매우 간단한'class Clock {public Date now() {return new Date(); }}'시간을 알아야하는 모든 객체에이를 주입합니다. 그런 다음 테스트를 위해 모의 (mock)를 주입 할 수 있습니다. –
비교기에 대한 점은 그들이 저렴하다는 것입니다. 그들은 필드를 자주 가지지 않으며, 필드가 많으면 필드가 많지 않습니다.
너무 싸기 때문에 별 문제가되지 않습니다. 그것들을 인라인으로 만들거나 정적 인 최종 필드에서 가져 오거나 싱글 톤 인젝션을 얻을 수 있습니다 - 누가 신경 써야합니까?
단위 테스트의 관점에서 볼 때 기본적으로 비교기는 getter/setter 메서드와 마찬가지로 값이 쌉니다. 그래서, 당신은 그들에 대한 테스트를 쓰는 것을 고려하지 않을 것입니다 ... – user1405469
에 따라 다릅니다. 나는 그들을 사용하는 방법을 확실히 테스트 할 것입니다. –
또한 상태가 없으면 항상 "재사용"할 수 있습니다. 이 경우 스레드 안전성을 가지며 이전에 사용했던 상태가되지 않습니다. 그래서 결국 비교기를 어떻게 구현 했느냐에 달려 있습니다 : 상태에 관계없이.
단위 테스트의 경우 Comparator의 새 인스턴스를 사용하는 것이 좋지만 비교기가 비교 메서드를 구현하는 경우에만 문제가되지 않습니다. 당신이 비교기에 상태로 어떤 데이터를 주입하기를 원한다면, 변경 가능한 Before와 After 테스트 메소드를 사용하여 이전 컨텍스트를 사용하지 않도록하십시오.
- 1. 비교기는
- 2. null이 개체입니까?
- 3. 이 값은 값 개체입니까?
- 4. 자동 재생 플래시 플레이어 개체입니까?
- 5. 값 개체 또는 개체
- 6. 상속받은 Guice 주사
- 7. 포맷 출력 전순 주사
- 8. Castle.Windsor 동적 주사
- 9. WCF가있는 세션 개체입니까?
- 10. ColdFusion, 기본 ORM 개체입니까?
- 11. 스레드는 커널 개체입니까?
- 12. WCF 용 복합 개체입니까?
- 13. 새로운 또는 새로운 [] 연산자
- 14. CoffeeScript에서 주사 작업을 수행하려면 어떻게해야합니까?
- 15. 가능한 개체 확장
- 16. 웹 브라우저에서 창 개체는 기본 ECMAScript 개체입니까?
- 17. 개체 * 또는 개체 *?
- 18. 개체 또는 값 개체?
- 19. 이벤트가 연결되어 있고 가비지 수집을위한 참조가없는 개체입니까?
- 20. jquery/ajax가 가능한 새로운 콘텐츠를로드하십시오.
- 21. 더 효율적인 것은 무엇입니까, 데이터 테이블 또는 사용자 정의 개체입니까?
- 22. 간단한 if-else PHP 주사
- 23. C#에서 람다 식 개체입니까?
- 24. C# - Excel : 셀 개체가 COM 개체입니까?
- 25. ActiveRecord에서 가장 새로운 개체 찾기
- 26. 자바 비교기는 최종 변수가 아닌 변수를 사용합니다.
- 27. 넉 아웃, ViewModel은 계산할 수없는 개체입니까?
- 28. 완전히 익명의 개체입니까? 그렇다면 어떻게 접근합니까?
- 29. 어떤 종류의 콩이 주사 할 수 있습니까?
- 30. 구성 변수 및 순차 주사 순서
좋은 질문입니다! 대답은 근본적으로 주사가 무엇인지에 대한 광범위한 아이디어를 나타냅니다 *. –