Las clases de administrador pueden ser un signo de una arquitectura incorrecta, por varias razones:
-
Identificadores sin significado
El nombre FooManager
no dice nada sobre lo que realmente hace la clase , excepto que de alguna manera involucra Foo
instancias. Darle a la clase un nombre más significativo aclara su verdadero propósito, lo que probablemente llevará a una refactorización.
-
Responsabilidades fraccionarias
De acuerdo con el principio de responsabilidad única, cada unidad de código debe cumplir exactamente un propósito. Con un gerente, puede estar dividiendo artificialmente esa responsabilidad.
Considere un ResourceManager
que coordina los tiempos de vida de, y el acceso a, Resource
instancias. Una aplicación tiene un solo ResourceManager
a través del cual adquiere Resource
instancias. En este caso, no hay ninguna razón real por la que la función de una instancia ResourceManager
no pueda ser servida por métodos estáticos en la clase Resource
.
-
Abstracción no estructurada
A menudo se introduce a un administrador para abstraer problemas subyacentes con los objetos que administra. Esta es la razón por la cual los gerentes se prestan al abuso como curitas para sistemas mal diseñados. La abstracción es una buena manera de simplificar un sistema complejo, pero el nombre "administrador" no ofrece pistas sobre la estructura de la abstracción que representa. ¿Es realmente una fábrica, un proxy o algo más?
Por supuesto, los gerentes pueden ser usados por más que mal, por las mismas razones. Un EventManager
, que en realidad es un Dispatcher
, obtiene eventos de las fuentes y los envía a los objetivos interesados. En este caso, tiene sentido separar la responsabilidad de recibir y enviar eventos, porque un Event
individual es solo un mensaje sin noción de procedencia o destino.
Escribimos un Dispatcher
de Event
instancias por la misma razón por la que escribimos un GarbageCollector
o un Factory
:
Un administrador sabe lo que no debe saber su carga útil.
Creo que esa es la mejor justificación que existe para crear una clase de gerente. Cuando tienes algún objeto de "carga útil" que se comporta como un valor, debería ser lo más estúpido posible para que el sistema general permanezca flexible. Para proporcionar significado a las instancias individuales, crea un administrador que coordina esas instancias de manera significativa. En cualquier otra situación, los gerentes son innecesarios.