如何扩展现有的Ruby模型以支持持久性

时间:2011-07-07 14:49:46

标签: ruby persistence business-logic

我有一个实现我的整个业务逻辑的gem,因此我可以在不同的应用程序中使用它。现在,其中一个应用程序需要持久性。如何轻松扩展现有的Ruby模型以支持持久性?我应该修补它们吗?

为了给你一些背景知识,我的模型对象通常只是用XML或JSON文件构建的,但现在我需要将它们存储在关系数据库中。

这个问题有共同的模式吗?我应该编写支持持久性的新模型对象,并在遗留对象和新模型对象之间进行映射,还是应该将现有对象扩展为可在数据库中表示?

非常欢迎任何提示,提示和链接。

1 个答案:

答案 0 :(得分:1)

我不确定我完全理解你的问题。但是,DataMapper库可以非常容易地用于在事实之后向已存在的对象模型添加持久性,原因有两个:

  1. 它不依赖于类继承(例如ActiveRecord),而是依赖于mixin继承,你可以从你喜欢的任何mixin继承,这意味着你不必更改对象模型的继承树将DataMapper添加到它。
  2. 对象关系映射在模型中显式声明,而不是从数据存储中推断出来。这意味着您可以在数据存储和模型之间进行非常复杂的映射,这与ActiveRecord的相当简单的1:1 table == class,row == object,column ==属性映射不同。
  3. 现在,无论您是否设法保持持久性方面完全正交,例如在一个单独的宝石中,这是另一个问题。您可以确实将它保存在一个单独的库中,该库只打开所有模型类和include DataMapper::Resource并声明所有属性。这将使您仍然可以在没有持久性的情况下部署对象模型gem,但持久性gem显然会与对象模型gem紧密耦合。