Como projetar a classe com vários módulos

5

Eu tenho algo parecido com isto

Class App
    Module A
    Module B
    Module C
    Module D

Cada um dos módulos tem uma responsabilidade única e é muito bem encapsulado (interface pública, implementação privada).

O problema é que esses módulos precisam se referir muito uns aos outros. (Não há uma maneira razoável de contornar isso, eu acho). Isso levou a um monte de passagem complicada de parâmetros.

Module A
    method(B& b)
    method(int i, C& c)
    method(bool b, D& d, B& b, C& c)

E se eu colocar algo como App& app dentro de A ? (E, em seguida, inicialize app apropriadamente.) Dessa forma, posso fazer isso:

Module A
public:
    method()
    method(int i)
    method(bool b)

private:
    App& app

Parece mais legível, parece bastante lógico. Sim, é menos previsível quais módulos modificam quais, mas parece justificado. Ou eu estou apenas sendo preguiçosa? Qual é a maneira correta de abordar esse tipo de problema?

    
por Joe 07.03.2016 / 03:08
fonte

1 resposta

5

Ter uma referência a todo o App é um sinal de design pobre (é como ter um contexto global que interrompe totalmente o encapsulamento).

Foster injeção de dependência e especialmente injeção de construtor se você precisar usar uma dependência em mais de um método.

Possível implementação de Module A :

Module A
public:
    Module A(B& b, C& c) //ctor
    method()
    method(int i)
    method(bool b, D& d) //d could also be injected in the constructor

private:
    B& b
    C& c
    
por 07.03.2016 / 07:58
fonte