Utilizzo delle classi nidificate per modulare il codice di un'applicazione di grandi dimensioni?

6

Sto costruendo una grande applicazione Desktop, che avrà una gamma di funzionalità, per ognuna desidero avere una classe specifica.

Sto pensando di utilizzare una struttura di classe nidificata per modulare il codice e garantire la separazione tra interfaccia e implementazione:

class Manager
{
  public:
    Manager(); //Initialise *t and *wapi in constructor
    ~Manager(); //Delete *t and *wapi in destructor
  private:
    class Transport;
    Transport *t;
    class WinAPI;
    WinAPI *wapi;
};

class Manager::Transport
{
  public:
    Transport(); //Initialise *tcp and *http in constructor
    ~Transport(); //Delete *tcp and *http in destructor
  private:
    class TCPSocket;
    TCPSocket *tcp;
    class HTTP;
    HTTP *http;
};

class Manager::Transport::TCPSocket {};
class Manager::Transport::HTTP {};

class Manager::WinAPI 
{ 
  ... 
};

Questa è la prima volta che ho creato una grande applicazione incorporata - ci sono problemi / altre considerazioni che dovrei prendere in considerazione prima di adottare questo approccio?

    
posta Babra Cunningham 08.03.2017 - 17:37
fonte

1 risposta

7

Le domande immediate sono:

  1. I socket TCP e le connessioni HTTP sono davvero specifici per la tua classe nidificata Manager::Transport ?
  2. In che modo li proverai unitamente se non sono accessibili al di fuori di Manager ?
  3. Qualunque cosa diversa da Manager avrà mai bisogno di un Transport ?

a cui probabilmente credo rispondere No, con difficoltà non necessaria, e forse , rispettivamente.

Non hai bisogno di questo annidamento per modulare il codice - semmai sembra che abbia incoraggiato lo spostamento di dichiarazioni non correlate nello stesso posto.

Il wrapper socket e gli oggetti di connessione logica assomigliano a una parte di un livello di astrazione della piattaforma. Questo normalmente andrebbe sotto il tuo livello dell'oggetto business, non dentro esso.

    
risposta data 08.03.2017 - 18:21
fonte

Leggi altre domande sui tag