Convenzione di denominazione dei metodi di estensione [chiusa]

5

Stiamo utilizzando alcuni metodi di utilità nella nostra azienda per semplificare la programmazione.

Quindi abbiamo la seguente estensione di stringa:

public static bool IsNoE(this string s)
{
    return string.IsNullOrEmpty(s);
}

Questo è solo per comodità e l'intenzione di questa domanda non è di discutere il senso o l'insensatezza di tali metodi (mantenimento, ...)

La domanda riguarda la denominazione.

Alcune persone pensano che il metodo dovrebbe essere chiamato in questo modo:

public static bool IsNullOrEmpty(this string s)
{
    return string.IsNullOrEmpty(s);
}

L'argomento per la prima denominazione è:

  • Non avrebbe senso creare estensioni se non sono più brevi da scrivere.

L'argomento per la seconda denominazione è:

  • L'unica ragione per aggiungere tali estensioni è solo per supportare il flusso di programmazione. (Scrivendo una variabile e quindi reimpostare il cursore all'inizio per circondare la variabile con string.IsNull )

Quindi perché dovrei preferire una versione rispetto all'altra? Ci sono convenzioni di denominazione a cui possiamo fare riferimento?

    
posta dasheddot 12.02.2014 - 17:10
fonte

3 risposte

22

La prima denominazione è semplicemente sbagliata. Vuoi una prova? Cosa fa il prossimo pezzo di codice?

if (this.ah == PcX.Def)
{
    this.Z.SecN.Coll();
}

La seconda denominazione è ok. È abbastanza esplicito, ma non troppo lungo. È quello che viene utilizzato da .NET Framework, quindi gli altri sviluppatori non andranno persi.

Detto questo, non creare alias: crei un codice aggiuntivo che deve essere testato e mantenuto, mentre non porta nulla di utile al progetto.

    
risposta data 12.02.2014 - 17:20
fonte
5

In realtà utilizzo NullOrEmpty (sulle stringhe) e ad es. JoinWith (un alias per String.Join ).

The argument for the first naming is:

  • It would not make sense to make extensions if they are not shorter to write

I metodi di estensione sono più brevi da scrivere anche se mantieni il nome originale, perché non devi fare esplicitamente riferimento alla classe String .

String.IsNullOrEmpty(foo)
foo.IsNullOrEmpty()

Non è più breve?

O nel mio caso:

foo.NullOrEmpty()

Trovo la sintassi del metodo di estensione ancora più utile per verificare se una stringa è non null né vuota.

Confronto:

if (!String.IsNullOrEmpty(foo)) // double negation and not very readable, it's easy to miss the "!"

Versus:

if (foo.NotEmpty()) 

Detto questo, sono al 100% contro i nomi criptici come IsNoE .

    
risposta data 12.02.2014 - 18:00
fonte
4

Sul serio? Digitare i nomi dei metodi è obsoleto - se tutti dovevano digitare System.Windows.Media.TextFormatting.TextSource.GetTextEffectCharacterIndexFromTextSourceCharacterIndex ogni volta che lo usavano, C # sarebbe una lingua morta.

Fortunatamente l'IDE fa la maggior parte di questo per te, quindi la lunghezza non conta - la chiarezza tuttavia, quindi tieni la versione lunga.

Qualsiasi metodo di estensione che creo va sempre nel proprio spazio dei nomi e di solito è "ungherese" con "Ext" alla fine, quindi posso chiaramente vederne un'estensione (non voglio mai perdere tempo a cercare di capire a quale classe appartiene un metodo solo per trovarlo non appartiene a nessuna classe! Penso che funzioni bene per le interfacce (con un prefisso I) e le eccezioni (con suffisso Exception) per usare questo modulo per le estensioni.

    
risposta data 12.02.2014 - 17:45
fonte

Leggi altre domande sui tag