Ultimamente mi sono imbattuto in pattern di progettazione Null Object e i miei colleghi dicono che può essere utilizzato per eliminare i controlli con puntatore nullo che si incontrano nel codice.Modello oggetto nullo per evitare i controlli Null?
per esempio, supponiamo che una classe DAO restituisca informazioni sul Cliente (in un oggetto valore chiamato CustomerVO). La mia classe principale dovrebbe estrarre firstName e emailId e inviare email al cliente.
...
CustomerVO custVO = CustomerDAO.getCustomer(customerID);
if(custVO != null) { // imp, otherwise we may get null ptr exception in next line
sendEmail(custVO.getFirstName(), custVO.getEmailID());
}
...
questo è molto semplice esempio, ma tali controlli nulli può diffondersi rapidamente in tutto il codice in base alla complessità degli oggetti di valore.
ho due problemi con il controllo nullo, - tendono tmake il codice brutto e difficile da leggere - minore sviluppatori esperti messi controlli nulli inutili quando in realtà dovrebbero generare eccezioni. per es. nel codice sopra, sarebbe meglio gettare un'eccezione da getCustomer() stesso perché se non è in grado di trovare informazioni sul cliente per un determinato CustID, indica che il CustID non era valido.
okay, tornando al modello di oggetto nullo, è possibile utilizzare un oggetto CustomerVO "null" per nascondere il controllo null?
CustomerVO {
String firstName = "";
String emailID = "";
}
Non avrebbe senso. cosa ne pensi?
E quali sono le cose che segui per ridurre i controlli null nella tua app.
+1, anche se non vorrei che i miei clienti di avere metodi SendEmail.È solo dare troppe responsabilità a una classe di clienti. È come dare a ogni classe un metodo di "stampa" e ora dover implementare la logica di stampa ovunque o rendere ogni classe dipendente da qualche gestore di stampa, mentre potrebbe essere limitato a un gestore di stampa e ai moduli/classi che effettivamente avviano la stampa dando al manager di stampa le classi da stampare. Laddove il pattern nullo è davvero bello, è in fase di testing unitario, ad esempio, fornire una classe di log che non esegue nulla in modo da non dover modificare il codice in fase di test. –