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

12-07-12 brighthas

搞了半天,我发现领域对象搞明白了,落地的时候最需要搞明白的应该是 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;

<p>

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

function InfoRepo (){}

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

var repo = InfoRepo.prototype;

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

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

<p>

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

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

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

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

猜你喜欢