Come evitare le somiglianze tra le classi e quelle native? [chiuso]

9

Mi sono imbattuto in un "problema interessante", su cui vorrei la tua opinione:

Sto sviluppando un sistema e per molte ragioni (significato: astrazione, indipendenza tecnologica, ecc.) creiamo i nostri tipi per lo scambio di informazioni.

Ad esempio: se esiste un metodo che si chiama SendEmail e viene richiamato dalla logica aziendale, ha un parametro di tipo OurCompany.EMailMessage, che è un oggetto completamente indipendente dalla tecnologia e che contiene solo "dati rilevanti per l'azienda" "(per esempio, nessuna informazione sulla codifica della testa).

All'interno della funzione SendEmail, otteniamo queste informazioni dal nostro oggetto EMailMEssage e creiamo un oggetto MailMessage (questo è specifico della tecnologia) in modo che possa essere inviato tramite la rete.

Come puoi già notare, la nostra classe ha un nome molto simile alla classe di lingua "nativa". Il problema è: questo è esattamente quello che sono, i messaggi di posta elettronica, quindi è difficile trovare un altro nome significativo per loro.

Hai questo problema spesso? Come lo gestisci?

Modifica: @mgkrebbs ha appena commentato sull'uso di nomi completi. Questo è il nostro approccio attuale, ma un po 'troppo prolisso, IMHO. Vorrei qualcosa di più pulito, se possibile.

    
posta JSBach 24.11.2011 - 20:29
fonte

5 risposte

3

Questo è un problema sullo spazio dei nomi che utilizzerai per il tuo progetto.

In sostanza uno spazio dei nomi è la raccolta delle parole chiave fornite da tutte le classi e / o tutte le classi che si desidera utilizzare nel progetto (comprese le classi standard solitamente fornite con la lingua / il compilatore / IDE).

Poiché uno spazio dei nomi è una raccolta, alcune regole sono applicate per impedire la creazione di un pasticcio di termini senza alcun comportamento correlato, e alcune lingue come C # consentono anche di definire il proprio spazio dei nomi come di solito e anche usarlo in altre classi.

Non confondere lo spazio dei nomi con la parola chiave di base della lingua, sono entrambi una raccolta di parole chiave ma con una grande differenza tra i due: è possibile modificare uno spazio dei nomi ma non è possibile modificare le parole chiave di base di una lingua . La somma tra lo spazio dei nomi che hai utilizzato nel tuo progetto e le parole chiave di base della lingua che utilizzi ti dà la quantità totale di parole chiave.

L'argomento è molto discusso in rete, posso suggerire una ricerca di base con i termini "namespace [la tua lingua]" o qualcosa del genere. Non sto rispondendo direttamente alla tua domanda semplicemente perché puoi avere un approccio diverso per le diverse lingue.

    
risposta data 24.11.2011 - 20:49
fonte
3

Bene, il mio vecchio team di sviluppo usa per aggiungere l'acronimo dell'applicazione in ogni classe personalizzata. Ad esempio, avevamo ABCEmail .

Penso che sia più semplice che fare affidamento sul namespace, ma può anche essere una soluzione complementare all'uso del namespace.

Ultimo ma non meno importante, dal momento che stai creando un nuovo oggetto, significa che l'oggetto nativo non risponde alle tue esigenze in modo che il tuo nome del tuo file di posta elettronica possa essere Email personalizzata , AdvancedEmail ... ecc.

    
risposta data 24.11.2011 - 20:53
fonte
3

Che lingua stai usando? La risposta è specifica per la lingua. In generale la risposta è "usa gli spazi dei nomi". Non mangerei quasi mai il nome del tipo per evitare conflitti con qualche spazio dei nomi esterno.

In una singola applicazione Java è abbastanza comune avere lo stesso nome di classe (ad esempio "Data") definito in una mezza dozzina di spazi dei nomi. Se una classe ha bisogno di utilizzare due classi Data separate, allora una delle classi Date deve essere pienamente qualificata ovunque appaia, poiché Java non supporta i tipi alias. In C ++ la vita è più facile; puoi semplicemente rinominarne uno con un typedef.

    
risposta data 24.11.2011 - 23:47
fonte
2

Do you have this problem often? How do you manage it?

Dipende davvero dalla lingua che usi. In c ++ e java, questo problema viene risolto usando namespace. Sto usando c ++, e succede che ho avuto diverse classi con lo stesso nome. Non è un problema, dal momento che si trovano in spazi dei nomi diversi.

In altre lingue, non ci sono modi per aggirare ma fornire nomi diversi.

    
risposta data 24.11.2011 - 20:41
fonte
2

La tua domanda è molto buona. Che ne dici se tu prefissi il tuo metodo con un prefisso come U (o u) o cls (abbreviazione di classe)? Per esempi:

clsEMailMEssage o uEMailMEssage

Questo non richiede molta digitazione e puoi subito dire che il tipo è 'tuo'.

Modifica - In risposta ai primi 2 commenti:

Vorrei porre l'attenzione del lettore sul fatto che: non tutte le notazioni ungheresi sono uguali. Dovremmo distinguere tra Sistema ungherese e Applicazioni ungherese , presumo che il suggerimento sopra riportato segua il tipo di app ungherese, che non è dannoso.

Il danno associato alla notazione System ungherese, come nel nominare un ID un intID, non è presente nel suggerimento di cui sopra.

Per ulteriori informazioni, dai un'occhiata a: Rendere errato il codice errato - Joel On Software

    
risposta data 24.11.2011 - 21:56
fonte

Leggi altre domande sui tag