框架理念
最少的代碼旗笔,完成最通用的功能粪狼,是最美的設(shè)計(jì)
無后端框架——XModel
有沒有比SpringBoot更簡單电抚,更輕量,幾乎不用寫代碼就能完成后端CRUD功能的框架呢
答案是:有...蔗衡,傳送門在下面
XModel——無后端框架只需要寫實(shí)體類纤虽,然后直接RESTful請(qǐng)求,全自動(dòng)CRUD
這是一個(gè)用Node構(gòu)建的“無后端”框架绞惦,“無后端”架構(gòu)和框架應(yīng)該在目前來說還是比較激進(jìn)和前沿的廓推,這個(gè)項(xiàng)目是我個(gè)人的一個(gè)學(xué)習(xí)和試水吧,未來還會(huì)繼續(xù)拓展和實(shí)現(xiàn)翩隧。
Node的優(yōu)美和強(qiáng)大樊展,讓我愛不釋手呻纹,我第一次覺得在微服務(wù)框架領(lǐng)域,有了和SpringBoot一戰(zhàn)的對(duì)手专缠。廢話少說了雷酪,先直接來看使用,然后詳細(xì)說實(shí)現(xiàn)思路——
使用方法
安裝說明
1,config/default.js中設(shè)置數(shù)據(jù)庫連接
2,node app.js(啟動(dòng))
3,啟動(dòng)app.js后涝婉,系統(tǒng)會(huì)自動(dòng)加載model/下所有的JS文件哥力,并且與數(shù)據(jù)庫同步,創(chuàng)建數(shù)據(jù)庫表或更新字段
使用說明(model任意墩弯,例如:user_info吩跋,數(shù)據(jù)庫表無須關(guān)心笆焰,配置數(shù)據(jù)庫連接之后咒精,數(shù)據(jù)實(shí)體會(huì)自動(dòng)與數(shù)據(jù)庫同步,目前唯一需要做的事情就是寫實(shí)體類)
RESTful接口
[POST]http://host:port/xmodel/MODEL/create
[POST]http://host:port/xmodel/MODEL/update
[POST]http://host:port/xmodel/MODEL/query
[GET]http://host:port/xmodel/MODEL/get/:id
[GET]http://host:port/xmodel/MODEL/destroy/:id
以一個(gè)用戶模塊為例扑浸,需要對(duì)用戶進(jìn)行增刪改查:
需要注意的是默認(rèn)自動(dòng)創(chuàng)建id,createdAt,updatedAt三個(gè)字段引矩,無須人工處理
在數(shù)據(jù)庫插入一條數(shù)據(jù)梁丘,只需要請(qǐng)求如下url
[POST]http://host:port/xmodel/user_model/create
post body:{"username":"cheney","password":"123"}
在數(shù)據(jù)庫修改一條數(shù)據(jù),只需要請(qǐng)求如下url
[POST]http://host:port/xmodel/user_model/update
post body:{id:1,"username":"cheney","password":"123456"}
在數(shù)據(jù)庫查詢多條數(shù)據(jù)旺韭,只需要請(qǐng)求如下url
[POST]http://host:port/xmodel/user_model/query
post body:{"username":"cheney"}
在數(shù)據(jù)庫查詢一條數(shù)據(jù)氛谜,只需要請(qǐng)求如下url
[GET]http://host:port/xmodel/user_model/get/1
[GET]http://host:port/xmodel/user_model/destroy/1
框架目錄結(jié)構(gòu)
controller——請(qǐng)求控制器,全自動(dòng)区端,無須人工處理
router——路由器控制器值漫,全自動(dòng),無須人工干預(yù)
sequelize——ORM數(shù)據(jù)庫映射器织盼,全自動(dòng)惭嚣,無須人工干預(yù)
config——系統(tǒng)環(huán)境配置文件,不同開發(fā)/生成環(huán)境悔政,使用不同配置
model——【數(shù)據(jù)模型實(shí)體晚吞,這是使用框架唯一需要編寫的文件,每增加數(shù)據(jù)實(shí)體谋国,增加一個(gè)文件】
app.js——系統(tǒng)入口
實(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)用需要處理的實(shí)體類
4近弟、使用Sequelize(一個(gè)極其優(yōu)雅的NodeORM框架)完美完成請(qǐng)求JSON對(duì)象與實(shí)體類缅糟,再到數(shù)據(jù)庫表的映射
5、另外框架附加了config環(huán)境配置祷愉,可以根據(jù)開發(fā)或生產(chǎn)切換環(huán)境配置窗宦;tracer日志系統(tǒng)赦颇,可以很優(yōu)雅簡潔呈現(xiàn)不同級(jí)別log
未來還會(huì)考慮更靈活拓展,更強(qiáng)大業(yè)務(wù)功能赴涵,當(dāng)然媒怯,這些都必須在不寫代碼的前提設(shè)計(jì)理念:)下完成......
設(shè)計(jì)背景
目前RESTful風(fēng)格,MVVM前后端分離的Web應(yīng)用架構(gòu)設(shè)計(jì)已經(jīng)逐漸成為主流髓窜,雖然SSH等之類的傳統(tǒng)MVC模式后端框架及其架構(gòu)還會(huì)并行存在一段時(shí)間扇苞,但是唯物主義的理念,新事物總會(huì)取代舊事物寄纵。
我自己個(gè)人從最早先的Java Servlet開發(fā)鳖敷,到SSH,SSM程拭,SpringMVC定踱,SpringBoot等Java框架的演進(jìn),而因?yàn)閭€(gè)人對(duì)于技術(shù)的熱愛和追求哺壶,這些年也更多地嘗試過PHP和Python進(jìn)行架構(gòu)開發(fā)屋吨。在個(gè)人對(duì)于整個(gè)Web架構(gòu)設(shè)計(jì)的思考和理解中蜒谤,雖然后端百花齊放山宾,但Java似乎永遠(yuǎn)都是一枝獨(dú)秀,以其頑強(qiáng)的生命力獨(dú)占半壁江山鳍徽。
的確资锰,Java很優(yōu)秀,越是深入地接觸Java會(huì)越覺得Java的設(shè)計(jì)思想不簡單阶祭,JavaWeb的衍生框架和工具實(shí)在太多了绷杜,太完善了。SpringMVC盛行的時(shí)候濒募,我就被它的思想和理念吸引鞭盟,以至于我自己在學(xué)習(xí)PHP的時(shí)候,用了SpringMVC的概念瑰剃,花了一年多接近兩年的業(yè)余時(shí)間完成了一個(gè)極度類似SpringMVC的PHP框架齿诉,我自己給它起名叫做PHPBean,這是個(gè)人制作的第一個(gè)Web框架晌姚,傳送門在下面:
在框架的設(shè)計(jì)和搭建中粤剧,因?yàn)槲覀€(gè)人十分不喜歡復(fù)雜的配置和冗余的代碼,雖然業(yè)務(wù)永遠(yuǎn)都是復(fù)雜到不能再復(fù)雜挥唠,但無論多么龐大的系統(tǒng)抵恋,都不可能滿足無限增長和復(fù)雜的業(yè)務(wù)模型,那么既然如此宝磨,為什么不把事情做簡單弧关,做一個(gè)最簡單的框架系統(tǒng)盅安,最少的代碼完成80%的日常常用功能呢?在PHPBean這個(gè)框架中梯醒,我盡可能地使用“約定實(shí)現(xiàn)”宽堆,嚴(yán)格規(guī)范的目錄結(jié)構(gòu),最少最少的代碼和系統(tǒng)層級(jí)茸习,實(shí)現(xiàn)一個(gè)MVC系統(tǒng)要做的基本事情畜隶。至于為什么選擇PHP,純粹是因?yàn)橄雽W(xué)學(xué)PHP号胚,和因?yàn)镻HP是腳本籽慢,部署方便
以上是我個(gè)人對(duì)于MVC框架的思考和理解,不過隨著時(shí)間的推移猫胁,就當(dāng)我沾沾自喜以為自己的框架已經(jīng)無懈可擊的時(shí)候箱亿,MVVM出世了,這個(gè)時(shí)候我才認(rèn)識(shí)到弃秆,原來的自己是多么幼稚(也許以后我還是會(huì)這么認(rèn)為)届惋,MVVM的設(shè)計(jì)思想和理念和我原先在設(shè)計(jì)實(shí)現(xiàn)PHPBean的時(shí)候有很多重疊,但是苦于當(dāng)時(shí)我根本不知道前端的東西菠赚,以為前端只有HTML,CSS,JQuery......
不過所幸的是脑豹,我遇到了一個(gè)前端朋友,一個(gè)很厲害的前端朋友衡查,引領(lǐng)我進(jìn)入了前端的世界瘩欺,還記得這是第一次我感覺到了自己就像剛邁入大學(xué)校園的記憶,知道原來前端的世界已經(jīng)翻天覆地拌牲。在NPM和VUE等等入門了之后俱饿,我開始思考后端,雖然SpringBoot已經(jīng)足夠強(qiáng)大塌忽,官網(wǎng)上眼花繚亂的組件拍埠,插件,真的是可以實(shí)現(xiàn)任何你想要的功能土居,而且都非常簡單枣购,再?zèng)]有以前SpringMVC那么復(fù)雜的配置。
但是總有那么一個(gè)疑問装盯,能不能再簡單點(diǎn)坷虑,能不能比SpringBoot再簡單,再輕量點(diǎn)~好吧埂奈,于是就有了現(xiàn)在的這篇文章
如果有任何的批評(píng)建議迄损,BUG反饋,問題反饋账磺,或是想法建議芹敌,幫助支持痊远,個(gè)人都十分歡迎,我個(gè)人的聯(lián)系方式如下:)
作者:CheneyXu
關(guān)于:XServer官網(wǎng)