How to Refactor Your Rails App With Service Objects

サービスオブジェクトを使用して Rails アプリをリファクタリングする方法

Rails アプリケーションが複雑になるにつれて、クリーンで読みやすく、保守しやすいコードを維持することが重要になります。これを達成する効果的なアプローチの 1 つは、サービス オブジェクトを使用してコードベースをリファクタリングすることです。サービス オブジェクトは、複雑なビジネス ロジックをモデルまたはコントローラーから個別のクラスに抽出するのに役立ち、組織化、テスト容易性、再利用性の向上を促進します。この記事では、サービス オブジェクトを使用して Rails アプリケーションをリファクタリングするプロセスを検討し、その利点を示す実践的な例を示します。

問題の特定: リファクタリング プロセスを開始するには、複雑なロジックが含まれているか、単一責任原則 (SRP) に違反しているコードのセクションを特定することから始めます。ユーザーの作成、検証、通知を処理する UserController を備えた Rails アプリケーションがあると仮定します。

サービス オブジェクトの抽出: このコードをリファクタリングするには、ユーザーの作成と通知に関連する複雑なロジックを別のサービス オブジェクトに抽出します。 app/services ディレクトリの下に user_creation_service.rb という新しいファイルを作成します。サービス オブジェクトがどのようになるかの例を次に示します。

#app/services/user_creation_service.rb

クラスUserCreationService

  def 初期化(user_params)

    @user_params = ユーザーパラメータ

  終わり

  def create_user

    ユーザー = User.new(@user_params)

    user.save の場合

      send_notification(ユーザー)

      真実

    それ以外

      間違い

    終わり

  終わり

  プライベート

  def send_notification(ユーザー)

    # ユーザーに通知を送信するためのロジック

  終わり

終わり

UserController の更新: UserController で、複雑なロジックをサービス オブジェクトの呼び出しに置き換えます。更新方法の例を次に示します。

#app/controllers/users_controller.rb

クラス UsersController < ApplicationController

  デフォルト作成

    user_service = UserCreationService.new(user_params)

    if user_service.create_user

      redirect_to root_path、注意:「ユーザーは正常に作成されました!」

    それ以外

      レンダリング:新規

    終わり

  終わり

  プライベート

  デフォルトのuser_params

    params.require(:user).permit(:name, :email, :password)

  終わり

終わり

サービスオブジェクトのテスト: サービス オブジェクトは分離して簡単にテストでき、抽出されたロジックの正確性を確認できます。 UserCreationService クラスのテストを作成し、必要に応じて依存関係をモックします。例えば:

#spec/services/user_creation_service_spec.rb

「rails_helper」が必要

RSpec.describe UserCreationService do

  '#create_user' を説明します

    「ユーザーを作成して通知を送信」します

      user_params = { 名前: 'John Doe'、メールアドレス: '[email protected]'、パスワード: 'password' }

      user_service = UserCreationService.new(user_params)

      Expect(user_service.create_user).to be true

      Expect(通知).to have_received(:send).with(instance_of(User))

    終わり

    「ユーザーの作成が失敗した場合は false を返します」

      # テスト失敗例

    終わり

  終わり

終わり

結論: 

リファクタリングすることで、 Railsアプリケーション サービス オブジェクトを使用すると、複雑なビジネス ロジックを効果的に分離し、コード構成を改善し、テスト容易性を向上させることができます。提供されている実践的な例は、ユーザー作成および通知ロジックをサービス オブジェクトに抽出するプロセスを示しており、その結果、コードがよりクリーンで保守しやすくなります。サービス オブジェクトの力を利用して Rails アプリを合理化し、モジュール式でスケーラブルなコードベースの利点を活用してください。



関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese