Así que decidí usar el Patrón de diseño de fábrica junto con la Inyección de dependencias.Demasiadas matrices de constructores para el patrón de diseño de inyección/herencia de dependencias
class ClassA
{
Object *a, *b, *c;
public:
ClassA(Object *a, Object *b, Object *c) :
a(a), b(b), c(c) {}
};
class ClassB : public ClassA
{
Object *d, *e, *f;
public:
ClassB(Object *a, Object *b, Object *c, Object *d, Object *e, Object *f) :
ClassA(a, b, c), d(d), e(e), f(f) {}
};
Ahora, el problema es que classB tiene demasiados argumentos para el constructor. Este es un único ejemplo de capa de herencia, pero cuando las capas de herencia comienzan a hacerse más profundas, y cuando cada clase de capa necesita más objetos para construirse, el constructor en la capa superior termina requiriendo demasiados argumentos para poder hacerlo.
Sé que podría usar setters en lugar del constructor, pero ¿hay alguna otra manera?
Mi enfoque general es evitar la herencia tanto como sea posible, y tratar de mantener cada clase enfocada en una sola responsabilidad. ¿Podrías construir 'ClassA' por separado, y luego inicializar' ClassB' con una referencia a eso, en lugar de unirlos estrechamente a través de la herencia? –
Mike Seymour tiene razón. Prefiere una relación has-a (composición) a la relación más estrechamente acoplada: una relación (herencia). Tal vez si explica lo que quiere hacer, podemos decirle cómo hacerlo mejor. – metal
No veo ningún problema importante con la herencia. Debe usarse en todas partes donde se necesite. No debe ser abusado como todo lo demás. –