介面的設計

2021-04-12 21:34:35 字數 2261 閱讀 1938

佘士東 08:41:47

我設計乙個介面,其中有些方法很類似,比如取得某個工作物件,有可能需要獲得多個,也有可能獲得其中乙個,引數為工作物件的名字、名字列表。

我是用窄介面還是寬介面好,是用乙個最大功能的方法還是多個過載方法好?

比如:iservice

public worker  getworker(string name);

public vectorgetworkers(final vectornames);

我是在介面約束這兩個方法還是只約束最大的那個,使所有的方法都適配為後面這個最大方法,而在介面中去掉第乙個方法

楊中科 08:51:57

我認為還是多個過載方法好,主要是考慮方便別人使用

楊中科 08:52:31

順便說一句:為什麼引數和返回值要用vector?用list介面不更好嗎?

佘士東 08:53:55

如果適用者很有限,大概只有5個左右,實際上使用者也是提供適配功能,比如使用cs結構,web方式,wap方式,**s方式獲得介面服務的適配模組

佘士東 08:55:04

我的想法是使用vector它是非同步安全的,服務可能是多執行緒實現的,所以使用vector返回,不知道有沒有這個必要,有沒有這個作用

楊中科 08:55:12

你說的是什麼意思,不太明白。你說getworker方法不是所有實現類都能實現?

佘士東 08:56:35

其實這個介面是夾在實現和使用這中間的,使用者實現不同型別服務的適配,實現根據專案不同所要求的業務實現不一樣,實際上這個介面是約束實現要多

佘士東 08:58:08

如果介面方法太多,我怕如果變更會不會陷入變更裡面,因為過載多了,其中很多有重複,比如引數列表,如果需要加上使用者驗證,那就都要加,這樣所有實現都要改動一批

楊中科 08:59:41

「我的想法是使用vector它是非同步安全的,服務可能是多執行緒實現的,所以使用vector返回,不知道有沒有這個必要,有沒有這個作用 」,你可以將傳進來的list引數用collections類中的syn****list方法將list搞成非同步安全的,返回的時候你也可以返回vector型別的,但是返回值要生成list型別

楊中科 09:00:14

要考慮二次開發人員的易用性,大部分人還是傾向於使用list、arraylist這樣的東西的

楊中科 09:01:50

「如果介面方法太多,我怕如果變更會不會陷入變更裡面,因為過載多了,其中很多有重複,比如引數列表,如果需要加上使用者驗證,那就都要加,這樣所有實現都要改動一批 」,還是那句話,不要陷入實現的漩渦中,你的介面是宣告服務用的,不要管實現,怎麼實現是實現類的事情,站在二次開發人員的角度來看你必須同時提供getworker和getworkers兩個方法

佘士東 09:01:49

原來如此,就是說實際上還是vector,只不過返回值使用list介面,但是如果他直接轉換成arraylist使用會不會丟掉原來非同步安全特性?因為返回值畢竟只是乙個引用,可能其它地方也在用同乙個引用

楊中科 09:02:30

不可能轉換為arraylist的,否則執行的時候會拋classcastexception

佘士東 09:02:46

但是,二次開發實際上是開發實現類,而不是服務呼叫類

楊中科 09:03:24

哦,也就是二次開發實際上是寫乙個實現了你定義的介面的外掛程式???

佘士東 09:03:47

對,就是這個意思

楊中科 09:04:57

那也最好提供這兩個介面,這樣你使用這些外掛程式的時候也方便,你可以寫乙個抽象類來實現預設的getworker方法,在getworker中呼叫getworkers方法,這樣二次開發人員一般只要實現getworkers方法就可以了

佘士東 09:04:57

但是這個外掛程式是惟一的,使用乙個factory獲得實現

佘士東 09:05:57

哈哈,豁然開朗,寬介面,加上適配抽象父類,就搞定了

楊中科 09:06:26

介面方法是越多用起來越方便

佘士東 09:07:10

我只是怕在產生變更的時候,對應的實現也要改動很多,畢竟框架才是初期

楊中科 09:08:29

「對應的實現也要改動很多」,那就看你抽象類的實現水平的,定義介面的時候不要去想實現,只要想介面定義那些方法才夠用就可以,實現和介面不能混

楊中科 09:09:00

你可以用各種設計模式來保證不會發生「產生變更的時候,對應的實現也要改動很多」

楊中科 09:09:11

但是介面就是介面  

REST ful 介面的設計

1 web服務請求都涉及的三個步驟 第一步 準備好要放入http請求的資料 http方法 uri http報頭,以及 對於採用put或post方法的請求而言 需要放進求情實體裡的文件 第二步 把這些資料格式化為乙個http請求,然後把該http請求傳送給正確的http伺服器 第三步 把伺服器返回的資...

App架構設計 介面的設計

安全機制的設計 使用者用密碼登入成功後,伺服器返回token給客戶端 客戶端將token儲存在本地,發起後續的相關請求時,將token發回給伺服器 伺服器檢查token的有效性,有效則返回資料,若無效,分兩種情況 token錯誤,這時需要使用者重新登入,獲取正確的token token過期,這時客戶...

增量介面的設計及實現

在應用開發過程中,我們總會碰到這樣的場景 某系統需要同步我們系統的資料去做一些業務邏輯,當資料量較小的時候,可以全量的提供,但當資料量很大時,全量提供就顯得很笨重,不僅耗時而且做了很多無用功,這時我們需要一種提供增量資料的機制,只告訴對方變化的資料。提供增量資料大致可分為兩種方式 mq和介面提供,m...