È buona norma separare il codice di livello inferiore da ReactiveX

2

Considera che ho una classe Calculator , calcola un Integer . Nelle parti più alte del sistema, ad esempio un presentatore MVP, voglio lavorare con un osservabile ReactiveX che emette il Integer .

Potrei fare quanto segue:

public class Calculator {

    public Observable<Integer> doSomeVeryComplicatedCalculations() {

        return Observable.just(0);

    }

}

Mi chiedo se sia una buona pratica mantenere la classe Calculator libera da ReactiveX e utilizzare un wrapper come questo:

public class Calculator {

    public Integer doSomeVeryComplicatedCalculations() {

        return 0;

    }

}


public class RxCalculator {

    public Observable<Integer> doSomeVeryComplicatedCalculations() {
        return Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                subscriber.onNext(new Calculator().doSomeVeryComplicatedCalculations());
            }
        });
    }

}

In questo modo%% effettivo di%

a. può essere testato senza ReactiveX dove imho ReactiveX aggiunge un po 'di complessità al test

b. la classe Calculator può essere utilizzata in progetti che non utilizzano ReactiveX.

Ci sono degli svantaggi in questo, oltre naturalmente al fatto che finirò con più codice / classi?

    
posta asco 19.11.2015 - 17:51
fonte

1 risposta

2

I am wondering if it is a good practice to keep the Calculator class free from ReactiveX and use a wrapper

Sì. Non dovresti dipendere dal tuo framework, libreria o strumento. Dipende dalle astrazioni, non dalle implementazioni.

Sono programmatore PHP e una volta cercavo una buona libreria HTTP da utilizzare nel mio progetto. Ho scelto Guzzle . È molto buono. Ha un sacco di funzionalità da cui utilizzo solo l'1%;) L'ho usato in diversi progetti di mio tramite tutto il codice.

Ma la versione successiva di Guzzle è stata rilasciata con modifiche incompatibili all'indietro. Sono cambiati molto (in meglio). E all'improvviso mi resi conto che dipendevo dalla precedente versione di Guzzle attraverso tutto il mio codice! Per passare a una versione più recente significa che ho bisogno di riscriverne una buona parte.

Ora, quando utilizzo una potente libreria esterna, creo sempre un wrapper, che ha solo funzioni sufficienti per soddisfare le mie esigenze e mi consente di scambiare rapidamente l'implementazione.

    
risposta data 23.11.2015 - 08:58
fonte

Leggi altre domande sui tag