1

我不喜欢 Rails 模型同时用于业务逻辑和持久性的想法。我很想将两者分开:让我的模型包含业务逻辑,并使用另一个类层次结构来持久化。

有没有人试过这个并获得任何牵引力?在我的脑海中,它似乎对 Rails 过于强烈:form_for 需要一个 ActiveModel 对象才能工作,许多直接在业务对象上工作的常见插件也是如此。

有什么想法吗?

4

1 回答 1

1

我认为完全按照您的说法去做会很困难/很烦人,但是有一些很好的方法可以分离出您的代码。

正如您所说,一种方法是拥有 2 个单独的类,一个用于持久性,一个用于业务逻辑。我们称它们为 Foo 和 FooBL。Foo 将从 ActiveRecord 继承,包含验证逻辑以及一些用于查询和操作数据的简单方法。FooBL 将是一个常规的 ruby​​ 类,它会根据需要使用 Foo 类。您甚至可以使用 Ruby 的一些委托功能,以便可以直接使用 Foo 的一些属性和方法。

另一种稍微不同的方法是使用 Presenters,就像在Draper gem 中一样。它没有将业务逻辑从持久性逻辑中分离出来,而是分离了与视图相关的逻辑。不完全是您正在寻找的东西,但它仍然有助于清理您的代码。

我还建议您看一看 Avdi Grimm 的书Object on Rails。他深入研究了其中一些模式和实践。

祝你好运!

于 2012-08-01T20:26:24.247 回答