예를 들어, 다른 클래스를 확장 할 클래스가 있다고 가정합니다.
public class LoginPage {
public String userId;
public String session;
public boolean checkSessionValid() {
}
}
일부 서브 클래스 :
public class HomePage extends LoginPage {
}
public class EditInfoPage extends LoginPage {
}
사실, 서브 클래스에는 재정의 할 메소드가 없으며 일반적인 방법으로 HomePage에 액세스하지 않습니다.
for (int i = 0; i < loginPages.length; i++) {
loginPages[i].doSomething();
}
로그인 페이지를 재사용하고 싶습니다. 그러나 https://stackoverflow.com/a/53354 에 따르면 LoginPage 인터페이스가 필요하지 않으므로 여기에서 작성을 선호해야하므로 상속을 사용하지 않습니다.
public class HomePage {
public LoginPage loginPage;
}
public class EditInfoPage {
public LoginPage loginPage;
}
그러나 문제는 새 버전의 코드에서 발생합니다.
public LoginPage loginPage;
새 클래스가 추가되면 복제됩니다. LoginPage에 setter 및 getter가 필요한 경우 더 많은 코드를 복사해야합니다.
public LoginPage loginPage;
private LoginPage getLoginPage() {
return this.loginPage;
}
private void setLoginPage(LoginPage loginPage) {
this.loginPage = loginPage;
}
제 질문은 "상속성 구성"이 "건조한 원칙"을 위반하는 것입니까?
extends LoginPage
통해 모든 곳에서 복제 가 이루어집니다. 메이트 확인!
LoginPage
데코레이터를 만들 수 있습니다 . 더 이상 중복되지 않고 간단하게 page = new LoginPage(new EditInfoPage())
완료됩니다. 또는 open-closed-principle을 사용하여 모든 페이지에 동적으로 추가 할 수있는 인증 모듈을 만듭니다. 코드 복제를 처리하는 많은 방법이 있으며 주로 새로운 추상화를 찾는 것과 관련이 있습니다. LoginPage
잘못된 이름 일 가능성이 높습니다. 사용자가 해당 페이지를 탐색하는 동안 사용자를 인증 하고 해당 페이지로 리디렉션되는 동안 인증LoginPage
되지 않았거나 올바른 오류 메시지가 표시되지 않았는지 확인해야합니다.