框架API設計相關的碎言

2021-08-30 07:33:29 字數 1246 閱讀 3837

框架的api設計,應該是乙個從粗粒度到細粒度的精煉過程,而不能一開始就提供細粒度卻沒有考慮周全的api,這樣的情況會:

1- 造成框架使用者的窘迫, 當框架實現中存在bug的時候, 使用者將難以繞過這些bug而前行, 只能等待框架的bug fix版本的發布;

2- 造成框架的頻繁而倉猝的公升級, 難免又引入新的bug;

從理性的角度來看, 框架的api設計, 開始之初, 應該是一種粗粒度的, 且功能限定幾乎沒有的形式。之後,可以根據使用者的反饋以及框架設計者本身的考慮,來進一步的細化或者暴露新的,但功能相似的api,也就是說,我們可以在之後鼓勵使用者使用新的api,而盡量少用舊有的api, 這樣的好處就是, 當新的api有考慮不周全的時候, 使用者依然可以轉而求助於舊的,但功能幾乎沒有限定的api, 使得使用者不用心急火燎的等待框架新版本的發布, 與此同時,框架本身可能因為開發進度無法及時發布。

舉例來說, 乙個web層的action/controller類的定義, 現在通常都是宣告為乙個簡單的pojo, 框架設計者可能直接就規定死:在這些action/controller的定義中, 只能宣告指定型別的引數。這樣做的後果就是, 當框架指定的引數型別不能滿足使用者需求的時候, 使用者會一籌莫展,因為, 除非框架公升級,否則,他們無法獲得更多的進展。

可是,如果框架設計者最初不是一上來就開始限定,而是,一開始先提供粗粒度的api要求,那麼,上面的情況就可以繞得過去。不管什麼引數型別,他們的資料**最終都要通過servletrequest輸入,通過servletresponse輸出,那麼,我們就可以對如下的action/controller的處理方法提供支援:

public void actionmethod(servletrequest requet, servletresponse response);
然後,在這的基礎上,再提供細粒度並且有效提煉的api支援:

public void actionmethod(type1 argument1, type2 argument2, ...);
當框架提供的細粒度的api支援無法滿足使用者需求的時候,使用者依然可以轉而求助於最初的粗粒度的api,而不是眼巴巴的幹等。

框架設計者提供細粒度的,精煉後的api當然是最初的目的,並且也是為了簡化使用者的工作,但難免有考慮不周之處,所以,採取循序漸進, 留條後路的做法,很多情況下,對使用者來說,對框架設計來說,都會是受益的。使用者不用心急火燎的等待, 框架的設計和開發者也不用火燒屁股般緊急發布bugfix版本, good balance, isn't it?

框架的API設計

設計的目的是服務 編寫的時候無論在何處,只需要簡單的呼叫框架api即可獲取資源,無需其他任何設定。例如在資料 服務的 中使用context.logger 返回是的資料 服務的日誌,而在管控服務中呼叫context.logger 返回的是管控服務的日誌。不同的服務之間的資源不同,所以肯定有乙個map用...

jQuery框架ajax相關api基本操作

圖書標號 php 獲取code 的圖書標號 code post code arr array arr hlm array bookname 紅樓夢 author 曹雪芹 desc 好幾個家族的黑幕 arr shz array bookname 水滸傳 author 施耐庵 desc 108將 梁山好...

浮動相關的細細碎碎

前言 今天主要是整理一下浮動和清除浮動的相關的內容,也順便理一下overflow和clear的相關。清除浮動的方法主要也是看了網上的總結,然後自己實現了一下。一 什麼是標準文件流標準文件流是指不使用一些奇奇怪怪的屬性 預設狀態 的時候,文件中的元素會自動從左往右 從上往下的流式排版。標準文件流中的兩...