Pregunta

He escrito un programa gestor de tareas utilizando Java, e hizo una sola aplicación de interfaz de usuario para el momento en el swing. El programa consta de 3 capas en la actualidad. Una capa de presentación que interactúa con la capa de dominio a través de un controlador de caso de uso, y finalmente una capa de servicios técnicos utilizados para la persistencia. Hay varias acciones que un usuario puede tener en este punto, como añadir tareas, editar el estado de una tarea, etc ... El objetivo de mi registrador en este esquema es mantener un registro de todas las acciones tomadas por los usuarios. Por lo tanto, hay algunos lugares donde podría invocar el registrador de escribir un comando. Yo no voy a hacer ningún registro en la capa de presentación, ya que sería una decisión de diseño terrible y así que me quedo con el controlador, la interfaz de comandos (implementado para manejar la ejecución de todos los comandos con el fin de implementar funciones de deshacer / rehacer ), o en las clases de nivel inferior que en realidad están siendo manipulados, por ejemplo la clase de tareas, por ejemplo.

Creo que el controlador es una opción relativamente decente para esto, ya que actúa como el punto de contacto entre la capa de interfaz de usuario y el dominio, por lo tanto todos los comandos notables pasan en última instancia, a través del controlador por lo que es fácil de verificar que todos los métodos importantes se están registrando. Una razón para no hacerlo en el controlador es que va a reducir la cohesión, aumentar el acoplamiento y potencialmente conducir a un controlador de hinchado.

Los comandos de hormigón son otra posible ubicación, ya que también tienen toda la información necesaria para el registro. Esto de nuevo hacer que los comandos a ser menos cohesivo y aumenta el acoplamiento. Además, si yo no uso la interfaz de comandos para realizar una acción sobre un objeto de dominio que pierdo mi registro.

Finalmente esto me lleva a la implementación del registrador en el dominio de nivel inferior objetos métodos. Este es un buen candidato porque la tala siempre ocurrirá si el programa está siendo utilizado y toda la información necesaria está disponible. La única parte negativa es que los comandos del registrador será escasamente distribuidas entre el dominio de nivel inferior objetos haciendo más difícil para asegurar que todos los métodos adecuados se están registrando.

Me encantaría conseguir un debate en curso acerca de este tipo de decisión y apreciar todos sus comentarios.

¿Fue útil?

Solución

Piense en practicidad primero. El registro es a menudo una preocupación mantenimiento y administración. Cada capa en su diseño es un candidato para el registro, pero por razones algo diferentes.

Sin saber muy bien por su jerarquía de objetos y diseño ...

El ir de dominio para la interfaz de usuario, cada capa es una abstracción o una colección de comportamiento de la capa anterior. Usted tiene que preguntarse cosas como qué nivel de granularidad está buscando? ¿Sería útil para ver un registro de un comando? ¿Sería también útil para ver el registro de llamadas para cada capa de dominio asociados? No siempre es fácil de descifrar las llamadas de dominio y asociarlo con un comando en particular.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top