在通用元件api設計中,如果有介面的變更需求,怎麼做才能既能實現新的需求,又能與以往使用這個元件的系統相容,並且又盡量不增加我們維護介面的工作量呢?
例如以下的場景:
有介面a:
inte***ce a
其實現的方法c:
class c implements a }
現在有新的需求:在原來的介面的方法中增加乙個引數。我們應該怎麼去做?
如果我們
直接修改原來的介面,改為:
inte***ce a
這樣做會導致以前所用支援介面
a的系統都需要根據我們的變化進行修改,會導致使用我們介面的系統不可取。可以使用下面的方法:
方法一. 定義乙個新的介面,擴充套件原來的介面,並且在裡面定義我們需要的新的方法,這樣原來的系統使用新的介面也仍然是支援的:
inte***ce b
對於原先實現介面a的類c,使其去實現介面b中的方法:
class c implements a,b public void method1(string arg1, string arg2) }
這樣,對外公開的介面有介面a沒有變,只改變了它的實現方法,對於原來使用介面a的系統,並不會由於元件的變化而產生額外的影響。
方法二: 定義乙個新的介面b,使之擴充套件介面a:
inte***ce b extends a
讓原來的類c實現介面b:
class c implements b public void method1(string arg1, string arg2) }
方法二的介面b因為擴充套件了介面a,介面之間存在依賴關係,所以使用方法一會更利於介面的維護。
304標記對SEO的影響,如何處理?
304 not modified是什麼意思?簡單理解 304錯誤狀態碼是當客戶端嘗試訪問伺服器同一頁面的時候,如果二次訪問的時候,頁面內容並沒有發生改變,那麼伺服器就會返回304狀態碼,嚴格意義上講,它並不是一種錯誤。304狀態碼產生的原因 頁面長時間不更新 如果你的頁面內容長時間不更新,比如 靜態...
設計模式學習筆記 之四 如何處理變化的需求
如果我們能夠以不變應萬變,那麼我們是相當的成功了,這是個無法完成的任務。但如果我們能以最小的代價來應對這變化無窮的需求,那麼我們就沒有失敗.為了解決變化的需求帶給我們的困惑,也為了 到底有沒有 功能分解 這外的其他選擇,我們還是回到現實生活中看看人們是如何做事的,細心的觀察,耐心的體會,會發現一些我...
阿里軟體研發總監葉偉 如何處理技術和需求的矛盾
無論是開發人員還是leader,儘管角色不同,但他們都不過是整個開發團隊的一部分,他們的目標也都一致 應和需求 完成專案開發。他們也經常在開發過程中遇到技術和需求之間產生的矛盾,那麼這些矛盾該如何調解 當需求出現描述模糊的時候又該怎樣處理呢?為此,記者採訪了阿里軟體研發中心總監葉偉。葉偉認為技術和需...