¿Qué estrategia utiliza para nombrar paquetes en proyectos Java y por qué? [cerrado

ace un tiempo pensé en esto y recientemente reapareció cuando mi tienda está haciendo su primera aplicación web Java real.

Como introducción, veo dos estrategias principales para nombrar paquetes. (Para ser claros, no me estoy refiriendo a toda la parte 'domain.company.project' de esto, estoy hablando de la convención de paquetes debajo de eso.) De todos modos, las convenciones de nomenclatura de paquetes que veo son las siguientes:

Funcional: nombrar sus paquetes de acuerdo con su función arquitectónica en lugar de su identidad de acuerdo con el dominio comercial. Otro término para esto podría ser nombrar de acuerdo a 'capa'. Entonces, tendría un paquete * .ui y un paquete * .domain y un paquete * .orm. Sus paquetes son cortes horizontales en lugar de verticales.

Esto esmuch más común que la denominación lógica. De hecho, no creo haber visto ni oído hablar de un proyecto que haga esto. Esto, por supuesto, me vuelve receloso (algo así como pensar que has encontrado una solución para un problema de NP), ya que no soy terriblemente inteligente y asumo que todos deben tener grandes razones para hacerlo de la manera en que lo hacen. Por otro lado, no me opongo a que las personas simplemente extrañen al elefante en la habitación Nunca he escuchado una discusión realpar haciendo el nombre del paquete de esta manera. Simplemente parece ser el estándar de facto.

Logical: nombrar sus paquetes de acuerdo con su identidad de dominio comercial y poner cada clase que tenga que ver con esa porción vertical de funcionalidad en ese paquete.

Nunca he visto ni oído hablar de esto, como mencioné antes, pero tiene mucho sentido para mí.

Tengo a acercarme a los sistemas verticalmente en lugar de horizontalmente. Quiero entrar y desarrollar el sistema de procesamiento de pedidos, no la capa de acceso a datos. Obviamente, hay una buena posibilidad de que toque la capa de acceso a datos en el desarrollo de ese sistema, pero el punto es que no lo pienso de esa manera. Lo que esto significa, por supuesto, es que cuando recibo una orden de cambio o quiero implementar alguna nueva característica, sería bueno no tener que buscar en un montón de paquetes para encontrar todas las clases relacionadas. En cambio, solo busco en el paquete X porque lo que estoy haciendo tiene que ver con X.

Desde el punto de vista del desarrollo, considero que es una gran victoria que sus paquetes documenten su dominio comercial en lugar de su arquitectura. Siento que el dominio es casi siempre la parte del sistema que es más difícil de asimilar, ya que la arquitectura del sistema, especialmente en este punto, casi se está volviendo mundana en su implementación. El hecho de que pueda llegar a un sistema con este tipo de convención de nomenclatura e instantáneamente a partir de la nomenclatura de los paquetes sabe que se trata de pedidos, clientes, empresas, productos, etc., parece bastante úti

Parece que esto le permitiría aprovechar mucho mejor los modificadores de acceso de Java. Esto le permite definir interfaces de manera mucho más limpia en subsistemas en lugar de en capas del sistema. Entonces, si tiene un subsistema de órdenes en el que desea ser transparentemente persistente, en teoría nunca podría dejar que nada más sepa que es persistente al no tener que crear interfaces públicas para sus clases de persistencia en la capa dao y, en su lugar, empaquetar la clase dao en solo con las clases con las que trata. Obviamente,S si desea exponer esta funcionalidad, podría proporcionarle una interfaz o hacerla pública. Parece que pierde mucho de esto al dividir verticalmente las funciones de su sistema en varios paquetes.

Supongo que una desventaja que puedo ver es que hace que la extracción de capas sea un poco más difícil. En lugar de simplemente eliminar o renombrar un paquete y luego colocar uno nuevo en su lugar con una tecnología alternativa, debe ingresar y cambiar todas las clases en todos los paquetes. Sin embargo, no veo que esto sea un gran problema. Puede ser por falta de experiencia, pero tengo que imaginar que la cantidad de veces que intercambia tecnologías palidece en comparación con la cantidad de veces que ingresa y edita sectores verticales de características dentro de su sistema.

Así que supongo que la pregunta se te haría, ¿cómo nombras tus paquetes y por qué? Por favor, comprenda que no creo necesariamente que haya tropezado con el ganso dorado o algo así aquí. Soy bastante nuevo en todo esto con experiencia principalmente académica. Sin embargo, no puedo detectar los agujeros en mi razonamiento, así que espero que todos puedan para poder seguir adelante.

Respuestas a la pregunta(15)

Su respuesta a la pregunta