2010-01-05 7 views
9

He estado trabajando en algunas compañías diferentes ahora y cada una tiene reglas diferentes sobre cómo nombrar las clases y los paquetes. Cada uno de ellos tiene diferentes diseños de paquetes y flujo de trabajo entre clases. A través de estas experiencias, aprendí cómo diseñar un proyecto; sin embargo, me gustaría una definición más concreta de cómo diseñar un proyecto. Esta pregunta es más sobre UML que sobre convenciones de nombres.Convenciones de codificación de la arquitectura Java

Lo que me interesa es cuáles son las definiciones oficiales de arquitectura con respecto a lo siguiente (he visto ayudantes utilizados como utilidades y administradores utilizados como ayudantes, etc.).

  • "clase" ayudante
  • "clase" utilidad
  • "clase" fábrica
  • "clase" gestor de
  • "clase" simple
  • por defecto "clase"
  • mi " clase "
+0

No estoy seguro de qué tiene que ver esto con "arquitectura" - parece que solo está preguntando sobre "definiciones aceptadas" –

+0

No dude en volver a titular para algo más apropiado – slimbo

+0

Estrictamente hablando, esto no es arquitectura como nada aquí debería (¡teóricamente!) determinar la experiencia del usuario o los contenidos del manual del producto. ¡Los detalles de mantenimiento no deben formar parte de la experiencia del producto ni de los conocimientos del usuario! Realmente es diseño, pero al menos es el diseño desde el punto de vista de un arquitecto y, por ese motivo, podría permanecer bajo una etiqueta de arquitectura. – martinr

Respuesta

5

Para mí:

  • Un ayudante es una fachada, o codifica/decodifica un formato de datos particular y no tiene estado entre las llamadas.

  • Una utilidad es para codificar/decodificar un formato o hacer IO, y si crea conexiones a menudo no mantiene las conexiones ni mantiene los archivos abiertos entre las llamadas.

  • Un administrador es como un Ayudante pero tiene un estado entre llamadas.

  • Una fábrica es una clase que obtiene o crea y luego devuelve un objeto (ya sea uno personalizado o uno de API).

  • Simple y Predeterminado a menudo simplemente significa clase base.

  • A Mi "clase" tiende a ser para ideas previas al vuelo y ejemplos de código, aunque a veces se utiliza en el código de producción, por ejemplo, para MyApplication y MyView (esencialmente para nombrar singletons).

Estos nombres de clase son de facto. Estos son los significados que creo y veo más a menudo, pero a menudo se ven esquemas de nomenclatura e inconsistencias contradictorios. No son nombres de patrones de diseño formales y, en la práctica, la elección de cualquiera de estos nombres parece ser casi arbitraria. Algunas personas etiquetan todas sus clases que son seguras para subprocesos con uno de estos nombres y aquellos que no están con otro de ellos.

A menudo también veo que se da un nombre de "Administrador" a una clase que realiza una función ORM like con objetos o claves, o a un objeto que arbitra las conexiones.

EDITAR

Veo una aplicación que está construido sobre un marco como suele tener estos objetos principales:

  • proceso oficial de entrada/salida/manipulación talón de
  • Una aplicación (Singleton) eventos objeto (hace referencia a un modelo de datos jerárquico y tal vez a objetos de tareas)
  • Un administrador de base de datos
  • A networ gerente k
  • Una interfaz de usuario (que hace referencia o no hace referencia a un modelo de vista dependiendo de su creencia religiosa)
  • clases de ayuda/Utilidad/Factory
  • pegamento Varios códigos
  • archivos auxiliares

Veo que centrarme en maximizar la capacidad de prueba y minimizar el área de superficie de estas interfaces es más importante que el nombre de los paquetes y el nombre de los archivos; Creo que debe seguir su propia nariz para conocer los desgloses detallados y la denominación de su proyecto. La división de código en diferentes archivos para propósitos de SCM es especialmente importante para los archivos compartidos de los que depende más de un punto anterior.

EDITAR

utilizo singleton, mosca, compuesto, iterador, recuerdo, observador, el estado, la estrategia como una cuestión de rutina. Utilizo fachada, proxy, cadena de responsabilidad entre los módulos y en el código de UI. Uso ocasionalmente fábrica, prototipo y constructor en sistemas de datos complejos, y plantilla y visitante cuando un sistema es particularmente complejo conceptualmente. De vez en cuando uso adaptador, puente, fábrica, fábrica abstracta, decorador cuando el comportamiento es complejo. Raramente uso el intérprete y utilizo el mediador para ayudarme a escribir un código más general en ciertos casos. Personalmente, no me gusta nombrar mis clases después de GoF, pero mucha gente está muy contenta, puede ser una buena idea y no estoy en contra de la práctica. Puede ser muy útil y si hace felices a la gente y ayuda a aclarar a todo el mundo lo que está sucediendo en una instancia particular, entonces eso es genial.

Siento que llamar a mi objeto de aplicación Singleton, Composite o ChainOfResponsibilityLink (?) No me sienta bien, y que llamar a mi red y mis adaptadores de código de base de datos no me hace sentir bien, así que los llamo Gerentes.Y llamo a muchas cosas que quizás deberían llamarse Fachadas en GoF, Helpers o Utilities porque creo que es más claro lo que significa.

+0

+1 porque GoF nos da un vocabulario decente, aunque el administrador y el ayudante de mi humilde opinión son viceversa, lo que puede ser un problema de vocabulario ;-) – stacker

2

Para ser sincero, no estoy seguro de qué te refieres a la mayoría de estos términos. Si está hablando de patrones de diseño, entonces creo que el libro de la Banda de los Cuatro (Design Patterns) tiene diagramas de cada uno de los patrones que usan. Si estás hablando de otra cosa, podrías estar complicando demasiado las cosas.

Además, ¿dónde esperaría obtener una definición "oficial" en términos que no son oficiales?

+0

Gracias lo echaré un vistazo. Creo que tienes razón y que debería encontrar una mejor comprensión de los patrones de diseño antes de considerar cualquier otra cosa. – slimbo

+0

Otro recurso, como he comentado en otra respuesta, es PEAA (Patrones de arquitectura empresarial). También Domain Driven Design por Eric Evans. Estos recursos explican los enfoques arquitectónicos probados, y el nombre de clase generalmente se basa en los nombres de los patrones que se emplean. –

4

Generalmente ve muchos de estos términos, pero no hay estándares oficiales al respecto. De hecho, diría que algunas de estas son malas prácticas. Muchas veces las clases de "ayuda" y "gerente" son clases que hacen demasiado y son una trampa para el comportamiento que debería estar en otra parte.

+0

Estoy muy de acuerdo con eso. Parece que la mayoría de las personas usan helper porque no saben dónde se debe colocar la funcionalidad correcta. – slimbo

+0

No es necesariamente incorrecto escribir código de procedimiento. Es solo que tiene problemas conocidos cuando se escala. –

+0

Me encanta cuando ve cosas como "ApplicationManager" y una descripción de clase de "Administra la aplicación". –

0

Por lo que he visto, el diseño del paquete del proyecto está más gobernado por la funcionalidad del código, no por el tipo de clase que es (es decir, java.awt.image, java.awt.font en lugar de java). awt.utils, java.awt.singletons).

+0

Sin embargo, no fue eso lo que preguntó. – danben

+0

Creo que lo hizo. Pude haberlo interpretado mal, pero el OP me preguntó "cómo nombrar las clases y los paquetes" y "cómo diseñar un proyecto" –

+0

Disculpe si fui vago, solo saqué el embalaje y el diseño para dar contexto a mi pregunta. No tenía mucha curiosidad sobre el diseño general (como MVC u otros patrones) – slimbo

1

No creo que encuentres definiciones "oficiales" de estos términos porque significan cosas diferentes para diferentes personas. Los nombres pueden ser difíciles porque, aunque en última instancia son arbitrarios, tener un nombre que describa precisa y sucintamente el rol de una clase es un buen objetivo. El libro GoF Design Patterns es una buena sugerencia. También es posible que desee verificar patrones Core J2EE si desea algo más centrado en Java.

0

Realmente no hay un estándar para nombrar paquetes y decidir qué tipos de clases viven en esos paquetes. Todo se basa en tus preferencias y lo que tiene sentido para ti. Aunque en un entorno de grupo, la denominación de los paquetes y los tipos de clases que pertenecen a cada paquete normalmente se decidirían durante las reuniones de diseño, donde el grupo puede tomar una decisión por consenso. O simplemente podrías trabajar para un fanático del control que las cosas se hicieron a su manera o de ninguna manera y deciden por ti.

0

Creo que cualquier clase llamada FooManager es, en el mejor de los casos, un diseño cuestionable en un sistema OO. Tienden a ser lugares donde hay toneladas de estado y se guardan muchas variables globales.

Cuestiones relacionadas