程序员 2014-10-13 一天的奇妙之旅
发布于 4个月前 作者 leogiese 528 次浏览 来自 分享

原文 http://forjs.org/book/xyfULqrrXg/section/eyloCFR-b8e

今天是周一,周末休息的很好,看来这是一个全新的开始。早餐真的很美味,而且自己掌勺,还有一种成就感。周末休息是调整,这样在下周才有 一个好的开始。咖啡没了,今天快递说能送到,希望如此;咖啡是我的一种嗜好,一种生活态度,美美的一杯香浓味儿,思路会泉涌般袭来!

早餐时,老婆和我讨论了手游和网游的问题,对于浏览器屏幕来说,我觉得不是越小约好,而是适度,针尖大小的设备能看到才怪了。我们讨论的结果是,宅男 宅女电脑用的多,学生智能设备用的多,而问题不是设备大小,如果设备小屏幕大,所有人都喜欢的,比如未来的立体成像等技术。讨论这个有趣的事儿之后, 我又该一天奇妙的程序员之旅了,周一到周五都是一个兴奋的过程,让我在幸福的味道下,code出一个舞台;有个人说自己不喜欢code,我觉得没什么,选择 自己喜欢的,然后去义无反顾的做就可以了,做自己想做的事业,是一种最崇高的精神!

这里还是推荐一下我的书:《精通Node.js开发》 《Angular.js视频详解》

思路收回来,还是先要把今天的行程计划一下:

  • 视频教程录制,这几乎是每天必做的了。
  • domain框架的完善
  • tree 组件开发

课程录制很顺利

Angular模块化视频讲解 http://forjs.org/book/lkG2NMQ1Sx/section/lkA6as-ZUx


domain 框架的完善

unit test时,我需要把以前的 apply 变成 this._apply 进行测试,因为apply注入函数已经在domain 内部做了,所以test需要使用 _apply

另外,需要恢复下面的代码,并且修改一下,原因也是 apply 注入函数的责任交给了 domain框架。

AggregateRoot.js

AggregateRoot.extend = function (option) {

......

    for (var k in option.methods || {}) {
        Class.prototype[k] = option.methods[k];
    }

......

Domain.js加入了register简化方法,通过option.saga = true 来判断是注入Saga还是普通的AggregateRoot。


......


register: {
    value: function (option) {
        if (option.type === "saga") {
            this.registerSaga(option);
        } else {
            this.registerAggregateRoot(option);
        }
        return this;
    }
}

......


下面开始测试一下 Domain.js


describe("Domain", function () {

    var domain = new Domain(), UserClass;

    it("#register", function () {
        domain.register("User",{
            when: function (event) {
                switch (event.name) {
                    case "changeName":
                        this.set("name", event.data.name);
                        break;
                    case "changeAge":
                        this.set("age", event.data.age);
                        break;
                }
            },
            methods: {
                changeName: function (data,apply) {
                    apply("changeName", data);
                },
                changeAge: function (age) {
                    apply("changeAge", data);
                }
            }
        });
    })

})

注册是成功了,所谓成功就是没抛出异常,但还需要深入测试,确保无bugs。

但还是先要为domain加一些功能,get 和 create是必须的。domain也屏蔽了一些东西,让封装性更好。

Domain.js 新加入代码:

    create: {
        value: function (className, data, cb) {
            this._repos[className].create(data, cb);
        }
    },

    get: {
        value: function (className, id, cb) {
            this._repos[className].get(id, function (err, obj) {
                if (obj) {
                    cb(obj.json());
                } else {
                    cb(err);
                }
            })
        }
    }

加入Domain.js的 get / create 方法的单元测试:


var uid;

it("#create",function(){
    domain.create("User",null,function(err,id){
        uid = id;
    })
})

it("#get",function(){
    domain.get("User",uid,function(err,data){
        data.alive.should.eql(true);
    })
})

测试通过,过程中修改了get方法的代码:

    get: {
        value: function (className, id, cb) {
            this._repos[className].get(id, function (err, obj) {
                if (obj) {
                    cb(null,obj.json());
                } else {
                    cb(err);
                }
            })
        }
    }

还需要加入 addListener

    addListener:{
        value:function(eventName,listener){

        }
    }

具体代码实现,需要think一下 … …

思考后,发现真。。。简单

    addListener:{
        value:function(eventName,listener){
            this._eventBus.on(eventName,listener);
        }
    }

因为 eventbus 就是个 node.js 的EventEmitter 对象而已。

回到顶部