我目前正在从事一个涉及创建抽象层的项目。该项目的目标是支持服务器软件的多种实现,以防我可能需要切换到它。要抽象的功能列表相当长,所以我想研究一种相当轻松的方法来做到这一点。
其他应用程序将能够与我的项目进行交互并进行调用,最终归结为传递给我正在使用的服务器。
问题就在这里。我在这方面没有太多经验,我真的不知道如何使它不成为死亡三明治。这是一个大致应该是什么样子的链条(以及我想要完成的事情)。
/*
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();
}
}
(原谅伪代码;另外,想象一下相同的情况,但对于一个开关/案例,因为这可能比每个方法的 if 链更好)每个抽象级类中的每个方法。
这似乎非常基本,但我无法想出一个合乎逻辑的解决方案来解决这个问题。如果我没有清楚地解释我的观点,请解释我需要详细说明的内容。也许我在想这整件事是错的?