在大型軟件實現中,通常建議將API設計與其實現分離。但在某個地方,它們必須重新連接(即,實施必須重新連接到API)。API和Implementation之間應該是完全分離的嗎?
以下示例顯示了一個API設計,並通過實例對象的執行的調用:
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 ...;
}
}
}
有人會說,API應該不是指實現代碼。即使我們通過單獨的文件將API代碼與實現分開,通常也必須在API中導入實現代碼(至少是類名)。
有一些技術可以通過使用完全限定名稱的字符串表示來避免這種引用。該類用該字符串加載,然後實例化。它使代碼更復雜。
我的問題:從實現代碼中完全分離或隔離API代碼有什麼好處嗎?或者,這僅僅是純粹主義者試圖達到完美而沒有什麼實際好處的嘗試?
這是OSGi絕對必要還是僅僅是良好的做法? – JVerstry 2011-05-22 20:03:16
要使用像iPOJO這樣的框架是必要的,但是你不必在所有情況下都這樣做(而且我不這樣做) – 2011-05-22 20:09:06