Dire che ho una grande classe chiamata Root
, che ha molti membri e amp; funzioni:
class Root {
public:
void func1(); // operates on a and b
void func2();
...
private:
A a;
B b;
C c;
...
};
La classe Root
sta diventando un po 'grande quindi decido di scomporre alcune delle variabili membro e una funzione in un'altra classe:
class AB {
public:
void func1();
...
private:
A a;
B b;
};
Quindi, usando la composizione, posso rendere AB ab
una variabile membro di Root
. Root
ora è un po 'più piccolo / più pulito / più gestibile. La domanda riguarda il livello di accesso di ab
dopo questo refactoring.
Va bene in questo caso che ab
sia un membro pubblico? Qualsiasi aspetto negativo? I membri pubblici sono generalmente considerati di cattivo design da ciò che ho letto. Ma qui l'incapsulamento / esposizione globale non è realmente cambiato ... gli oggetti a
e b
sono privati in AB
quindi sono ancora nascosti dall'esterno.
(Sidenote: il motivo per cui vorrei rendere pubblico ab
è che consente un più facile attraversamento della gerarchia di composizione di Root
. Ad esempio in Root
membro c
Potrei voler chiamare func1
:
void C::foo(Root& root) {
//do some stuff
root.ab.func1();
}
Se ab
era privato, dovrei definire una funzione pass-through in root
.)