如何勾画出一个事件驱动的系统?

时间:2011-01-12 04:34:06

标签: node.js project-planning event-driven-design

我正在尝试在Node.js中设计一个系统(尝试使用Node的并发来解决my earlier problems之一)但是我在弄清楚如何绘制一个关于如何绘制事物的计划时遇到了麻烦应该运作。

我开始考虑回调而不是返回值。流量不是线性的,它真的令人难以置信。如何为事件驱动系统绘制操作流程?

我需要一些我可以看到并说“好的,是的,这就是它的工作原理。我会在这里开始,它会在这里给我回复这些结果。”

图片对这个非常有帮助。感谢。

编辑:我正在寻找比UML更细粒度的东西,具体来说,这将有助于我从阻塞和面向对象的编程结构转换,我很舒服,对于一个非阻塞和事件驱动的结构,我不熟悉。

2 个答案:

答案 0 :(得分:3)

基于http://i.stack.imgur.com/9DDQP.png你需要的是一个很好的流程库,它允许你在节点中管道同步和异步调用。

一个这样的库是https://github.com/isaacs/slide-flow-control(也可以看一下slide preso),下面是你需要做的代码大纲。

它是自我记录的,如你所见,它非常简洁,不需要纯粹的nodejs,uml,img等。

var chain = require("slide/chain")
    , asyncMap = require("slide/async-map")
    ;

// start processing
main_loop(function() { 
    console.log("its done"); // when finished
});

function main_loop(cb) {
    var res = [];
    // each entry in chain below fires sequentially i.e. after
    // the previous function completes
    chain
        ( [ [start_update_q, "user-foo"]
          , [get_followed_users, chain.last]
          , [get_favorites, chain.last]
          , [calc_new_q]
          , [push_results, chain.last]
          ]
          , res
          , cb
        )
}

function get_favorites(users, cb) {
    function fn(user, cb_) {
        get_one_users_favorites(user, cb_);
    }
    // this will run thru get_favorites in parallel
    // and after all user favorites are gotten it will fire 
    // callback cb
    asyncMap(users, fn, cb);
}

// code in the various functions in chain here,
// remember to either return the callback on completion.
// or pass it as an arg to the async call you make within the
// function as above i.e. asyncMap will fire cb on completion

答案 1 :(得分:0)

UML可能是合适的。我会看一下行为图。