2017-10-17 4 views
0

私はポロの概念上のオンライン利用可能ないくつかのドキュメンテーションを経ており、なぜ我々はポロを使用する必要があることを理解したが、何i」はdidnのしていますビジネスロジックがサービスクラスに入る必要がある場合、アクティブレコードモデルクラスにはどうすればよいのでしょうか?レール:ポロ(昔ながらのルビーオブジェクト)以下のとき、どのようなコードは、モデルとサービス・クラスで行くべき構造

はまた、どのようなケースでは、サービスクラスを作成しても意味がありません、代わりにActiveRecordのモデルクラスで記述したコードでなければなりません?

何か助けていただければ幸いです。

+0

あなたが「ポロ構造」とはどういう意味ですか?あなたの質問は、 "良いコードを書くにはどうすればいいですか?" - これは大いに議論されている巨大なトピックであり、単一のStackOverflow投稿に簡潔に回答することはできません。トピックには何千もの本が書かれています。 –

+0

開始するには、単一責任原則など、原則(原則:https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)を読むことをお勧めします。 –

+0

あなたの質問に対するやや曖昧な答えとして、私が言うことができる最高のものは:あなたのコードは「きれいでシンプル」でなければなりません。クラスは**一つの責任**を持つべきです。サービスオブジェクトの主な目的は、複雑なロジックをクラスのカスタマイズされた構造に抽象化することです。柔軟で、再利用可能で、テスト可能なようにします。 –

答えて

0

この記事では、完全にあなたの質問にお答えし、より多くの満足よりもあなたを残します:Extreme Rails Decoupling with POROsを。要約すると

、ポロスは、Railsの中にさまざまな方法で使用することができます。

  1. サービスオブジェクト:これはステートレスオブジェクトであり、その依存関係への副作用を有することができます。通常、ユーザの課金処理やそれ以降のメールの送信、キューへの公開などの外部サービスと対話する必要があるときに利用されます。それらの隔離によって簡単にテストすることができます。
  2. インタラクタ:これは、特定のユースケースを実行するために使用されるRubyオブジェクトの専門用語です。これらのクラスには、通常、実行可能な名前(動詞)があります。そのようなクラスの例は、ChargePendingUsers
  3. 値オブジェクトを指定できます。これらは、平等のアイデンティティに基づいていない、非常に単純なエンティティを表し不変オブジェクトです。これの非常に一般的な例は、Moneyクラスで、その通貨とその金額の両方を表示できます。
  4. クエリオブジェクト:これは、ARモデルからのクエリの責任を抽象化し、クラスを軽く保ちます。それらは通常、基になるクエリーロジックが複雑な場合に使用されます。
  5. プレゼンター:これらのオブジェクトは、ほとんどの場合、SimpleDelegatorを継承し、ビューをロジックから解放します。デコレータパターンを実装し、基になるオブジェクトに多くの機能を追加します。
関連する問題