5

Tengo una clase de modelo (MVC pattern) que estoy usando en dos proyectos de Eclipse.accediendo a campos privados del paquete en clases compartidas en proyectos de Eclipse

Un proyecto, llamémoslo Producer, está capturando datos de una secuencia y almacenándolos en una base de datos. La clase de modelo en cuestión, digamos ObjectModel, se usa para deserializar la secuencia para su manipulación antes de serializarla y almacenarla en la base de datos.

Otro proyecto, llamémoslo Consumer, está extrayendo los datos almacenados en la base de datos y visualizándolos en la pantalla. Utiliza la misma clase de modelo para deserializar los datos almacenados para usar en la aplicación de visualización.

Planeé poner ObjectModel en un proyecto de Eclipse para compartir su fuente a través de los proyectos Producer y Consumer. Sin embargo, cada aplicación tiene clases actualmente en el mismo paquete que aprovechan el modificador de acceso privado del paquete para obtener y establecer campos en ObjectModel.

¿Hay alguna forma de compartir fuentes en varios proyectos de Eclipse y aún mantener el acceso privado del paquete con la fuente compartida?

ACTUALIZACIÓN: Estaba teniendo problemas para obtener el código compartido en proyectos de Eclipse, por lo que no lo intenté antes de publicarlo. Finalmente conseguí esa parte funcionando, y la escribí como otra respuesta here.

+0

¿Puedes explicar por qué quieres 'mantener aún el acceso privado del paquete con la fuente compartida?'? – Vikdor

+0

'Producer' tiene una clase,' ObjectModelFactory', que crea instancias 'ObjectModel' que encapsulan datos de múltiples flujos distintos. 'Consumer' tiene una clase,' ObjectModelMerger', que combina actualizaciones activas en 'ObjectModel's deserializados. Es mucho mejor para cada una de estas clases acceder directamente a los campos 'ObjectModel' que pasar por los descriptores de acceso, sobre todo porque no hay necesidad de programadores en ninguna parte de los programas, excepto' ObjectModelFactory' y 'ObjectModelMerger' - Me gustaría restringir acceso a la configuración de los campos 'ObjectModel'. – ericsoco

Respuesta

1

Siempre y cuando las clases en los proyectos Productor y Consumidor se declaren en el mismo paquete que el ObjectModel, todo debería funcionar.

Sin embargo, es posible que desee replantear su diseño y proporcionar métodos de acceso público (getters y setters) en ObjectModel.

+0

por favor vea mi comentario arriba re: diseño. – ericsoco

1

mirada sobre la respuesta @GreyBeardedGeek arriba:

Mientras las clases en los proyectos de productores y consumidores se declaran en el mismo paquete que el ObjectModel, todo debería funcionar solo.

Usted busca el amigo C++ en Java. En general, puede ser un síntoma de un diseño incorrecto. Si su diseño está bien, entonces el uso de "paquete de acceso privado" es una forma estándar de Java para la implementación de amigos. Funcionará técnicamente si tus clases están en proyectos diferentes ... Si crees que tu diseño está bien, tal vez te gustaría considerar utilizar la clase * Heper. Por ejemplo:

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(); 
    } 

}

debe colocar SomeClassHelper en el mismo paquete que SomeClass, pero SomeClassHelper pueden estar en diferentes carpeta de origen o proyecto.

+0

No había visto el patrón de Amigos antes, gracias por la ilustración. parece beneficioso para exponer un subconjunto de funcionalidad, pero en este caso me gustaría tener acceso de escritura a todos los campos de 'ObjectModel', por lo que esto sería análogo a los accessors directamente dentro de' ObjectModel', más código del que me gustaría . – ericsoco

Cuestiones relacionadas