Skip to content
Xu,Yizhi edited this page May 26, 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/lark-mvc').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/lark-mvc').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/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)
})
Clone this wiki locally