33

Quizás es obvio para ti. Soy nuevo en Java (medio año de trabajo) y tuve una discusión con mis colegas. Tengo problemas para nombrar mis clases de acuerdo con sus responsabilidades. Por eso, mis clases obtienen responsabilidades que nunca deberían tener.¿Cuándo llamo a mi controlador de clase, gerente o servicio?

¿Me puede ayudar?

BTW: Estoy trabajando en un proyecto donde tengo que usar una capa de persistencia de las clases de servicio. He dividido mis paquetes a modelo, servicio y persistencia.

Respuesta

41

Hay ciertos patrones y directrices detrás de estas plazo, que es donde normalmente me baso en:

controlador se basa en el patrón Model-View-Controller design y deben ser utilizados de manera explícita para las clases que implementan la funcionalidad de controlador basado en este patrón de diseño. P.ej. si está utilizando Spring MVC y se extiende desde una de las clases de Controller.

Servicio es un poco menos específica, pero recomiendo basar la aplicación en el patrón Service Layer de "Patterns of Enterprise Application Architecture". Básicamente, donde un controlador es más específico de la plataforma (por ejemplo, transporte a través de HTTP y rendición de hipertexto, por lo general HTML para web basado controladores) un servicio no debería tener que saber quién lo está usando y cómo. Usted solo está proporcionando una interfaz uniforme que puede usarse a su vez, por ejemplo, un controlador web.

Administradores bien ... administrar cosas Conexiones, contexto de la aplicación, sesiones, generalmente como una ubicación central donde los componentes de la aplicación pueden comunicarse.

0

No sé si alguna vez nombré a un administrador de clase, así que lo dejaré de lado.

Para mí controlador es algo que controla o decide dónde debe ir algo (señal, mensaje, ...).

El servicio es una interfaz (y la implementación de esa interfaz) que proporciona alguna funcionalidad, generalmente en el borde del sistema o subsistema. Oculta los detalles de implementación tanto como sea posible.

9

Para nombrar una convención lea el convention oficial.

Administrador: como su nombre sugiere que maneja cosas en su código como EntityManager, administra Entidades, TransactionManager - Gestiona la transacción. Por lo tanto, puede tener algo llamado SecurityManager que administre qué Algo usar para el cifrado e.t.c

Controlador - De nuevo, el nombre habla mucho, controla cómo se debe hacer o cómo se debe hacer. Por ej. ActionController: se ocupa de qué hacer al recibir el evento de acción del usuario

Servicio - Considere algo así como postalService, una tarea realizada por alguien con una nota general, puede hacer uso de ella.

El código de embalaje necesita mucha reflexión, el embalaje de su aplicación siempre debe estar alineado con el modelo de negocio al que se dirige.

Junto con el modelo comercial, entonces necesita pensar si la característica es muy importante en la aplicación, por lo que la moverá al núcleo, por ejemplo, si la función es para hablar con otra aplicación en la que le gustaría moverla. integración, etc.

+0

Para la convención, se debe mencionar que cumplir con las convenciones de su negocio en lugar de Sun es mejor. Las pautas de Sun son ciertamente un buen punto de partida, pero al final, tus cowerkers mantendrán tu código (y terminarás manteniendo el suyo), por lo que debes seguir la convención de tu empresa (si tienes una que sea ...). – Laf

+0

De acuerdo, pero definitivamente más o menos el estándar de codificación de su empresa seguirá al sol;) – mprabhat

+0

Espero que lo que diga sea cierto;) Pero creo que podríamos divertirnos buscando los estándares de codificación más locos que existen. – Laf

10

Para agregar a las buenas respuestas ya dadas, si encuentra que le resulta difícil encontrar un nombre adecuado para sus clases, entonces quizás debería investigar si sus clases tienen más de una responsabilidad. Si este es el caso, definitivamente debe refactorizar su código para aislar las responsabilidades en clases separadas.

Cuestiones relacionadas