是否有一个Ruby ORM使用普通Ruby对象而不使用';您不需要从基类继承吗?

是否有一个Ruby ORM使用普通Ruby对象而不使用';您不需要从基类继承吗?,ruby,orm,domain-driven-design,Ruby,Orm,Domain Driven Design,我感兴趣的是编写一个纯ruby域模型,并在以后的开发中添加持久性 我与其他语言(如Microsoft的Entity Framework)一起使用过的一些工具现在允许您为域数据模型使用普通对象,然后通过使用基于约定的映射将它们添加到持久性类中。例如,这些普通对象: 在此处将添加到数据库上下文类: 这不仅对于在测试期间分离关注点非常有用,而且还允许更易于管理的代码、遵守SRP以及在需要时轻松交换持久层的能力 在ruby领域,我现在找不到任何符合要求的东西。ActiveRecord、DataMap

我感兴趣的是编写一个纯ruby域模型,并在以后的开发中添加持久性

我与其他语言(如Microsoft的Entity Framework)一起使用过的一些工具现在允许您为域数据模型使用普通对象,然后通过使用基于约定的映射将它们添加到持久性类中。例如,这些普通对象:

在此处将添加到数据库上下文类:

这不仅对于在测试期间分离关注点非常有用,而且还允许更易于管理的代码、遵守SRP以及在需要时轻松交换持久层的能力


在ruby领域,我现在找不到任何符合要求的东西。ActiveRecord、DataMapper和Sequel都从绑定到这些框架的基类继承。是否有任何正在进行的项目、替代方法或实践可以实现这一目标?

看看这一个。它促进了域逻辑和持久性基础架构层之间的关注点的良好分离。显然,它还没有所有漂亮的ActiveRecord工具,但这是一个不错的项目,值得一看:

更新


正如我们由此看到的,不幸的是,该项目不再得到维护(

对于MongoDB,有一个Mongoid。它要求您包含一个模块,而不是从类继承:)我不知道这将如何工作。Ruby没有静态类型,因此需要元编程来声明字段。这意味着您必须从基类或模块中继承。还有,为什么要截图而不是代码呢?您可以使用FactoryGirl进行测试。然后不需要初始化完整的对象,只需初始化存根即可。另外,我认为Avdi Grimm写了一篇关于第一次使用普通对象的博客文章。我知道你想说什么,但不记得你是怎么做到的。@NiklasB。从概念上讲,这似乎很难,如果不是不可能的话,我不知道这是否是由比我更聪明的人解决的。至于截图,为了简单起见,我从Scott Gu的博客中借用了它们:我一直想知道为什么他也选择这样展示代码。@Graham:不,我的意思是那些存根类会是什么样子?Ruby没有静态类型,所以它们基本上是空的(或者只使用散列)。如果您担心将逻辑放入一个您希望独立于持久性层的模型中,为什么不将其放入一个模块中,并将其混合到实际的模型类中呢?在动态语言中,您的思维方式必须与在强类型语言中有所不同(但实际上您有更多的可能性)。