nHibernate을 사용하는 기존 프로젝트의 소스 코드를 살펴본 결과 각 엔티티 클래스에 대해 생성 된 인터페이스가 있다는 것을 알게되었습니다. 예 : 고객고객 클래스입니다. 고객 번호에는 주로 속성과 매우 적은 메서드가 포함되어 있으므로이 패턴의 이점이 무엇인지 궁금합니다.각 도메인 객체에 대한 인터페이스를 만드는 것이 좋은 생각입니까?
2
A
답변
9
아니요. 인터페이스는 구현과 동작을 구분하여 인터페이스의 클라이언트에 영향을 미치지 않고 후자를 스왑 아웃 할 수 있습니다.
도메인 개체에 다른 구현이 필요하지 않은 경우 인터페이스가 필요하지 않습니다. 동적 프록시 생성이나 측면 또는 구현 변경이 필요한 경우에만 소개하십시오.
1
이전의 의견에 동의하지 않습니다 ... Inversion of Control (IoC) 및 Dependency Injection과 같은 패턴과 결합하면 서로 간의 레이어를 훨씬 쉽게 분리 할 수 있습니다. 이것은 Unit Testing, Mocking을 단순화하고 느슨하게 결합 된 아키텍처로 이어질 수 있습니다. 인터페이스를 사용하지 않아도 클래스를 봉인하지 않고 멤버를 가상으로 만들면 모의하고 프록시를 생성 할 수 있습니다. 마지막으로 인터페이스를 사용하면 모든 클래스와 관련된 가정을 삭제할 수 있습니다. 하나의 구체적인 구현체이며 인터페이스 정의가 나타내는 계약에 중점을 둡니다.
관련 문제
- 1. mysql 연결을 정적으로 만드는 것이 좋은 생각입니까?
- 2. QT : QObject에서 내 도메인 객체를 기반으로하는 것이 좋은 생각입니까?
- 3. 클래스 매개 변수를 세션 객체에 넣는 것이 좋은 생각입니까?
- 4. ViewModels을 집계하는 것이 좋은 생각입니까?
- 5. "비즈니스 로직 코드를 도메인 모델로 마이그레이션"하는 것이 좋은 생각입니까?
- 6. .Net을 상용 소프트웨어로 사용하는 것이 좋은 생각입니까?
- 7. PHP/Apache에서 프로세스 포크를 만드는 것이 좋은 생각입니까?
- 8. DOM 만 사용하여 PHP 웹 사이트를 만드는 것이 좋은 생각입니까?
- 9. 각 모델에 대한 인터페이스를 만들어야합니까?
- 10. 기계어 프리미티브의 복수가 아닌 것이 좋은 생각입니까?
- 11. Workers를 사용하여 이벤트를 확인하는 것이 좋은 생각입니까?
- 12. 코인 플립을 시뮬레이션하는 것이 더 좋은 생각입니까?
- 13. 그런 상황에서 파티션을 사용하는 것이 좋은 생각입니까?
- 14. Python 클래스 구문 -이 것이 좋은 생각입니까?
- 15. 자체 생성자에서 스레드를 시작하는 것이 좋은 생각입니까?
- 16. 하와이를 데이터베이스 시간대로 사용하는 것이 좋은 생각입니까?
- 17. VCS에 문서를 보관하는 것이 좋은 생각입니까?
- 18. MySQL에 그래프를 저장하는 것이 좋은 생각입니까?
- 19. VB.net, ASP.net에서 Java로 전환하는 것이 좋은 생각입니까?
- 20. ThreadLocal을 데이터의 컨텍스트로 사용하는 것이 좋은 생각입니까?
- 21. Google 스프레드 시트에 $ .post하는 것이 좋은 생각입니까?
- 22. 하나의 데이터베이스에 대해 많은 사용자를 확보하는 것이 좋은 생각입니까?
- 23. Magento에 대한 pyUnit 단위 테스트가 좋은 생각입니까?
- 24. 사소한 반환 유형에 대한 인터페이스를 만드는 것이 가치가 있습니까?
- 25. JOIN으로 생성 된 도메인 객체에 대한 업데이트
- 26. 레코드에 대한 액세스 제한. 클레임 기반 권한은 좋은 생각입니까
- 27. Grails의 여러 도메인 객체에 대한 쿼리
- 28. 웹 서비스의 데이터를 데이터베이스에 캐시하는 것이 좋은 생각입니까?
- 29. 레코드 대신 연결 목록을 사용하는 것이 좋은 생각입니까?
- 30. Mulitple FileSystemWatchers는 좋은 생각입니까?
+1 어디서나 인터페이스를 사용하기가 너무 쉽기 때문에 +1. 말하자면 어디에서나 '극소수의 메소드'를 사용해야하거나 Customer 객체의 생성자가 비즈니스 규칙을 적용해야한다면 인터페이스를 추출 할 준비가되어 있어야합니다. 당신은 다른 클래스를 테스트하기 위해 유효한 concrete Customer 인스턴스를 생성하지 않아도됩니다. –
인터페이스도 버전 문제에 악명이 높습니다. 특별히 인터페이스를 정의 할 필요가 없다면하지 마십시오. – Will