Dovrei effettivamente usare l'incapsulamento qui?

1

Dichiarazione del problema

Ho intenzione di scrivere una libreria per controllare tutta una serie di relay, e sto solo cercando di pensare concettualmente in questo momento.

Ecco i miei vincoli di progettazione:

  1. Abbiamo un numero esatto di relè che devono essere controllati e questo numero non cambierà mai (perché una volta costruita una scheda non aggiungeremo mai i relè).

Ecco la mia architettura proposta:

  1. Avere una classe che rappresenta un relay.
  2. Ogni relay dovrebbe avere un metodo Open .
  3. Ogni relay dovrebbe avere un metodo Close .
  4. Avere una classe che rappresenta il circuito che aprirà / chiuderà tutti i relè.
  5. La classe contiene un gruppo di membri pubblici (uno per ciascun numero fisso di relè).

Quindi concettualmente la mia implementazione sarebbe simile a ...

RelayBoard myRelayBoard = new RelayBoard();

// establish a connection with the board
myRelayBoard.Connect();

// close a relay
myRelayBoard.RelayFive.Close();

// open a relay
myRelayBoard.RelayFive.Open();

// disconnect the board
myRelayBoard.Disconnect();

Sto discutendo se dovrei effettivamente usare l'incapsulamento qui. Di seguito, sono le mie ragioni per non che vogliono usare l'incapsulamento.

  1. Non penso perché ci sia un numero fisso
  2. Anche io non la penso così perché non contengono dati, la classe relay è solo un mezzo per controllarli.
  3. Inoltre, dovrei scrivere metodi CloseRelay(5) e OpenRelay(5) ... Ciò significa che il chiamante dovrebbe preoccuparsi di quale sia il nome del relè e che non sembra così conciso.

Domanda

La mia unica domanda qui è, dovrei usare l'incapsulamento e rendere invece i relè privati? Vorrei che le risposte riguardassero almeno le 3 preoccupazioni che ho sull'uso dell'incapsulamento.

    
posta Snoop 06.05.2016 - 16:17
fonte

1 risposta

1
  1. I don't think so because there are a fixed number.

Potresti avere schede diverse. Se scrivi un codice diverso per ciascuna scheda (cioè nello stile di board.RelayTen. ), avrai più codice da mantenere. Un modo per contenere questa espansione delle configurazioni è utilizzare un programma comune con configurazione esterna o forse una configurazione interna vincolata a una singola classe o file di configurazione.

  1. I also don't think so because they don't contain any data, the relay class is just a means for controlling each one.

Penso che vorresti essere in grado di testare lo stato del relè e di voler memorizzare l'ultimo comando inviato al relè (ad esempio Open / Closed), forse anche quando è stato rilasciato. Quando il programma si sta inizializzando, potresti voler sapere se hai già aperto o chiuso il relay in modo positivo, quindi alcuni sono stati inizializzati.

  1. Also, I would have to write methods CloseRelay(5) and OpenRelay(5)... This means that the caller would have to worry about what the name of the relay is, and that just doesn't seem as concise.

Ok, (a) board.CloseRelay(5) è peggiore di (b) board.RelayFive.Close() , ma (c) board.Relays(5).Close() , è migliore di entrambi (o (d) board.Relays[5].Close() ). Con (c) o (d), hai il meglio di entrambi: puoi indicizzarli quando ciò è appropriato e puoi ottenere un oggetto relay da un indice per passare come parametro oggetto quando ciò è appropriato. Inoltre, può essere utile manifestare un oggetto che rappresenta l'insieme di relè (indipendente dalla scheda) che può essere fatto con (c) o (d).

    
risposta data 06.05.2016 - 17:10
fonte

Leggi altre domande sui tag