-
Notifications
You must be signed in to change notification settings - Fork 17
编写业务逻辑
Xu,Yizhi edited this page Jul 28, 2015
·
6 revisions
对于业务逻辑,lark.js 支持MVC分层的方式来编写。这个方式有如下约定:
- 按业务内容分层 从上到下的 controller/action , views , page models, data models, dao models等层次
- app中只能相邻层调用,不允许跨层调用
- hook功能支持:支持hook功能,在跨层调用前后,发送相应事件,添加自定义逻辑。
controller/action 实现路由功能。自需把路由相关逻辑按规定放controllers目录下即可。具体可以参考路由处理
view 层是集成模板功能。目前采用的是 ejs 模板系统。你只需按规则把模板放 views 目录下即可。
models 主要处理产品业务逻辑。model 层又分3层: pageService, dataService, dao, 功能如下:
- pageService 负责页面数据逻辑, 被controller,action调用,调用dataService
- dataService 负责业务数据逻辑,被pageService调用,调用dao
- dao 负责数据库相关业务逻辑
pageService 样例:
var pageService = require('lark/mvc').pageService
var demo = pageService.create('demo')
demo.render = function(){
var res = ''
co(function *(){
var categroy = yield this.dataService.demo.getArticles(this.params.id)
var articles = yield this.dataService.demo.getArticles(categroy)
var data = {
'categroy': categroy,
'articles': articles
}
res = yield this.render('demo.html', data)
})
return res
})
module.exports = demo
action 层调
this.pageService.demo.render() [ok]
this.dataService.demo.getArticles() [no]
dataService 样例:
var dataService = require('lark/mvc').dataService
var demo = dataService.create('demo')
demo.getData = * function(){
// get data by dao
articles = {}
co (function *(){
var articles = yeild this.dao.demo.get(this.request.id);
if articles
})
return articles
}
module.exports = demo
dao 样例:
var dao = require('lark/mvc').dao
var demo = dao.create('dao')
demo.getData = * function(){
db = redis.conn()
data = db.get('test-key')
return data
}
module.exports = demo
层之间hook样例:
pageSerice.on('beferDataService', function(params){
validate(params)
})
lark 推荐对于一些处理与产品业务逻辑无关的,有完整独立功能的通用模块(比如连接mysql数据库,zookeeper 配置服务等)放在 node_modules 里面,作为node_modules类型的通用模块来处理(而不是放lib里面)。然后可以在package配置 git 地址的方式来入代码库和进行后续升级。(npm 中配置 git 地址作为module更新依据可以看这里 https://docs.npmjs.com/files/package.json#git-urls-as-dependencies) . 示例package.json如下:
{
"dependencies": {
"lark": "^1.0.0",
"bns": "git+http://[email protected]/project/bns.git#3588459", //private module
}