在大型软件实现中,通常建议将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