我目前正在研究一個涉及創建抽象層的項目。該項目的目標是支持服務器軟件的多種實現,以便我可能需要切換到它。要抽象的特徵列表相當長,所以我想要以一種相當無痛的方式來做到這一點。抽象層(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它可能不是。這代表了一個「層」,因爲我不確定這是否是解決我的問題的正確方案。我不太確定我應該在那個「水平」上做什麼,如果甚至達到這個水平的話。 –