Par exemple, considérons que j'ai une classe pour que d'autres classes puissent s'étendre:
public class LoginPage {
public String userId;
public String session;
public boolean checkSessionValid() {
}
}
et quelques sous-classes:
public class HomePage extends LoginPage {
}
public class EditInfoPage extends LoginPage {
}
En fait, la sous-classe n'a aucune méthode à remplacer, je ne voudrais pas non plus accéder à la page d'accueil de manière générique, c'est-à-dire: je ne ferais pas quelque chose comme:
for (int i = 0; i < loginPages.length; i++) {
loginPages[i].doSomething();
}
Je veux juste réutiliser la page de connexion. Mais selon https://stackoverflow.com/a/53354 , je devrais préférer la composition ici car je n'ai pas besoin de l'interface LoginPage, je n'utilise donc pas l'héritage ici:
public class HomePage {
public LoginPage loginPage;
}
public class EditInfoPage {
public LoginPage loginPage;
}
mais le problème vient ici, à la nouvelle version, du code:
public LoginPage loginPage;
duplique quand une nouvelle classe est ajoutée. Et si LoginPage doit être défini et activé, davantage de codes doivent être copiés:
public LoginPage loginPage;
private LoginPage getLoginPage() {
return this.loginPage;
}
private void setLoginPage(LoginPage loginPage) {
this.loginPage = loginPage;
}
Ma question est donc la suivante: la "composition fondée sur l'héritage" viole-t-elle le "principe sec"?
extends LoginPage
partout. CHECK MATE!
LoginPage
décoratrice. Pas plus de duplication, juste un simple page = new LoginPage(new EditInfoPage())
et vous avez terminé. Ou bien vous utilisez le principe open-closed pour créer le module d'authentification pouvant être ajouté à n'importe quelle page de manière dynamique. Il existe de nombreuses façons de gérer la duplication de code, notamment en trouvant une nouvelle abstraction. LoginPage
est probablement un mauvais nom, ce que vous voulez vous assurer, c’est que l’utilisateur est authentifié lorsqu’il navigue sur cette page, tout en étant redirigé vers le LoginPage
ou affiché un message d’erreur approprié s’il ne l’est pas.