【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
まとめ
文字で説明するよりもコードの方がわかりやすくていいですね。
これを機にコード化できるところはしていきます。
参考
Clean Architecture 達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ)
- 作者:Robert C.Martin,角 征典,高木 正弘
- 発売日: 2018/08/01
- メディア: Kindle版