nodejs mongoose建模實踐

一直以來mongoose學習都是比較麻煩的,mongoose-cli試圖簡化學習和測試mongoose部分,並經過app開發流程反思整個過程當中業務邏輯部分如何抽象,以期簡化開發與分層實現node

app開發流程

如圖git

Screen-Shot-2015-08-07-at-2.22.06-PM.png

這裏首先從交互圖開始,需求統一爲交互圖。github

  • 開發拿到交互圖,首先要根據交互【拆分功能點】
  • 根據功能點造成【api文檔】
  • 根據功能點和已有model進行【建模】
  • 根據模型,【模擬數據】,並校驗模型直到可行
  • 根據功能點+模型,編寫api接口

那麼,咱們看看這個流程裏什麼是最核心的東西?mongodb

  • 功能點
  • 模型

這2點實際上是整個app裏最核心的部分,即業務部分,咱們若是把握住此處的設計,輸出【api文檔】 + 模型,便可拆分工做任務,WBS數據庫

業務建模

  • 避免過分設計,夠用就好
  • 若是時間容許就給之後多留點擴展

nodejs + mongodb(mongoose)

根據上面的流程,結合MEAN架構,須要交付npm

  • api文檔
  • mongoose模型

如何簡化api文檔?

可以根據api文檔生成routes和controller部分代碼,而且可逆json

留空model和service便可。api

如何簡化model操做?

  • scaffold 腳手架,能夠快速完成模型相關crud操做,界面也能夠。
  • moa-console 控制檯,在命令行便可測試模型方法等
  • mongoose-cli 隨時隨地,測試model,融合bluebird等promise庫,讓業務處理更簡單
  • 能夠把model直接打包發佈到npm (TODO)

模型固化成node module的意義

mongoose-cli

上面是對於業務建模的思考,那麼咱們如何快速的進行建模,又能不和現有代碼耦合呢?promise

以前說過,業務邏輯,基本就是model + 流程控制,可否直接都集成到一塊兒?架構

mongoose-cli主要解決的就是這個問題

mongoose best practice

  • mongoose + mongoosedao
  • bluebird

Install

[sudo] npm install -g mongoose-cli

Usage

第一步:使用mongoose命令來初始化測試目錄結構

➜  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

第二步: 執行mc命令,在moa-console中測試

➜  mongoose-console  mc
提醒:debug狀態鏈接數據庫:
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] - undefined

Available Entity: 
  - Bson
  - Index
Moa> [mongoose log] Successfully connected to:  NaN
mongoose open success

undefined
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狀態鏈接數據庫:
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%

全文完

歡迎關注個人公衆號【node全棧】

node全棧.png

相關文章
相關標籤/搜索