5

Ho una classe modello (MVC pattern) che sto utilizzando in due progetti Eclipse.accesso ai campi pacchetto-privato in classi condivise tra i progetti Eclipse

Un progetto, chiamiamolo Producer, sta acquisendo i dati da un flusso e li archivia in un database. La classe del modello in questione, ad esempio ObjectModel, viene utilizzata per deserializzare il flusso per la manipolazione prima di serializzare e archiviare nel db.

Un altro progetto, chiamiamolo Consumer, sta inserendo i dati memorizzati nel database e visualizzandolo sullo schermo. Utilizza la stessa classe del modello per deserializzare i dati memorizzati per l'utilizzo nell'applicazione di visualizzazione.

ho pensato di mettere ObjectModel in un progetto Eclipse per condividere la sua fonte attraverso i progetti Producer e Consumer. Tuttavia, ciascuna applicazione dispone attualmente di classi nello stesso pacchetto che sfruttano il modificatore di accesso privato al pacchetto per ottenere e impostare i campi in ObjectModel.

C'è un modo per condividere l'origine tra più progetti Eclipse e mantenere l'accesso privato al pacchetto con l'origine condivisa?

UPDATE: Avevo problemi a ottenere il codice condiviso tra i progetti Eclipse, motivo per cui non l'ho provato prima di postare. Finalmente ho capito che funzionava e l'ho scritto come un'altra risposta here.

+0

puoi approfondire il motivo per cui vuoi 'mantenere ancora l'accesso privato al pacchetto con la fonte condivisa?'? – Vikdor

+0

'Producer' ha una classe,' ObjectModelFactory', che crea istanze di 'ObjectModel' che incapsulano dati da più stream distinti. 'Consumer' ha una classe,' ObjectModelMerger', che unisce gli aggiornamenti live in 'ObjectModel' deserializzati. Molto più bello per ognuna di queste classi accedere direttamente ai campi 'ObjectModel' piuttosto che passare attraverso gli accessor, in particolare perché non c'è bisogno di setter in nessuna parte dei programmi eccetto' ObjectModelFactory' e 'ObjectModelMerger' - Mi piacerebbe limitare accesso all'impostazione dei campi 'ObjectModel'. – ericsoco

risposta

1

Finché le classi nei progetti Producer e Consumer sono dichiarate nello stesso pacchetto di ObjectModel, tutto dovrebbe funzionare.

Tuttavia, è possibile rivedere il progetto e fornire metodi di accesso pubblico (getter e setter) in ObjectModel.

+0

per favore vedi il mio commento sopra re: design. – ericsoco

1

sguardo sulla risposta @GreyBeardedGeek sopra:

Finché le classi nei progetti produttore e consumatore sono dichiarati nello stesso pacchetto come l'ObjectModel, tutto dovrebbe funzionare.

Stai cercando l'amico C++ in Java. In generale, può essere essere il sintomo di una progettazione errata. Se il tuo progetto è ok, allora usare "pacchetto-accesso privato" è un modo standard Java per implementare gli amici. Funzionerà tecnicamente se le tue lezioni sono in progetti diversi ... Se pensi che il tuo progetto sia ok, forse ti piacerebbe prendere in considerazione l'uso della classe * Heper. Per esempio:

public class SomeClass { 
void foo(){... 
} 
} 

public class SomeClassHelper { 
private SomeClass someClass; 
public SomeClassHelper(SomeClass someClass){ 
    //you can do it better this with some DI Framework, 
    //for illustration purpose 
    this.someClass=someClass; 
} 

public SomeClassHelper(){ 
    //for illustration purpose only 
    this.someClass=new SomeClass(); 
} 

**public** void foo(){ 
    //this is punch line 
    someClass.foo(); 
    } 

}

è necessario posizionare SomeClassHelper allo stesso pacchetto come SomeClass, ma SomeClassHelper può essere a cartella di origine diversa o di un progetto.

+0

Non avevo ancora visto lo schema degli amici, grazie per l'illustrazione. sembra utile per esporre un sottoinsieme di funzionalità, ma in questo caso mi piacerebbe l'accesso in scrittura a tutti i campi di 'ObjectModel', quindi questo sarebbe analogo agli accessor direttamente in' ObjectModel' - più codice di quanto vorrei . – ericsoco

Problemi correlati