2011-10-05 68 views
4

我有一個乘三十具體類實現的接口。具體實施者分爲兩組,每組從一個共同的抽象類繼承。抽象類定義了具體實現者的構造函數,包括爲雙方的每個「邊」傳遞數據庫連接對象(它們具有不同的數據庫以及其他差異)。未使用的接口參數

目前所有的接口方法各有到「完成工作」所需的具體類的幾個參數,但不是所有的都在每一個執行者使用。

當我去到一個新的方法今早添加到界面,我意識到,數據庫連接將被需要的只是具體的執行者之一,但其餘部分將不再需要它。所以,這讓我想知道,我應該把它作爲參數傳入嗎?需要「完成工作」,但只有一個具體類,並且該類已經有數據庫連接。如果我通過數據庫連接作爲接口參數,那麼其他29個類將不會使用它。

什麼是一個很好的線畫,什麼是可以接受的接口參數?任何關於這個問題的閱讀/內容我都會感激地吞噬。

+0

聽起來像數據庫參數的接口應該從基本接口繼承。 – Jodrell

回答

2

目前所有的接口方法各有所需 的具體類爲「完成任務」的幾個參數,但不是所有的都在每一個實施者使用 。

這對我來說聽起來很像接口慢慢變成了一個"god interface"位。檢查是否是這種情況下,先問自己幾個問題:

  • 是否接口代表模型中的一個行爲的概念,或者有它變得有點對方法簽名便利的傾銷地從幾個概念?它可以被稱爲像例如Serializable,還是更準確地稱爲SerializableAndSomethingElse
  • 你能瓜分接口成幾個更具凝聚力接口,並有30個不同的對象僅實現他們所需要的人?

當我去到一個新的方法今早添加到界面,我 意識到,數據庫連接將被需要的只是 具體實施者之一,但其餘部分將不再需要它。所以, 讓我想知道,我應該通過它作爲參數?

不。實際上,如果數據庫連接只是其中一個實施者需要的,那麼聽起來不像它屬於接口。該接口應該代表抽象API,就像數據庫連接是該API實現的一部分一樣。

1

如果它不是抽象的一部分 - 那麼它不應該在接口。如果它只被30個實現類中的1個使用,那麼它絕對不是抽象的一部分。

我做了快速谷歌搜索「API設計」和第一擊是:

slides of a presentation by Joshua Bloch

他的得分是有關你的問題:

  • 「有疑問時離開它」
  • 「別讓實施細則‘泄漏’到API」
  • 「API設計是艱難的」,而且,‘API的設計是一項崇高而有意義的工藝’
  • ‘期待犯錯誤’

這聽起來像你有一個棘手的問題要解決 - 但祝你好運!

0

構造函數的參數,以各個類應該是在加工中使用的合作者(或配置值)。這是如何。這些可以根據30個不同的實現而變化。如果數據庫連接對於某些而不是其他數據庫連接是必需的,那麼僅將它作爲構造函數參數提供給它。

接口然後形成應該完成處理的基礎。這是什麼

你應該爭取一個API名稱,參數和方法處於相同概念級別的接口。構造函數的參數可能處於較低的概念級別。