Rails:当遵循PORO(普通的旧ruby对象)结构时,应该在模型和服务类中使用什么代码

时间:2017-10-17 09:11:01

标签: ruby-on-rails ruby oop ruby-on-rails-4

我已经浏览了几篇关于PORO概念的在线文档,并且已经理解为什么我们应该使用PORO但我不理解的是,如果业务逻辑应该进入服务类,那么应该在activerecord模型类中进行什么? ?

同样在什么情况下创建服务类没有意义,而应该在activerecord模型类中编写代码?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

本文将完全回答您的问题,让您满意:Extreme Rails Decoupling with POROs

总之,PORO可以在Rails中以不同的方式使用:

  1. 服务对象:这是无状态对象,可能对其依赖关系产生副作用。它们通常在我们需要与外部服务进行交互时使用,例如为用户处理计费,然后在此之后发送电子邮件,或发布到队列等。它们的隔离使得易于测试。
  2. Interactors:这是用于执行给定用例的Ruby对象的技术术语。这些类通常具有可操作的名称(即动词)。此类的示例可以是MsTransition: 'all 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55)', WebkitTransition: 'all 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55)', transition: 'all 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55)',
  3. 值对象:这些是不可变对象,表示非常简单的实体,其相等性不基于身份。一个非常常见的例子是ChargePendingUsers类,它可以告诉货币及其金额。
  4. 查询对象:这只是从AR模型中抽象出查询责任,让您的课程更轻松。它们通常在基础查询逻辑复杂时使用
  5. 演示者:这些对象大多数时候都是从SimpleDelegator继承而来,有助于保持我们的视图不受逻辑的影响。它们实现了装饰器模式,并为底层对象添加了更多功能。