Domanda

Metodi di utilità statico sono generalmente visto di buon occhio da OO puristi.

Mi chiedevo però cosa le persone pensano sui metodi di utilità che vengono utilizzati per evitare qualcosa di semplice come un null check in tutta l'applicazione.

String.trim() lancia un NPE quando viene invocato su una Stringa null.Quindi devo fare:

if(str!=null) 
     setValue(str.trim());
else
     setValue("");

Che cosa succede se creo un metodo di utilità che controlla il null?

setValue(myTrim(str));

public static String myTrim(String str) {

  if(str==null) return "" 

  else return str.trim();
}

L'unico problema che ho riscontrato con metodi come questi è che alcuni sviluppatori del team potrebbe non piacere/non conosco questo programma di utilità e potrebbe fare staight chiamate dopo aver fatto un confronto null.

È questo qualcosa che si fa il quadro di troppo?Se sì, quali sono gli altri comuni di utilità generale, utilizzare i metodi che le persone hanno creato e loro applicazioni?

Quali ritiene che siano i pro e i contro di entrambe le soluzioni?

È stato utile?

Soluzione

Sarei propenso a sostituire il homegrown utilizza quando una libreria esistente (come Apache Commons Blah Blah Blah) ha già scritto. Codice è possibile scaricare a qualcun altro consente di concentrarsi sulle parti importanti del software che differenziano veramente il vostro lavoro da tutti gli altri. Ma sì, classi di utilità con metodi statici sono grandi, se hanno bisogno di essere scritto da te a tutti.

A proposito, dare un'occhiata a StringUtils.trimToEmpty () . Buona fortuna.

Altri suggerimenti

  

alcuni sviluppatori del team non avrebbe fatto piacere / non so questa utility

Questo è ciò che la comunicazione è un bene per. E non mi riferisco e-mail.

Parla di questo tipo di funzioni, probabilmente altri membri del team stanno facendo la stessa e non communitating si sta duplicando il codice e gli sforzi.

Si può trovare un modo per utilizzare questi metodi di utilità o persino alcuni sviluppatori più esperti migth avere già sviluppare un lib più maturo o utilizzato un 3rd party.

Ma con tutti i mezzi, comunicare con il squadra

Non sono un purista OO. Così mi piace cose come questa. Tutto ciò che rende più facile scrivere codice che rispecchia le mie intenzioni senza impantanarsi in dettagli irrilevanti.

Scrivi esso. Utilizzare da soli. Non essere timido - dimostrare come molto più pulito che rende il codice. Nel peggiore dei casi, almeno ci sarà un po 'meno la ripetizione in tuo di codice ...

In termini di un principio di progettazione, ci sono alcune cose che sono solo più logico metodi statici. Se la classe di utilità che si sta scrivendo in realtà non ha alcun "stato", e ci si sente più logico farlo istanziabili con un gruppo di metodi statici, poi farlo in quel modo. Ma assicurarsi che la classe è davvero istanziabili (dare un costruttore privato; Ho visto persone dichiarano la classe come astratta, ma questo non va bene perché la gente può ignorarlo).

Il problema che poi arriva in è che Se la classe è ampio progetto, è necessario trattare come una classe biblioteca . E scrivere librerie è diverso da scrivere codice generale:

  • nel codice generale, si dovrebbe profilo piuttosto che prematuramente ottimizzazione; ma in un metodo biblioteca, non si può prevedere come la gente userà la chiamata in futuro;
  • è necessario essere molto attenti a documento o chiaramente il nome che cosa il vostro metodo fa;
  • è necessario dargli generici il comportamento, e non essere accecati da qualche caratteristica specifica di cui avete bisogno in quel momento (ad esempio, se si dispone di un metodo per "tokenise una stringa", cosa fai con gettoni vuote? se si bisogno di ignorarli, sarà altro chiamanti al tuo metodo?)

Ho un paio di classi che contengono solo fave metodi statici - si fare senso avere.Si può mettere insieme ampio di unità di test di verifica di eventuali e tutte le condizioni al contorno.

Nel caso che hai descritto anche se non sarebbe meglio fare il metodo setValue accetta una stringa inviata?Il metodo potrebbe quindi applicare un default null string, tagliare o addirittura generare un'eccezione se il valore non è corretto.

Il JavaDoc che di routine possono quindi indicare chiaramente quali ingressi sono validi o non validi e cosa succede a input non validi.

Non dicendo che questo è di destra - solo un altro punto di vista

Io uso un sacco di funzioni di utilità. Ci sono alcune cose che proprio non hanno bisogno di "oggetti", ma non mi piace l'esempio particolare si dispone di assetto ().

Un riferimento alla stringa che è nullo è molto diverso da una stringa vuota. A meno che l'applicazione è molto semplice, e sai hai sempre voglia di leggere un riferimento null come "", io non lo farei. Per questo caso, preferisco:

setValue((str != null) ? str.trim() : "")

Per quanto mi riguarda, un NPE non rilevata è una buona indicazione che ci sia un grave errore in corso in l'applicazione!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top