railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

サービスクラスについて

レビューの指摘事項として「モデルではなくサービスに移動しなさい」というものがありました。 サービスっていうのが良くわからなかったので先生に聞いてみました。

Railsでサービスとフォームを導入してみる話 - assertInstanceOf('Engineer', $a_suenami)

ドメインの知識のうち、どのエンティティにも属さない振る舞いあるいは複数のエンティティを操作するような振る舞いをDDDでは「サービス」と呼びます。 ドメインエキスパート等の仕様策定者が名前をつけて呼ぶ単語の中で動詞としてよく登場するものはサービスである可能性が高いです。(例: 会員登録)

以下のような特徴を持つ機能はサービスとして定義することを考えてみてください。

・AR継承クラスのクラスメソッドとして定義されている/しようとしている

メソッドの引数として別のAR継承クラスのインスタンスを必要とする

物理層(永続化層)における複数テーブルに対してINSERT/UPDATEを行う(トランザクション制御が必要)

・DB登録、API通信、メール送信など外部システムや外部リソースとの連携を同時に行う

なるほど!分かりやすい!!