今天是周一,周末休息的很好,看来这是一个全新的开始。早餐真的很美味,而且自己掌勺,还有一种成就感。周末休息是调整,这样在下周才有 一个好的开始。咖啡没了,今天快递说能送到,希望如此;咖啡是我的一种嗜好,一种生活态度,美美的一杯香浓味儿,思路会泉涌般袭来!
早餐时,老婆和我讨论了手游和网游的问题,对于浏览器屏幕来说,我觉得不是越小约好,而是适度,针尖大小的设备能看到才怪了。我们讨论的结果是,宅男 宅女电脑用的多,学生智能设备用的多,而问题不是设备大小,如果设备小屏幕大,所有人都喜欢的,比如未来的立体成像等技术。讨论这个有趣的事儿之后, 我又该一天奇妙的程序员之旅了,周一到周五都是一个兴奋的过程,让我在幸福的味道下,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 对象而已。