2011-07-07 125 views
0

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

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

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

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

回答

1

我不确定我完全理解你的问题。然而,DataMapper库可以很容易地使用在事后持久性添加到已经存在的对象模型,原因有二:

  1. 它不依赖于类继承(例如像ActiveRecord的一样),但是,混入继承,并且您可以从您喜欢的任意多个mixin继承,这意味着您不必为了向其添加DataMapper而更改对象模型的继承树。
  2. 对象关系映射在模型中显式声明,不从数据存储区推断。这意味着您可以在数据存储和模型之间有非常复杂的映射,与ActiveRecord的相当简单的1:1表==类,行==对象,列==属性映射不同。

现在,无论您是否设法保持持久性方面完全正交,并且例如在另一个宝石中,这是另一个问题。你可能确实保存在一个单独的库,只是打开所有的模型类和include DataMapper::Resource并声明所有的属性。这将允许您仍然无需持久地部署对象模型gem,但持久性gem显然将与对象模型gem紧密耦合。