2017-10-17 43 views
0

我已经通过PORO概念在线提供了几篇文档,并且已经理解为什么我们应该使用PORO,但是我没有使用PORO,不明白的是,如果商业逻辑应该进入服务类,那么activerecord模型类应该怎么走呢?Rails:遵循PORO(普通红宝石对象)结构时,应该在模型和服务类中使用哪些代码

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

任何帮助表示赞赏。

+0

你是什么意思“PORO结构”?你的问题与提问“我如何编写好的代码?”一模一样。 - 这是一个很有争议的大话题,不可能在单个StackOverflow文章中简洁地回答。关于这个话题有数千本书。 –

+0

一个很好的起点是阅读SOLID原则:https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) - 例如单一责任原则。 –

+0

作为对你的问题有点模糊的回答,我能说的最好的是:你的代码应该是“干净和简单”。一个班级应该有**单一职责**。服务对象的主要目的是将复杂的逻辑抽象为一个定制的类结构;以便使其具有灵活性,可重复使用和可独立测试。 –

回答

0

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

总之,POROS可以以不同的方式来使用在滑轨:

  1. 服务对象:这是无状态的对象,并且可以具有在其依赖的副作用。当我们需要与外部服务进行交互时,通常会使用它们,例如为用户处理计费,然后在此之后发送电子邮件,或者发布到队列等等。它们的隔离允许易于测试。
  2. 交互器:这是用于执行给定用例的Ruby对象的技术术语。这些类通常具有可操作的名称(即动词)。此类的示例可以是ChargePendingUsers
  3. 值对象:这些是不可变的对象,它表示非常简单的实体,其等式不基于身份。一个非常常见的例子是一个Money类,它可以告诉它的货币和数量。
  4. 查询对象:这只是从AR模型中抽象查询责任,让您的类保持轻松。当底层查询逻辑很复杂时,通常会使用它们。
  5. 演示者:这些对象大部分时间都是从SimpleDelegator继承的,并且有助于保持我们的视图不受逻辑影响。他们实现装饰器模式并为底层对象添加更多功能。