领域驱动设计中,也就是 Domain Driven Development, 简称 DDD 的一种设计方法,Repository 是一个重要的支撑模式。
这个代码演示了内存方式,很简单,是用 hash 来模拟的。
class InMemoryBackend
  def initialize
    @counter = 0
    @map = {}
  end
  def create(record)
    @counter = @counter + 1
    record.id ||= @counter
    map_for(record)[record.id] = record
  end
  def update(record)
    map_for(record)[record.id] = record
  end
  def delete(record)
    map_for(record).delete record.id
  end
  def find(klass, id)
    map_for_class(klass).fetch id
  end
  def all(klass)
    map_for_class(klass).values
  end
  def query(klass, selector)
    send "query_#{selector.class.name.underscore}", selector
  end
  private
  def map_for_class(klass)
    @map[klass.to_s.to_sym] ||= {}
  end
  def map_for(record)
    map_for_class(record.class)
  end
end
接下来,可以用 User 来实验
class User
  attr_accessor :id, :name 
end
db = InMemoryBackend.new
user = User.new
user.id = 1
user.name = 'Bill'
db.create(user)
db.find(User, 1)
文章中有比较完整的介绍,英文链接
作者 Hawkins 写了很多不错的博客,值得一读。