En prácticamente todos los proyectos que jamás he trabajado, habrá uno o dos clases con las siguientes propiedades:¿Cómo previene que las clases se conviertan en "imanes de dependencia" y clases de Dios?
- extremadamente grandes con muchos muchos miembros y métodos.
- Muchas otras clases que heredan de esta clase.
- Muchas otras clases de lo contrario dependen de esta clase.
mal diseño, se podría decir. Pero en todos los casos, este no fue el caso en el momento del diseño. Las clases crecieron orgánicamente con el tiempo y se convirtieron en la proverbial 'Clase de Dios'. Esta ha sido una tal invariante de mi experiencia con grandes proyectos de software que tengo que preguntar:
- ¿Es posible prever probables imanes de dependencia y software de diseño de tal manera que la posibilidad de dichas clases se manifiestan es menor ¿probable? Si es así, específicamente, ¿cómo?
- ¿O simplemente requiere una refactorización despiadada a medida que pasa el tiempo?
- O, ¿hay alguna solución técnica o patrón de diseño que pueda mitigar los problemas causados por dichas clases?
- ¿O una combinación de los tres?
consejos, experiencias e ideas bienvenidas!
"Cuando una clase comienza a ser demasiado grande, generalmente es porque comienza a violar SRP". -- No lo sé. Por ejemplo, tengo una clase 'Editor' cuya responsabilidad es editar un DOM. Con el tiempo, hay más y más tipos de ediciones (es decir, cantidad de métodos públicos), y a medida que el DOM que se está editando se vuelve más complicado, cada edición se vuelve más complicada (es decir, los métodos privados que implementan cada edición se enredan más). La clase Editor nunca viola necesariamente a SRP, solo crece hasta que es mejor volver a empaquetar algunas de sus subrutinas como clases o capas por derecho propio. – ChrisW
ChrisW, noté que dije por lo general y no siempre. A veces hay clases grandes que serían contraproducentes para dividir. – RichardOD