【Ruby】【Clean Architecture】オープン・クローズの原則をRubyで書いてみた

はじめに

最近、クリーンアーキテクチャの話が話題に上がっており
「理解したつもりでもコードで示さないと理解したことにならない」
という気持ちがあったので簡単ではあるが、Rubyで書いてみました。

環境

前提条件

ruby コマンドで実行できること

実行

オープン・クローズの原則に沿っていないコード

clean_architecture_ruby/order_service.rb at main · Y-Fujikawa/clean_architecture_ruby · GitHub

# frozen_string_literal: true

class OrderService
  # OCP(オープン・クローズの原則)に反したメソッド
  # 新たな条件が追加された場合、既存メソッドを修正しないといけない
  def order(order_type = nil)
    case order_type
    when 'eat_in'
      # 店内の処理
      p '店内'
    when 'take_out'
      # 持ち帰りの処理
      p '持ち帰り'
    when 'delivery'
      # 配達の処理
      p '配達'
    else
      # それ以外
    end
  end
end

order_type = 'take_out'
OrderService.new.order(order_type)

オープン・クローズの原則に沿っているコード

clean_architecture_ruby/ocp/after at main · Y-Fujikawa/clean_architecture_ruby · GitHub

# frozen_string_literal: true

require_relative './order/eat_in.rb'
require_relative './order/delivery.rb'
require_relative './order/take_out.rb'

class OrderService
  def order(order_type = nil)
    order_type.call
  end
end

order_type = EatIn.new
OrderService.new.order(order_type)

clean_architecture_ruby/ocp/after/order at main · Y-Fujikawa/clean_architecture_ruby · GitHub

# frozen_string_literal: true

class EatIn
  def call
    p '店内'
  end
end
# frozen_string_literal: true

class TakeOut
  def call
    p '持ち帰り'
  end
end
# frozen_string_literal: true

class Delivery
  def call
    p '配達'
  end
end

まとめ

文字で説明するよりもコードの方がわかりやすくていいですね。
これを機にコード化できるところはしていきます。

参考