Java 코드에서 데이터 액세스 객체 (DAO)를 정의 할 수있는 인터페이스가 있습니다. 대부분의 메소드는 DTO (Data Transfer Object)의 매개 변수를 사용합니다. 이 문제는 DAO의 구현이 특정 유형의 DTO를 참조해야 할 때 발생합니다. 그런 다음 메서드는 특정 DTO에 대한 DTO의 불필요한 캐스트를 수행해야합니다. 컴파일러는 DAO의 특정 구현에 대해 모든 유형의 유형을 검사 할 수 없습니다. . DTO들 내 질문은 : 나는 가장 작은 방식으로이 문제를 해결 어떻게인터페이스가 너무 일반적입니다.
3
A
답변
12
당신은 제네릭을 사용할 수 있습니다?
DAO<SpecificDTO> dao = new SpecificDAO();
dao.save(new SpecificDTO());
etc.
당신의 DAO 클래스의 모습 :
interface DAO<T extends DTO> {
void save(T);
}
class SpecificDAO implements DAO<SpecificDTO> {
void save(SpecificDTO) {
// implementation.
}
// etc.
}
SpecificDTO 것 연장 또는 메신저 plement DTO.
0
제네릭에 리팩토링하면 통증이 거의 없습니다.
DTO user = userDAO.getById(45);
((UserDTO)user).setEmail(newEmail)
userDAO.update(user);
난이 (훨씬 더 미묘한 방법으로) 다 봤어요 : 코드는 다음처럼 DTO 인터페이스를 사용하는 경우
특히 끔찍한 될 것입니다.
이 작업을 수행 할 수 있습니다 :
public DeprecatedDAO implements DAO
{
public void save(DTO dto)
{
logger.warn("Use type-specific calls from now on", new Exception());
}
}
public UserDAO extends DeprecatedDAO
{
@Deprecated
public void save(DTO dto)
{
super.save(dto);
save((UserDTO)dto);
}
public void save(UserDTO dto)
{
// do whatever you do to save the object
}
}
을 이것은 큰 솔루션이 아니라 쉽게 구현할 수 있습니다; 레거시 코드는 여전히 작동해야하지만, 경고를 생성하고 추적을 스택하여 사냥을 돕고, 유형 안전 구현도합니다.
관련 문제
- 1. 코드에서 쿼리 결과를 추가로 조작하는 것이 일반적입니다.
- 2. SMS를 통한 이메일 (다른 방법으로는 아주 일반적입니다.)
- 3. ROT에서 COM 인터페이스가 사라짐
- 4. 매핑 I 인터페이스가 NHibernate에
- 5. cmd.exe에 대한 인터페이스가 있습니까
- 6. Java 인터페이스가 프록시되었는지 테스트합니다.
- 7. Go에서 정확히 인터페이스가 작동합니까?
- 8. 인터페이스가 구현자를 알고 있습니다.
- 9. 테스트 인터페이스가 의미가 있습니까?
- 10. 인터페이스가 얼마나 세분화되어야하는지 판단하십시오.
- 11. 인터페이스가 아닌 모의 클래스
- 12. System.IO.Stream 용 인터페이스가 있습니까?
- 13. 다른 인터페이스가 이미
- 14. SQLAlchemy에 CRUD 인터페이스가 빠르고 깔끔합니까?
- 15. 너무
- 16. MVC 응용 프로그램에 너무 많은 인터페이스가있는 이유
- 17. MySQL에 비 텍스트 인터페이스가 있습니까?
- 18. django-staticfiles 관리자 인터페이스가 깨어짐
- 19. 인터페이스가 코드 중복으로 DDD를 해결합니까?
- 20. Serializable 표준 클로저 인터페이스가 있습니까?
- 21. 인터페이스가 구현과 다른 프로젝트에 있어야합니까?
- 22. RESTful 웹 서비스의 인터페이스가 필요합니까?
- 23. 기본 인터페이스가 아닌 메소드 액세스
- 24. 여러 인터페이스가 작동하지 않는 ObjectForScripting
- 25. 프로그래밍에 따라 인터페이스가 모든 것을 숨겨야합니까?
- 26. 가상 메서드가 많은 인터페이스가 하나 있습니까? 또는 하나의 가상 메소드 만 가진 많은 인터페이스가 있습니까?
- 27. 간접 지정 계층이 너무 많습니다. 너무 많습니까?
- 28. mySQL 인덱스는 너무 많은 행이 너무 많습니까?
- 29. 너무 많은 추상화/인터페이스
- 30. 페이지 매김을 선언하는 추상 ADO.NET 인터페이스가 있습니까?
감사합니다. 처음에는 컴파일러를 사용하여 몇 가지 주장을 한 후에 완전히 이해할 수 없었습니다. –