🍈

Rubyでさらっと学ぶSOLID原則①「単一責任の原則」

2021/09/28に公開

SOLID原則とは

ソフトウェアの拡張性や保守性を高めるための下記5つの原則のこと。

単一責任の原則(SRP)とは

「モジュールはたったひとつのアクターに対して責任を負うべきである」という原則。

補足

  • モジュールとは
    • クラス・モジュール・関数・メソッドのことを指す。
  • アクターとは
    • システムを使うユーザーや外部システムのこと。
    • ユースケース図では人型で表現される。
    • 例:エンドユーザー、管理ユーザー、社内専用管理ユーザー

単一責任の原則に違反している例

外部システムに通知するためのクラスがあるとします。

class Notifier
  def notify_to_slack(channel:, text:)
    # slackに通知する
  end

  def send_mail(from:, to:, title:, body:)
    # メールで通知する
  end
end

上記の例の場合、アクターは「Slack」と「メールシステム」になります。1つの「Notifier」モジュールの中に2つのアクターが存在しているので、単一責任の原則違反だといえるでしょう。

解決策

Slackへの送信を責任として持つクラスと、メール送信を責任として持つクラスに分けます。

class SlackNotifier
  def notify(channel:, text:)
    # slackに通知する
  end
end

class MailSender
  def send(from:, to:, title:, body:)
    # メールで通知する
  end
end

単一責任の原則違反の臭いに気付くための質問

  • 1つのクラスorメソッドの行数が長すぎないか?
  • そのクラスが何か、そのメソッドは何を行うメソッドか、一言で表現できるか?

参考文献

Discussion