역방향으로 생성되어 내 응용 프로그램에서 사용할 수 있도록 두 개의 데이터 액세스 개체가 있습니다. 그들은 매우 유사한 테이블을 나타냅니다. 한 테이블에는 다른 테이블보다 몇 개의 추가 열이 있습니다. 이것은 비즈니스 지향적 인 데이터베이스 소유권 문제로 인해 통제 할 수없는 것입니다.인터페이스없이 복사/붙여 넣기 코드 제거
응용 프로그램에는 현재이 DAO에서 작동하는 리포지토리의 두 가지 구현이 있습니다. 구현은 매우 유사합니다. 하나는 두 번째 DAO의 추가 열에 해당하는 몇 가지 추가 작업이 있습니다. 그러나 몇 가지 예외 만 제외하면 하나의 구현은 다른 하나의 복사 및 붙여 넣기입니다. 구현은 수백 줄의 길이입니다.
그래서 복사/붙여 넣기 작업을 제거하고 싶습니다. 이상적으로는 DAO 앞에 인터페이스를 붙여 놓은 다음 추상 클래스를 사용하여 공유 코드 (거의 모든 코드)를 유지할 수 있습니다. 그러나 DAO 앞에 인터페이스를 배치 할 수는 없습니다. 그들은 역 생성 된 것을 기억하고 우리의 ORM 소프트웨어를 업그레이드하지 않고서는 이것이 합당한 선택이라고 생각하지 않습니다. (Kodo 3.x는 이것이 범위를 변경하는 것이 아니라고 생각합니다).
내가 생각할 수있는 유일한 사실은 리플렉션을 통해 약간의 불쾌감이 있지만 그 결과는 지금보다 훨씬 나쁜 것입니다.
영리한 솔루션?
편집 : 여기에 매우 난 당신이 중복 된 코드 일부 제어를 가정하고 코드 예제
package one.dao
//reverse generated
class UserDao {
getFirstName(..);
setFirstName(..);
getLastName(..);
.... 50 more just like this
}
package two.dao
//reverse generated
class UserDao {
getFirstName(..);
setFirstName(..);
getLastName(..);
.... the same 50 more as above
getSomethingElse(..); //doesn't exist in one.dao.UserDao
setSomethingElse(..); //doesn't exist in one.dao.UserDao
}
class RepositoryOne(one.dao.UserDao userDao) {
//insert code here. perform operations on nearly all methods, lots of code
}
class RepositoryTwo(two.dao.UserDao userDao) {
//insert code here. same as Repository one
//some extra code that isn't above, maybe 10 lines
}
간단한 \ 물결 무늬가있는 코드 샘플을 게시 할 수 있습니까? – javamonkey79