采用DDD开发信息发布系统(三)Repository


搞了半天,我发现领域对象搞明白了,落地的时候最需要搞明白的应该是 Repository 的机制,所以又要返回来开发Repository。

Repository应该包含如下的元素和方法。


function Repository(){}
var repo = Repository.prototyep;

repo._repo = {} // 对象都放在这里,始终在内存中。
repo.find = function(){}
// 查询方法
repo.findById = function(){}
repo.remove =
repo.removeById = ...
repo.create = function(entity,cb){}
// 生成个新对象。

module.exports = Repository;

实际的仓储可以扩展它。例如


function InfoRepo (){}

util.inherits(InfoRepo,Repository) // 继承

var repo = InfoRepo.prototype;

repo.findByType = function(){
this.find()
// 你的懂...
}

repo.findByTitle = function(){
this.find()
// 你也懂的...
}

相信大家认为,对象都放在 this._repo 中,内存会很大,其实,这里的机制我说一下。

如果系统无任何访问,那么 这里的对象都是 {id:xxxx} 这种只有一个对象的皮,呵呵。如果那个对象被访问了,那么这里的那个对象将被填充,但对象不变,还是内存的那一块,因为皮没动。

定期的,Repository 会从很多到期未访问的对象中抽离出肉,只留下皮,就可以清理未用的内存。



[该贴被brighthas于2012-07-12 08:38修改过]