極簡(jiǎn)風(fēng)格Node無(wú)后端框架實(shí)現(xiàn)——xbatis

框架理念

最少的代碼,完成最通用的功能,是最美的設(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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容