Domanda Wrapping classi java

lolollo2222

Utente Bronze
11 Novembre 2022
25
14
3
20
Salve a tutti volevo chiedervi se vi è mai capitato di avvolgere classi come ad esempio ServletRequest o anche altre e nel caso come avete fatto, se esiste un pattern o una tecnica migliore per farlo.
Grazie(qualsiasi esempio di codice è ben accetto).
 
Ciao, ServletRequest non è una classe, ma un'interfaccia, che viene implementata da altre classi specifiche come, ad esempio, HttpServletRequest. Se il tuo obiettivo è quello di sviluppare un'applicazione client-server con API REST non ti troverai quasi mai ad utilizzare i servlet perché sono oggetti che lavorano a basso livello e risulterebbe scomodo sviluppare un servlet per ogni risorsa accessibile del server. Solitamente si utilizzano dei framework, come jersey oppure spring boot, che gestiscono attraverso dei container, in modo automatico, la creazione e il ciclo di vita dei servlet.

Tornando alla tua domanda. Quando parli di avvolgere le classi, penso che tu ti riferisca al concetto di incapsulamento. Per incapsulare una classe, genericamente parlando, devi utilizzare proprietà private per una determinata classe (in modo da ridurre l'accoppiamento tra i componenti di un'applicazione java), utilizzare costruttori ed impostare getter/setter per l'accesso alle proprietà dall'esterno, inoltre ti vai a sviluppare un'interfaccia pubblica (insieme di metodi). Ti faccio un esempio, pensa ad una classe che gestisce un conto bancario:

Java:
public class ContoCorrente {
    //Proprietà private
    private double saldoAttuale;
    private String iban;
    //Costruttore
    public ContoCorrente(double saldoAttuale, String iban){
        this.saldoAttuale = saldoAttuale;
        this.iban = iban;
    }
    //Getter
    public double getSaldoConto(){
        return this.saldoAttuale;
    }
    
    public String getIban(){
        return this.iban;
    }
    //Setter
    public void setSaldoConto(double saldoConto){
        this.saldoAttuale = saldoConto;
    }
    
    public void setIbanConto(String iban){
        this.iban = iban;
    }
    
    //Vari metodi...
    
    public void effettuaPrelievo(double importoPrelievo){
        if (this.saldoAttuale == 0 || this.saldoAttuale < importoPrelievo){
            return;
        }
        
        this.saldoAttuale -= importoPrelievo;
    }
}

Questo è un esempio di classe incapsulata. Hai più modularità del codice e più manutenibilità: nel caso in cui occorresse modificare l'implementazione di uno dei metodi, dovresti apportare modifiche solo ai metodi stessi e per gli altri componenti dell'applicazione resterebbe tutto invariato perché stanno utilizzando un'interfaccia, in questo caso l'interfaccia della classe ContoCorrente.
 
public void setIbanCont

Ciao, ServletRequest non è una classe, ma un'interfaccia, che viene implementata da altre classi specifiche come, ad esempio, HttpServletRequest. Se il tuo obiettivo è quello di sviluppare un'applicazione client-server con API REST non ti troverai quasi mai ad utilizzare i servlet perché sono oggetti che lavorano a basso livello e risulterebbe scomodo sviluppare un servlet per ogni risorsa accessibile del server. Solitamente si utilizzano dei framework, come jersey oppure spring boot, che gestiscono attraverso dei container, in modo automatico, la creazione e il ciclo di vita dei servlet.

Tornando alla tua domanda. Quando parli di avvolgere le classi, penso che tu ti riferisca al concetto di incapsulamento. Per incapsulare una classe, genericamente parlando, devi utilizzare proprietà private per una determinata classe (in modo da ridurre l'accoppiamento tra i componenti di un'applicazione java), utilizzare costruttori ed impostare getter/setter per l'accesso alle proprietà dall'esterno, inoltre ti vai a sviluppare un'interfaccia pubblica (insieme di metodi). Ti faccio un esempio, pensa ad una classe che gestisce un conto bancario:

Java:
public class ContoCorrente {
    //Proprietà private
    private double saldoAttuale;
    private String iban;
    //Costruttore
    public ContoCorrente(double saldoAttuale, String iban){
        this.saldoAttuale = saldoAttuale;
        this.iban = iban;
    }
    //Getter
    public double getSaldoConto(){
        return this.saldoAttuale;
    }
   
    public String getIban(){
        return this.iban;
    }
    //Setter
    public void setSaldoConto(double saldoConto){
        this.saldoAttuale = saldoConto;
    }
   
    public void setIbanConto(String iban){
        this.iban = iban;
    }
   
    //Vari metodi...
   
    public void effettuaPrelievo(double importoPrelievo){
        if (this.saldoAttuale == 0 || this.saldoAttuale < importoPrelievo){
            return;
        }
       
        this.saldoAttuale -= importoPrelievo;
    }
}

Questo è un esempio di classe incapsulata. Hai più modularità del codice e più manutenibilità: nel caso in cui occorresse modificare l'implementazione di uno dei metodi, dovresti apportare modifiche solo ai metodi stessi e per gli altri componenti dell'applicazione resterebbe tutto invariato perché stanno utilizzando un'interfaccia, in questo caso l'interfaccia della classe ContoCorrente.
Va bene chiaro grazie, si mi ero confuso con HttpServletRequest
 
  • Mi piace
Reazioni: --- Ra ---