Ecco lo scenario,come disaccoppiare i dati di business logic
Diciamo che ho una classe utente in questo modo:
public class User{
private String firstName;
private String lastName;
//...
// setter, getters
}
Poi ho una classe in questo modo di gestire Commenti utenti:
public class Comments{
// some fields
public static loadComments(User user, int count){...}
}
Finora cose molto di base. Tuttavia, voglio aggiungere naturalmente degli helper per rendere più semplice il caricamento dei commenti per l'utente. Così ho potuto creare qualcosa nella classe User:
final static int defaultCount = 10;
...
public Comment comments(){
return Comments.loadComments(this, defaultCount);
}
Penso che questo sia un modo semplice per non dover passare attorno alle istanze degli utenti. Ma a questo punto, sono infelice perché ho accoppiato il mio oggetto bean utente con la logica di business che carica il commento. Ho anche salvato il conteggio predefinito in user class che non dovrebbe appartenere a questo. Quindi qual è il modo migliore per farlo? Il mio obiettivo è passare questo oggetto a un jsp in modo da poter chiamare le funzioni JSTL. Mi è venuta l'idea di creare un UserWrapper che assomiglierebbe a questo ...
public class UserWrapper{
private final static defaultCount = 10;
private final User user;
public UserWrapper(User user){
this.user = user;
}
// should probably cache this but i am not going to show this for simplicity
public Comments getComments(){return Comments.loadComments(user, 10);}
}
Spero di essere stato chiaro. Non mi piace usare il tag useBean perché non è necessario per qualcosa di simile. Spero che ci sia un modo più pulito per avvicinarsi a qualcosa del genere! Qualsiasi aiuto sarebbe apprezzato!
Modifica: Una cosa che ho dimenticato di menzionare. Voglio poter usare questo codice in JSTL. Il che significa che deve essere un getter. Il modello DAO è ben noto, ma non aiuta troppo quando il mio sviluppatore front-end ha bisogno di scrivere uno scriplet o ho bisogno di caricarlo per i posti che potrebbe o non potrebbe aver bisogno.
Hmmm dopo averci pensato. Penso che una domanda migliore da porre sia che solitamente i DAO sono tutte funzioni statiche. Cosa succede se devi passare un parametro ad ogni funzione. Diciamo un token oAuth. Penso che in tal caso, avrebbe senso non rendere solo statico DAO e renderlo accettabile come costruttore. Come nuovo UseDao (token stringa); qualche idea? –
hmmmm che risponde ad accettare: P –