SOC e configurazione autoinizializzante

0

Dichiarazione di non responsabilità: sto utilizzando C # per esempi di codice. Ma immagino che dovrebbero essere leggibili / comprensibili per tutti. Se non lo sono: si prega di lasciare un commento.

Va bene ho un'applicazione client-server. Il server può essere esteso con Agenti . Un agente può essere utilizzato per distribuire i carichi.

Un agente dovrebbe avere alcune variabili statiche come ID ecc. Tutti questi valori saranno auto-generati (es .: ID = Guid.NewGuid() . Il ID dovrebbe essere una volta impostato e sempre uguale. riavvia l'agente.

Il mio primo pensiero è che voglio avere una specie di classe Config che contenga queste variabili.

class Config 
{
    public Guid ID { get; private set; }
    // ...
}

Va bene quando un agente si avvia dovrebbe controllare IsConfigurationInitialized . Se non lo è, inizializzalo.

Ho pensato che sarebbe stata una buona idea non preoccuparsi dell'initalizzazione della configurazione. Quindi la configurazione stessa verifica nel costruttore se ha bisogno di essere initalizzata. Quindi il mio percorso principale dell'applicazione fa qualcosa di simile a Config config = new Config();

Ma per qualche ragione ritengo che questa sia una cattiva idea dato che la classe è solo una variabile titolare.

Alla mia domanda:
L'esempio sopra riportato infrange il SOC o qualsiasi altro principio di progettazione?

    
posta Brettetete 02.03.2015 - 15:47
fonte

1 risposta

1

Il design sembra violare SRP in quanto la tua configurazione (che è una configurazione, solo un titolare di configurazione) saprà come per generare la configurazione per ciascun agente specifico.

Penso che un agente dovrebbe creare un'istanza di configurazione, passando ad esso il suo nome (che è usato per dedurre il percorso del file di configurazione da esso) e il callback, che dovrebbe restituire la configurazione iniziale dell'agente.

Config verifica la presenza del file di configurazione quando viene creato / inizializzato (in qualche modo non mi piace eseguire compiti pesanti nei costruttori e tendono a creare metodi initialize () per quelli). Se esiste, carica solo config da esso. In caso contrario, esegue la richiamata, riceve la configurazione iniziale dall'agente e la salva nel file per un uso futuro.

In questo modo il tuo agente e la tua configurazione sono più o meno separati l'uno dall'altro.

    
risposta data 05.03.2015 - 10:34
fonte