Skip to content
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

controller/action 实现路由功能。自需把路由相关逻辑按规定放controllers目录下即可。具体可以参考路由处理

view

view 层是集成模板功能。目前采用的是 ejs 模板系统。你只需按规则把模板放 views 目录下即可。

models

models 主要处理产品业务逻辑。model 层又分3层: pageService, dataService, dao, 功能如下:

- pageService 负责页面数据逻辑, 被controller,action调用,调用dataService
- dataService 负责业务数据逻辑,被pageService调用,调用dao
- dao 负责数据库相关业务逻辑

pageService

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

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

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://user@internal.larkjs.org/project/bns.git#3588459", //private module
}
Clone this wiki locally