框架理念
最少的代碼,完成最通用的功能,是最美的設(shè)計(jì)
有沒(méi)有比SpringBoot更簡(jiǎn)單,更輕量,幾乎不用寫(xiě)代碼就能完成后端CRUD功能的框架呢
答案是:有...,傳送門在下面
XModel——無(wú)后端框架只需要寫(xiě)實(shí)體類,然后直接RESTful請(qǐng)求,全自動(dòng)CRUD
那有沒(méi)有比XModel更靈活一點(diǎn),當(dāng)我需要定制化一些業(yè)務(wù)的時(shí)候,可以幾乎不用寫(xiě)代碼就實(shí)現(xiàn)的框架呢
答案是:有...,傳送門在下面
XBatis——無(wú)后端框架只需要寫(xiě)SQL,然后直接RESTful請(qǐng)求,全自動(dòng)CRUD
這是繼xmodel之后,對(duì)于微服務(wù)無(wú)后端架構(gòu)的一點(diǎn)思考,因?yàn)閱渭兊腃RUD雖然能解決項(xiàng)目上80%的起步開(kāi)發(fā)需求,但是現(xiàn)實(shí)總是殘酷的,總有那么20%的功能需求比較復(fù)雜,簡(jiǎn)單CRUD搞不定,例如多層結(jié)構(gòu)的數(shù)據(jù)處理,例如需要一些簡(jiǎn)單邏輯判斷,那么這時(shí)候怎么辦呢,如何寫(xiě)最少的代碼去實(shí)現(xiàn)我們需要的功能呢?我思考了很久,最后還是覺(jué)得,在處理關(guān)系型數(shù)據(jù)上,沒(méi)有什么比SQL要來(lái)得強(qiáng)大,輕巧。所以,我編寫(xiě)了xbatis這個(gè)小服務(wù)應(yīng)用,嘗試解決這20%復(fù)雜需求中一部分的問(wèn)題。
xbatis基本的思想理念就是,RESTful請(qǐng)求直接打通到SQL語(yǔ)句,拋開(kāi)傳統(tǒng)的Action,Service等業(yè)務(wù)中間層,沒(méi)有中間商賺差價(jià)!對(duì)于簡(jiǎn)單的業(yè)務(wù)邏輯處理,直接用簡(jiǎn)單的SQL語(yǔ)句解決即可。(但是在這需要說(shuō)明的是,對(duì)于非常復(fù)雜的業(yè)務(wù)邏輯處理,xbatis就不合適了,建議這個(gè)時(shí)候還是使用傳統(tǒng)的業(yè)務(wù)中間層。)好了,廢話少說(shuō),直接來(lái)看使用方法
使用方法
1,config/default.js中設(shè)置數(shù)據(jù)庫(kù)連接,執(zhí)行npm install
2,提前創(chuàng)建好數(shù)據(jù)表,或者使用xmodel自動(dòng)生成數(shù)據(jù)庫(kù)
3,node app.js(啟動(dòng))
框架目錄結(jié)構(gòu)(后臺(tái))
xmodel
src/app.js——系統(tǒng)入口
yaml/*.yml——SQL文件,這是使用該框架開(kāi)發(fā)唯一需要寫(xiě)的文件
RESTful規(guī)則
[POST]http://host:port/xbatis/MODEL_NAME/METHOD_NAME
[POST]http://host:port/xbatis/MODEL_NAME/METHOD_NAME
[POST]http://host:port/xbatis/MODEL_NAME/METHOD_NAME
[POST]http://host:port/xbatis/MODEL_NAME/METHOD_NAME
例子
以一個(gè)用戶模塊為例,需要對(duì)用戶進(jìn)行定制查詢:
[POST]http://host:port/xbatis/user/find_by_username
post body:{"username":"cheney"}
user.yml文件:
findByUsername:
- select * from user where username = :username
實(shí)現(xiàn)思路
1、使用Node的Express微服務(wù)框架作為基礎(chǔ)
2、使用Express的中間件Router處理所有請(qǐng)求
3、因?yàn)镽ESTful風(fēng)格接口規(guī)范,所以Controller控制器可以根據(jù)路徑解析,動(dòng)態(tài)調(diào)用需要處理的SQL
4、使用nodebatis(一個(gè)極其優(yōu)雅的Node類Mybatis框架,使用yml文件編寫(xiě)SQL)完成請(qǐng)求到SQL的業(yè)務(wù)處理
5、另外框架附加了config環(huán)境配置,可以根據(jù)開(kāi)發(fā)或生產(chǎn)切換環(huán)境配置;tracer日志系統(tǒng),可以很優(yōu)雅簡(jiǎn)潔呈現(xiàn)不同級(jí)別log
未來(lái)還會(huì)考慮更靈活拓展,更強(qiáng)大業(yè)務(wù)功能,當(dāng)然,這些都必須在不寫(xiě)代碼的前提設(shè)計(jì)理念:)下完成......
設(shè)計(jì)背景
可以看到,XModel和XBatis的設(shè)計(jì)和實(shí)現(xiàn)都并不復(fù)雜,但實(shí)際上,達(dá)到了很“炫酷”的效果,真的可以幾乎不寫(xiě)任何后端代碼就是實(shí)現(xiàn)了一般項(xiàng)目中大量冗余重復(fù)編寫(xiě)的CRUD,甚至是簡(jiǎn)單的業(yè)務(wù)邏輯。我個(gè)人在項(xiàng)目中運(yùn)用xmodel和xbatis組合使用,使得我的開(kāi)發(fā)效率得以數(shù)倍的提升,使得我可以更加專注去處理復(fù)雜邏輯。
“無(wú)后端”架構(gòu)并不意味著完全不用編寫(xiě)后端代碼,而是那些冗余,重復(fù),簡(jiǎn)單,繁瑣,毫無(wú)意義的代碼為什么不干脆舍棄掉呢,一個(gè)單純調(diào)用dao的service又有什么意義呢?為了以后拓展?那為什么不干脆重新寫(xiě)一個(gè)service呢?軟件工程的一個(gè)思想,永遠(yuǎn)不要去修改原先的代碼,而是采用新寫(xiě)代碼的方式來(lái)做變更。
微服務(wù),微功能,微接口,當(dāng)業(yè)務(wù)功能變遷,直接重新使用新接口進(jìn)行更替就可以了,舊接口廢棄,但這樣做的前提是——新寫(xiě)接口的時(shí)間成本低于修改接口的時(shí)間成本。傳統(tǒng)的開(kāi)發(fā)模式中,這幾乎是不可能實(shí)現(xiàn)的,但是在“無(wú)后端”架構(gòu)中,卻是很自然的。
當(dāng)然,xmodel和xbatis只能解決CRUD和簡(jiǎn)單業(yè)務(wù)邏輯和簡(jiǎn)單業(yè)務(wù)場(chǎng)景,還有更多的復(fù)雜業(yè)務(wù)無(wú)法處理,對(duì)于復(fù)雜業(yè)務(wù)的解決方案,我個(gè)人一直也在思考中,也同時(shí)在開(kāi)源界尋找著,如果看客們有好的想法,非常歡迎評(píng)論或聯(lián)系我,不勝感激!
如果有任何的批評(píng)建議,BUG反饋,問(wèn)題反饋,或是想法建議,幫助支持,個(gè)人都十分歡迎,我個(gè)人的聯(lián)系方式如下:)
作者:CheneyXu
關(guān)于:XServer官網(wǎng)