Separazione delle preoccupazioni tra gli oggetti

3

Ho due oggetti che lavorano insieme per fornire l'interazione con HID su una macchina. Un oggetto è responsabile della comunicazione (lettura / scrittura) al HID e l'altro oggetto è responsabile della modellazione del HID. Le informazioni vengono lette e scritte sull'HID come matrici di byte.

Come esempio forzato:

class Hid
{
  private HidComms comms;

  public DateTime? GetPropertyB()
  {
    return comms.GetPropertyB();
  }
}

class HidComms
{   
  public DateTime? GetPropertyB()
  {
    // request property B from HID
    // get 1 or more byte[] in response
    return new DateTime();
  }
}

Quale di questi due oggetti dovrebbe essere responsabile della codifica / decodifica degli array di byte, o un terzo oggetto dovrebbe esserne responsabile? Significa che l'oggetto Hid conosce solo lo stato e l'oggetto HidComms sa solo come leggere / scrivere con un terzo oggetto responsabile della conversione?

    
posta Unflux 17.07.2014 - 16:38
fonte

2 risposte

1

Il modo migliore per pensare a questo è: cosa succede se cambi il tuo HID.

Se la tua classe di comunicazione gestiva gli aspetti imbarazzanti della traduzione di una descrizione generica negli array di byte, allora hai solo 1 classe da modificare. Tuttavia, la tua classe Hid potrebbe essere l'oggetto principale che interagisce con l'HI e l'hidcomms è lì solo come una classe helper per trasferire il flusso di byte.

Quindi .. dipende. Osservando il codice nella tua domanda, lascerei che l'hid generi gli array di byte in quanto sembra incapsulare l'intero HID.

    
risposta data 01.09.2014 - 16:54
fonte
0

Il solito principio di incapsulamento (che i dettagli di implementazione dovrebbero essere confinati al minimo codice pratico) si applica qui. Le informazioni sulla codifica e decodifica degli array di byte devono essere limitate a una classe senza una buona ragione per condividerla ulteriormente.

Il modo più ovvio per sistemare questo è che HidComms traduca gli array di byte in e da una rappresentazione di livello superiore.

Il modo meno ovvio è per HidComms di gestire (ma non comprendere) gli array di byte che vanno da e verso HID, mentre Hid (o una terza classe) esegue la codifica e la decodifica.

Entrambi gli approcci sono ugualmente validi. Differiscono principalmente nel modo in cui trattano gli errori di codifica / decodifica.

    
risposta data 01.09.2014 - 04:04
fonte

Leggi altre domande sui tag