Come utilizzare le funzioni in base alla configurazione?

0

Diciamo che sto lavorando con un dispositivo IoT. Il dispositivo può avere molti sensori, ognuno di essi ha un indirizzo, la direzione di I / O e un metodo di lettura.

temperature=d2,input,digital
humidity=d3,input,digital
lcd=a1,output,analog

Dal mio programma, dovrei leggere questo file di configurazione e iniziare ad ottenere dati ad esempio dal sensore di temperatura, che so è all'indirizzo d2 e fornisce l'input digitale. Come posso astrarre questo? Voglio dire, non posso avere qualcosa di simile

if(direction == input) {
    if(type == digital) {
        readDigital(d2)
    } else {
        readAnalog(d2)
    }
} else {
    if(type == digital) {
        writeDigital(d2)
    } else {
        writeAanalog(d2)
    }
}

Questo non è assolutamente materiale astratto, e fa schifo. Come posso collegare la mia configurazione al mio codice?

    
posta lucavallin 07.06.2017 - 23:19
fonte

2 risposte

3

Questo sembra un lavoro per il polimorfismo!

Stream temperature = new Input(  new DigitalProtocol( new Address(d2) )  );
Stream humidity = new Input(  new DigitalProtocol( new Address(d3) )  );
Stream lcd = new Output(  new AnalogProtocol( new Address(a1) )  );

Crea le interfacce che ti servono per renderlo legale e utile e sei sulla buona strada. Nota come aggiungere Bidirectional non è più traumatico?

    
risposta data 07.06.2017 - 23:44
fonte
1

Suggerirei un'astrazione in questo modo:

Ispirazioni tratte da InputStream di Java e OutputStream .

Puoi personalizzare InputSensor e OutputSensor in base alle tue esigenze. Ho aggiunto Stream perché dal tuo esempio, stai considerando flussi di input e di output uguali, ma potresti non averne bisogno.

Sul lato sinistro del diagramma c'è il metodo con cui i sensori saranno costruiti dalla configurazione usando il modello di fabbrica astratto. DefaultSensorFactory prende la configurazione e costruisce AddressedInputSensor e AddressedOutputSensor formano la descrizione nella tua domanda.

I vantaggi di questo design sono che puoi testare ciascuna parte indipendentemente l'una dall'altra prendendo in giro ogni interfaccia e puoi usare i sensori in modo astratto.

    
risposta data 07.06.2017 - 23:35
fonte

Leggi altre domande sui tag