La separazione tra la progettazione dell'API e la relativa implementazione è spesso consigliata nelle implementazioni di software di grandi dimensioni. Ma da qualche parte, devono essere ricollegati (vale a dire, l'implementazione deve essere ricollegata all'API).La separazione tra API e Implementazione dovrebbe essere totale?
Il seguente esempio mostra un disegno API e l'invocazione della sua attuazione tramite l'oggetto GRADO:
import java.util.List;
public abstract class Separation {
public static final Separation INSTANCE = new SeparationImpl();
// Defining a special list
public static interface MySpecialList<T> extends List<T> {
void specialAdd(T item);
}
// Creation of a special list
public abstract <T> MySpecialList<T> newSpecialList(Class<T> c);
// Merging of a special list
public abstract <T> MySpecialList<? extends T> specialMerge(
MySpecialList<? super T> a, MySpecialList<? super T> b);
// Implementation of separation
public static class SeparationImpl extends Separation {
@Override
public <T> MySpecialList<T> newSpecialList(Class<T> c) {
return ...;
}
@Override
public <T> MySpecialList<? extends T> specialMerge(
MySpecialList<? super T> a, MySpecialList<? super T> b) {
return ...;
}
}
}
Alcuni sosterranno che API non dovrebbe fare riferimento al codice di implementazione. Anche se separiamo il codice API dall'implementazione tramite file separati, spesso è necessario importare il codice di implementazione (almeno il nome della classe) nell'API.
Esistono tecniche per evitare tali riferimenti utilizzando una rappresentazione stringa del nome completo. La classe viene caricata con quella stringa e quindi istanziata. Rende il codice più complicato.
La mia domanda: c'è qualche vantaggio nel separare completamente o isolare il codice API dal codice di implementazione? O è solo il tentativo di un purista di raggiungere la perfezione con pochi vantaggi pratici?
È una necessità assoluta per OSGi o solo buone pratiche? – JVerstry
Per utilizzare alcuni dei framework come iPOJO è necessario, ma non è necessario farlo in tutti i casi (e io no) –