Come trattare con Classi che hanno lo stesso nome (diversi pacchetti)

8

Io e il mio team di R & D mantengono un grande numero di codice. 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 entrambe le classi fanno riferimento nello stesso file Java.

Ad esempio:

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

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

Abbiamo avuto un dibattito su quale sia la migliore pratica per trattare questi casi e sono emerse le seguenti opzioni:

1a opzione

  • Rinominare la classe, aggiungendo un prefisso

    ModelDevice
    DataDevice
    

Seconda opzione

  • Uso del pacchetto completo + nome classe quando entrambi sono referenziati

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

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

al momento stiamo mixando entrambi gli approcci e iniziando ad avere incongruenze

    
posta Jossef Harush 17.01.2016 - 09:22
fonte

3 risposte

14

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

    
risposta data 17.01.2016 - 13:27
fonte
1

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

Anche se per il momento potresti scoprire che le classi di ridenominazione sono di un buon aiuto, per un lungo periodo l'alternativa suggerita è quella di andare con il prefisso dei nomi dei pacchetti, che è lo standard del settore.

    
risposta data 19.01.2016 - 20:10
fonte
0

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

Dai un'occhiata ai modelli di utilizzo, ovvero i sorgenti 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 ciò è difficile per qualsiasi motivo, rinominerei le classi, poiché generalmente non mi piacciono i nomi di classi con prefisso di pacchetto nel codice sorgente (peggiora la leggibilità).

Se disponi di file sorgente che si occupano di entrambi i mondi, potrebbero essere le classi di bridging con la resonsibility da tradurre tra due diverse viste del mondo, e qui preferirei trovare i nomi di classi con prefisso di pacchetto.

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

    
risposta data 19.10.2018 - 16:57
fonte

Leggi altre domande sui tag