簡麗Framework-開篇


簡麗Framework-開篇

簡麗Framework 是一個開源java Web開發框架。

演示環境
http://jianli.hzbailing.cn/
admin
123456

開源地址
https://github.com/jikanghz/jianli

​ 開源的框架、庫、組件等比比皆是,每個開源產品都有它的定位和價值。

​ 簡麗Framework的定位是中小型Web項目的主體開發框架,它包含了對設計理念、開發規范、基礎模塊的理解和實踐。

數據本無形

​ Web系統主要處理的就是數據和業務邏輯。一般來說數據的存儲結構相對穩定,映射到代碼中的數據對象也相對穩定。

​ 但是數據的中間處理過程往往是復雜、多變的,為此就有了設計模式和開發手冊上提到的DTO、VO對象。在實際開發過程中使用DTO,VO對象會有一系列令人糾結的問題:我要不要再增加一個DTO?對新增加的DTO我該取什么名字?前端又在報怨后端VO對象返回的數據字段過多了...

​ 用靜態、強類型語言來表達千變萬化的數據本來就是勉為其難的事情。好在我們現在有json這樣的動態弱類型數據對象,讓結構化數據的表達和傳遞變得輕盈,從此告別了笨重的DTO、VO們。

​ 用動態弱類型數據對象可能有什么問題?我們失去了編譯器的幫助,代碼重構將只能手動進行。得失與取舍需要自己來衡量。

方法亦多態

​ 多態性通常指在運行時決定調用子類的具體方法。但其實Web系統的業務領域用到繼承的場景並不多(硬要為每個Service寫一個接口的場景除外 😃 ),所以多態性也顯得少有用武之地。

​ 我們把多態的概念擴展一下,變成運行時調用指定對象的指定方法如何?

​ 通過Spring容器可以得到指定對象,通過反射來調用指定方法。

​ 似乎變得有些撲朔迷離了,這樣做有什么好處?

​ 好處就是在Controller層可以用一個接口實現對所有服務的調用。這樣Controller層幾乎可以用一個通用方法來接管全部接口了。在這個通用方法里可以實現統一的異常處理、日志記錄、計時器等。

BaseService service = (BaseService) getServiceFactory().getBean(serviceName);
Class serviceClass = service.getClass();
Method method = serviceClass.getMethod(methodName, JsonRequest.class);

jsonResponse = (JsonResponse) method.invoke(service, new Object[]{jsonRequest});

Web接口規范

Web接口Url

http://domain/api/{service}/{method}

​ 以上是所有Web接口Url的統一格式,包含了服務名稱、方法名稱兩個參數。與面向對象的對象名和方法名類似,是每個Web接口的語義描述。

接口請求數據

{
	"token": "",
	"client": "",
	"data": {}
}
字段 類型 必填 說明
token String 接口令牌
客戶端登錄成功后得到token,以后每次調用接口都要帶上token
client String 客戶端標識
data Json 請求業務數據

接口響應數據

{
	"code": 200,
	"message": "OK",
	"data": {}
}
字段 類型 必填 說明
code Integer 響應代碼
200:成功
400:請求參數錯誤
401:身份驗證失敗
403:授權驗證失敗
500:未知服務器內部錯誤
501:已知服務器內部錯誤
message String 響應消息內容
data Json 響應業務數據

​ 可以看這個接口規范並沒有遵循RESTful接口規范,個人認為RESTful接口規范太桎梏於http協議,不足於表達api接口的語義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM