¿Cuándo está haciendo demasiado un pegamento o una clase de gestión?

10

Soy propenso a crear clases centralizadas que administren las otras clases en mis diseños. No almacena todo en sí, pero la mayoría de las solicitudes de datos irían primero al "administrador". Mientras miraba una respuesta a esta pregunta , noté el término "Objeto de Dios". Wikipedia lo enumera como un antipatrón, comprensiblemente.

¿Dónde está la línea entre una clase de pegamento o módulo legítimo, que pasa datos y mensajes de un lugar a otro, y una clase que está haciendo demasiado?

jprete
fuente

Respuestas:

15

Mucha gente dice cosas como "una clase nunca debería ser más grande que tu cabeza".

Sin embargo, acabo de participar en una discusión con algunos programadores realmente excelentes de clase mundial sobre este mismo tema. Lo he hablado con uno de los chicos de Objetos Desnudos. Por lo que podemos decir, a veces, esto sucede, y no hay mucha forma de evitarlo.

Sin embargo, normalmente, la única clase a la que sucede esto es un objeto de dominio que representa el elemento fundamental de su dominio: una cuenta para la banca, una venta para venta minorista, etc. Si descubre que también le sucede a otras clases, probablemente querer considerar la responsabilidad de esa clase. Aquí están mis consejos:

  • Si se llama "Administrador", "Ayudante" o "Servicio", lo más probable es que sea demasiado grande. Una vez que realmente determine cuál debería ser la responsabilidad de una clase, le resultará más fácil delegar las otras responsabilidades.
  • Si se llama "Controlador", debería ser responsable de controlar la interacción entre un montón de otras clases ... y nada más.
  • Si se trata de pasar los datos y los mensajes entre diferentes nodos físicos entonces o bien se debe hacer frente a la conversión de un mensaje específico a una forma serializada, o que maneja el mecanismo de transferencia. Por ejemplo, puede tener una clase que convierta una Transacción bancaria a XML y otra clase que envíe ese XML a través de HTTP.
  • Si está pasando eventos entre diferentes módulos en una aplicación, entonces debería ser responsable de informar a los oyentes cuando se genera un evento, y nada más.

Como regla general, si es demasiado grande, vea si puede delegar cualquier responsabilidad a otra clase, y si no puede, probablemente esté bien.

Lunivore
fuente
Buena respuesta con pautas concretas útiles. Tiendo a crear clases como esta para los objetos de dominio donde todos, o casi todos, los datos representan algún aspecto del dominio y quiero poder tratarlos como una unidad. Luego tiendo a delegar las responsabilidades reales a las clases que solo se instancian realmente dentro de la gran clase. Así que estoy bastante cerca de la línea, y probablemente debería inclinarme para hacer que las clases individuales sean más pequeñas cuando la escriba.
Jprete