2011-09-22 10 views
9

¿Cómo se decide qué nombre de paquete debe ser y qué clase debe ir en qué paquete?Cómo organizar clases, paquetes

Estoy trabajando en un proyecto en el que estoy constantemente agregando/eliminando clases y no estoy seguro de si necesito un paquete nuevo, o si debería agregarlo a uno existente que actualmente no conozco.

¿Sigue un conjunto de reglas al crear un paquete nuevo?

¿Cómo puede saber si no está duplicando la funcionalidad del paquete? ¿Es solo por la familiaridad con el proyecto?

Cualquier puntero apreciado.

+0

@Alex K: No creo que esté duplicado. La pregunta que señala es acerca de cómo funcionan los paquetes en Java, mientras que esta pregunta es sobre cómo definir paquetes de manera más efectiva. – helios

+0

@helios Puede ser que tenga razón –

Respuesta

11

Las clases deben hacer una cosa (Single Responsibility Principle).

Las clases que hacen cosas relacionadas deben ir en el mismo paquete. Si encuentra que puede relacionar más estrechamente algunas de las clases en un paquete, ¡conviértalo en un subpaquete!

Por ejemplo, si yo tuviera un proyecto de estas clases:

  • GreetingInputWindow
  • GreetingDatabaseObject
  • GreetingDatabaseConnector

acabo todos ellos podría poner en el paquete greeting. Si quisiera, podría poner GreetingInputWindow en el paquete greeting.ui, y los otros 2 en el paquete greeting.db.

2

No creo que haya reglas duras y rápidas sobre la convención de empaquetado (aunque podría estar equivocado). Normalmente dividirla en

com.mycompanyname y luego:

  • API
  • controladores
  • datos (para los modelos)
  • los trabajos (de trabajos de cron)
  • informes
  • servlet
  • utilidades

Si encuentro que tengo una clase que no encaja en ninguna de ellas, entonces creo un paquete nuevo.

+0

Sí, uso algo similar.Encuentro que esto mantiene el código organizado, pero algunos parecen pensar que esta no es una buena práctica. –

14

Yo estoy totalmente en la organización de paquetes desde un punto de vista de puesta en práctica, como controllers, data, etc. Yo los prefiero agrupación por su funcionalidad, es decir, feature1, feature2, etc. Si una característica es bastante complejo y requiere una gran número de clases, luego (y solo entonces) creo subpaquetes como el anterior, es decir, feature1.controllers, feature1.data, etc.

+2

El beneficio del enfoque que michael667 está describiendo, IMO, es que hace que la configuración de registro sea mucho más fácil. Si quiero ver todo lo relacionado con automóviles, simplemente puedo configurar el registro en el paquete de automóviles, por ejemplo – IcedDante

Cuestiones relacionadas