nodejs mongoose建模实践
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
一直以來mongoose學(xué)習(xí)都是比較麻煩的,mongoose-cli試圖簡化學(xué)習(xí)和測試mongoose部分,并通過app開發(fā)流程反思整個(gè)過程中業(yè)務(wù)邏輯部分如何抽象,以期簡化開發(fā)與分層實(shí)現(xiàn)
app開發(fā)流程
如圖
這里首先從交互圖開始,需求統(tǒng)一為交互圖。
- 開發(fā)拿到交互圖,首先要根據(jù)交互【拆分功能點(diǎn)】
- 根據(jù)功能點(diǎn)形成【api文檔】
- 根據(jù)功能點(diǎn)和已有model進(jìn)行【建模】
- 根據(jù)模型,【模擬數(shù)據(jù)】,并校驗(yàn)?zāi)P椭钡娇尚?/li>
- 根據(jù)功能點(diǎn)+模型,編寫api接口
那么,我們看看這個(gè)流程里什么是最核心的東西?
- 功能點(diǎn)
- 模型
這2點(diǎn)其實(shí)是整個(gè)app里最核心的部分,即業(yè)務(wù)部分,我們?nèi)绻盐兆〈颂幍脑O(shè)計(jì),輸出【api文檔】 + 模型,即可拆分工作任務(wù),WBS
業(yè)務(wù)建模
- 避免過度設(shè)計(jì),夠用就好
- 如果時(shí)間允許就給以后多留點(diǎn)擴(kuò)展
nodejs + mongodb(mongoose)
根據(jù)上面的流程,結(jié)合MEAN架構(gòu),需要交付
- api文檔
- mongoose模型
如何簡化api文檔?
能夠根據(jù)api文檔生成routes和controller部分代碼,并且可逆
留空model和service即可。
如何簡化model操作?
- scaffold 腳手架,可以快速完成模型相關(guān)crud操作,界面也可以。
- moa-console 控制臺(tái),在命令行即可測試模型方法等
- mongoose-cli 隨時(shí)隨地,測試model,融合bluebird等promise庫,讓業(yè)務(wù)處理更簡單
- 可以把model直接打包發(fā)布到npm (TODO)
模型固化成node module的意義
- 復(fù)用,多系統(tǒng)共享model
- 可以通過xxx@1.0類似的版本,在npm里進(jìn)行版本限定
- 耦合低
- 測試容易
- 新人培訓(xùn)容易
mongoose-cli
上面是對(duì)于業(yè)務(wù)建模的思考,那么我們?nèi)绾慰焖俚倪M(jìn)行建模,又能不和現(xiàn)有代碼耦合呢?
之前說過,業(yè)務(wù)邏輯,基本就是model + 流程控制,能否直接都集成到一起?
mongoose-cli主要解決的就是這個(gè)問題
mongoose best practice
- mongoose + mongoosedao
- bluebird
Install
[sudo] npm install -g mongoose-cliUsage
第一步:使用mongoose命令來初始化測試目錄結(jié)構(gòu)
? d mongoose ? d cd mongoose-console ? mongoose-console ls LICENSE README.md app config db.js example.js index.js node_modules package.json? mongoose-console mc第二步: 執(zhí)行mc命令,在moa-console中測試
? mongoose-console mc 提醒:debug狀態(tài)連接數(shù)據(jù)庫: mongodb://127.0.0.1:27017/mongoose-console-test[2015-08-06 20:59:47.378] [INFO] [default] - undefined[2015-08-06 20:59:47.379] [INFO] [default] - Welcome to the Moa console. [2015-08-06 20:59:47.380] [INFO] [default] - undefinedAvailable Entity: - Bson- Index Moa> [mongoose log] Successfully connected to: NaN mongoose open successundefined Moa> .list Available Entity: - Bson- Index Moa> Bson.find({},function(err,doc){console.log(doc)}) Moa> [ { _id: 55c35575b92da9b4fbeb3b26,user_name: 'alfred sang',__v: 0,created_at: Thu Aug 06 2015 20:39:17 GMT+0800 (CST) },{ _id: 55c356f4d1b21737ffefb2d4,user_name: 'alfred sang',__v: 0,created_at: Thu Aug 06 2015 20:45:40 GMT+0800 (CST) },{ _id: 55c356fb12e6f243ffb2c4dd,user_name: 'alfred sang',__v: 0,created_at: Thu Aug 06 2015 20:45:47 GMT+0800 (CST) },{ _id: 55c35a3fa6474371030783a3,user_name: 'alfred sang',__v: 0,created_at: Thu Aug 06 2015 20:59:43 GMT+0800 (CST) } ](^C again to quit) Moa>example
? mongoose-console node example.js 提醒:debug狀態(tài)連接數(shù)據(jù)庫: mongodb://127.0.0.1:27017/mongoose-console-test [mongoose log] Successfully connected to: NaN mongoose open success { __v: 0,user_name: 'alfred sang',_id: 55c35a3fa6474371030783a3,created_at: Thu Aug 06 2015 20:59:43 GMT+0800 (CST) } ^C%全文完
歡迎關(guān)注我的公眾號(hào)【node全棧】
轉(zhuǎn)載于:https://my.oschina.net/nodeonly/blog/489077
總結(jié)
以上是生活随笔為你收集整理的nodejs mongoose建模实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle修改字段类型方法
- 下一篇: 如何删除JAVA集合中的元素