Come gestire le classi con lo stesso nome (pacchetti diversi)


9

Io e il mio team di ricerca e sviluppo manteniamo una base di codice estesa. Abbiamo suddiviso la nostra logica aziendale in più pacchetti. alcuni dei quali hanno classi con nomi identici .

Come puoi immaginare, i nomi sono in conflitto quando si fa riferimento a entrambe le classi nello stesso file Java.


Per esempio:

com.myapp.model (package)
 - Device (class)
 - ...

com.myapp.data (package)
 - Device (class)
 - ...

Abbiamo discusso su quali siano le migliori pratiche per trattare questi casi e sono emerse le seguenti opzioni:

1a opzione

  • Rinominare la classe, aggiungendo un prefisso

    ModelDevice
    DataDevice
    

2a opzione

  • Utilizzo del pacchetto completo + nome classe quando si fa riferimento a entrambi

    com.myapp.model.Device
    com.myapp.data.Device
    

Cosa c'è di più corretto in termini di gestione del codice e scalabilità?

stiamo attualmente mescolando entrambi gli approcci e iniziando ad avere incoerenze


Se è occasionale, probabilmente non importa - se si tratta di uno schema ricorrente, probabilmente denominerei le classi in modo più preciso per evitare che diventi un disastro.
Assylias,

Non hai idea di quanto odio java.util.Datee java.sql.Date, soprattutto perché java.sql.Dateè una sottoclasse di java.util.Datee scivola così bene dai livelli di dati (e non si serializza bene su JSON).

Opzione 2.1 Usa sempre il nome completo, anche se l'altro non è referenziato
Caleth,

Risposte:


18

Usa il nome del pacchetto. Questo tipo di problema è precisamente il motivo per cui Java utilizza la convenzione di denominazione dei pacchetti che fa. Previene questo tipo di problemi, che si tratti di due squadre nella stessa azienda o di due squadre sui lati opposti della terra.


1

A partire da ora hai una classe ModelDevice (Dispositivo nel pacchetto modello). Cosa succede se si dispone di un altro modello ModelDevice per una diversa classificazione? Il problema potrebbe ancora persistere e anche le spese generali continueranno ad aumentare.

Sebbene per il momento potresti scoprire che la ridenominazione delle classi può essere di qualche aiuto, a lungo termine l'alternativa suggerita è quella di aggiungere il prefisso ai nomi dei pacchetti, che è ciò che lo standard industriale.


0

Solo per aggiungere un aspetto che non è stato ancora menzionato:

Dai un'occhiata ai modelli di utilizzo, ovvero alle fonti Java che fanno riferimento a una o entrambe le classi.

IMHO, nella maggior parte dei casi, i file di origine dovrebbero fare riferimento solo a una delle classi in conflitto e dal contesto dovrebbe essere chiaro se si occupano del modello o del mondo dei dati. Se questo è difficile per qualsiasi motivo, rinominerei le classi, dal momento che in genere non mi piacciono i nomi delle classi con prefisso pacchetto nel codice sorgente (che degrada la leggibilità).

Se hai file sorgente che trattano entrambi i mondi, potrebbero essere un ponte tra le classi e la responsabilità di tradurre tra due diverse visioni del mondo, e qui preferirei trovare i nomi delle classi con prefisso pacchetto.

Ma vedere entrambe le classi di dispositivi in ​​una fonte potrebbe anche essere un suggerimento che la fonte viola il principio di responsabilità singola mescolando le attività dal modello e dal mondo dei dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.