Il modo migliore per nominare classi e pacchetti in Java

0

Oltre alle convenzioni del codice per usare camelCase, PascalCase ecc., esistono convenzioni per nominare pacchetti e classi in Java?

Ad esempio, ho un progetto mvc e il pacchetto principale è com.myproject. In questo pacchetto ho:

  1. com.myproject.model
  2. com.myproject.view
  3. com.myproject.controller.

Esistono convenzioni o buone pratiche per dare un nome alla classe in questi 3 pacchetti? Come per il pacchetto 1, evita il modello nel nome della classe, o qualcosa del genere? E se voglio usare lo stesso nome di classe come Utente, cosa c'è di meglio: usare UserModel, UserView, UserController, o dare lo stesso nome alle 3 classi? C'è qualche tipo di best practice o convenzione sui nomi per fare questo?

    
posta Liz Lamperouge 05.06.2018 - 14:59
fonte

3 risposte

3

Risposta breve: non è consigliabile denominare due classi uguali nello stesso progetto / libreria / contesto.

A parte l'ovvio inconveniente, c'è un punto più profondo del perché non è una buona idea e nemmeno la denominazione del pacchetto proposto. Noi come sviluppatori siamo responsabili della modellazione dei problemi di business e il nostro vocabolario di denominazione dovrebbe riflettere questo fatto. Questo è il tipo di Domain Driven Design.

Mettere la tecnologia al di sopra della funzione reale potrebbe essere logico per noi, perché siamo più interessati alla tecnologia, ai modelli, all'architettura e cose del genere, ma rende il nostro modello meno espressivo, meno mantenibile.

Il mio punto è: I nomi dei pacchetti e i nomi delle classi dovrebbero riflettere i concetti di business . Non ci dovrebbero essere model , view , controller pacchetti, non ci dovrebbero essere UserModel , UserController classi, ecc.

Modella il problema, non la tecnologia ! Trova le astrazioni appropriate direttamente dai requisiti aziendali e nascondi i dettagli di implementazione, come il fatto che stai utilizzando MVC.

    
risposta data 05.06.2018 - 17:06
fonte
1

In generale, dare lo stesso nome a più classi nello stesso progetto (non pacchetto, progetto ) è una cattiva pratica. Tra le altre cose brutte che possono accadere, se queste cose devono fare riferimento l'un l'altro, diventa ambiguo che, ad esempio, "Utente" si sta tentando di creare un'istanza quando si crea un nuovo utente.

In MVC, il modo in cui di solito l'ho visto è che il tuo pacchetto si chiama com.MYNAME.PROJECTNAME e poi aggiungi .MODULENAME per ogni modulo (nel tuo caso, "model", "view", "controller" , ecc.

Come per le classi, il nome della tua classe dovrebbe dire qual è la classe. Se si tratta di un controller per l'oggetto utente, dovrebbe essere chiamato UserController. Questo è vero anche se il pacchetto è il modulo "controller"; quando guardi il codice in un IDE, è facile scambiare o dimenticare quale pacchetto stai guardando per ogni dato file.

    
risposta data 05.06.2018 - 15:44
fonte
1

Le convenzioni sui nomi sono praticamente lasciate allo sviluppatore o al team per la maggior parte del tempo. Per quanto mi riguarda personalmente, ho quasi sempre fatto affidamento sulle informazioni pubblicate tramite Oracle quando si lavora in Java.

link

Più direttamente correlato alla tua domanda, se volessi avere una classe chiamata "Persona" in tutti e tre i pacchetti, sarebbe ammissibile. Quando vuoi includere questi pacchetti da qualche parte e utilizzare effettivamente le classi in essi, è qui che vedrai che potrebbe essere o meno una buona idea.

Osservando i nomi dei pacchetti, ad esempio, "com.myproject.model", perché dovresti avere una classe chiamata "Modello" rispetto a qualcos'altro, come "Persona" o "Ordine"?

Forse sto fraintendendo la domanda ma per me è logico che venga usato in questo modo, come nel seguente pseudocodice:

com.myproject.model.Person x = new com.myproject.model.Person();
    
risposta data 05.06.2018 - 16:31
fonte

Leggi altre domande sui tag