我目前正在研究一个涉及创建抽象层的项目。该项目的目标是支持服务器软件的多种实现,以便我可能需要切换到它。要抽象的特征列表相当长,所以我想要以一种相当无痛的方式来做到这一点。抽象层(Java)
其他应用程序将能够与我的项目进行交互,并进行调用,最终归结为传递到我正在使用的服务器。
这里存在问题。我在这方面没有太多经验,我真的不知道如何让这不会成为死亡的三明治。这里有一个大致的连锁应该是什么样子(以及我想要完成的)。
/*
Software that is dependent on mine
|
Public API layer (called by other software)
|
Abstraction between API and my own internal code (this is the issue)
|
Internal code (this gets replaced per-implementation, as in, each implementation needs its own layer of this, so it's a different package of entirely different classes for each implementation)
|
The software I'm actually using to write this (which is called by the internal code)
*/
抽象层(显然是在中间的那个)显然是我努力拼凑在一起的。
现在,我只停留在一个愚蠢的方面。我怎么可能让抽象层的东西是不是一个系列的
public void someMethod() {
if(Implementation.getCurrentImplementation() == Implementation.TYPE1) {
// whatever we need to do for this specific implementation
else {
throw new NotImplementedException();
}
}
(原谅伪码;此外,想象中的一样的情况,但对于一个开关/情况,因为这可能比链更好如果是针对每种方法)针对每个抽象级别类中的每个方法。
这似乎很基本,但我不能想出一个合理的解决方案来解决这个问题。如果我没有清楚解释我的观点,请解释我需要详细阐述的内容。也许我在想这件事是错的?
为什么中等水平是必需的?我看到它的方式,第二层(公共API)是一个接口(或一组接口),第四层(内部代码)表示接口实现或具体类,因实现而异。所有需要的是一次性的配置来选择适当的实现类,其余的可以开箱即用。 – shmosel
@shmosel它可能不是。这代表了一个“层”,因为我不确定这是否是解决我的问题的正确方案。我不太确定我应该在那个“水平”上做什么,如果甚至达到这个水平的话。 –