Olá pessoal,
eu estou com uma dúvida aqui
eu tenho duas classes:
public class AnaliseController {
private Analise analise;
private DataModel model;
//Retorna a String de navegação.
public String novaAnalise() {...}
public Analise getAnalise() {...}
public void setAnalise(Analise analise) {...}
...
public String create() {...}
...
}
e tenho uma outra classe:
public class ExtratoSecoController{
private ExtratoSeco extSec;
//Retorna a String de navegação
public String novaAnalise() {
...
return "novo_extrato_seco";
}
public ExtratoSeco getExtSec() {...}
public void setExtSec(ExtratoSeco extSec) {...}
//Retorna o resultado da análise
//Convertendo um double em uma String.
public String calculaExtratoSeco(){...}
}
O problema é que eu tenho um link extrato_seco.jsf
quando eu clicar nesse link eu vou ter a String
de navegação chamada de “novo_extrato_seco”
o problema é que eu quero é executar um create
do Extrato Seco, eu estava pensando
em fazer o seguinte:
public class ExtratoSecoController extends AnaliseController{...}
isso é correto?
[]'s.
Olá pessoal será que alguém pode me dar uma ajuda?
[]'s.
Olá,
Não sei se entendi bem a sua questão, imagino que seja o seguinte (me corrija se estiver errado): você está pensando em fazer com que ExtratoSecoController seja filha de AnaliseController para poder aproveitar o método create().
Bom… Por um lado você pensou certo, reaproveitar o método ao invés de copiá-lo inteirinho para a outra classe. Mas essa não é a forma correta de fazer neste caso, vejamos porque:
A herança não deve ser usada simplesmente para reaproveitamento de código. Ela significa um relacionamento “É UM”. Por exemplo, Cachorro extends Animal está correto porque um cachorro É UM animal. Mas se eu fizer Cachorro extends Cavalo apenas para poder reaproveitar os métodos andar() e correr() está errado porque um cachorro NÃO É UM cavalo.
Vai funcionar, mas é conceitualmente errado e é um mau-uso da Orientação a Objeto.
Nesse caso o correto é transferir a lógica para uma outra classe, que seja utilizável pelas duas primeiras. Assim:
class AnaliseController {
public String create() {
Creator c = new Creator();
return c.create();
}
}
class ExtratoSecoController {
public String create() {
Creator c = new Creator();
return c.create();
}
}
class Creator {
public String create() {
// Aqui vai o codigo de verdade....
}
}
Aí você pode fazer alguns ajustes necessários para que tudo funcione direitinho. Por exemplo, se precisar acessar o FacesContext a classe pode virar um managed-bean, e assim por diante.