0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

デメテルの法則(Law of Demeter, LoD)は?

Last updated at Posted at 2024-02-05

概念

デメテルの法則(Law of Demeter、LoD)は、1980年代後半にノースイースタン大学のイアン・ホーランド(Ian Holland)によって開発されたオブジェクト指向システム設計のガイドラインです。この法則は、「直接的に関連する友達とのみ最小限のコミュニケーションを行う」という原則を通じて、オブジェクト間の結合度を低くし、システムのモジュール性を向上させることを目指しています。

重要なポイントは、オブジェクトが自分が生成したオブジェクトまたは直接渡されたオブジェクトとのみ相互作用すべきであることです。これは、オブジェクト間の相互作用を完全に排除することを意味しないことに留意してください。重要なのは、オブジェクトが不必要に他のオブジェクトに間接的にアクセスすることを避けることです。

この法則に従うことで、情報の過度な伝達を制御し、複雑なシステム設計で不必要な依存関係を減らすことができ、システムの保守性と拡張性を向上させることができます。さらに、エンジニアは短期記憶に少ない情報を保持することで、システムの構造をより簡単に理解し、変更することができます。

原則

「F」というメソッドがあると仮定したとき、デメテルの法則が言う"F"メソッドの「直接関連する友達」は次のようになります。

  1. 「F」メソッドを持つオブジェクトのメソッド
  2. 「F」メソッドを持つオブジェクトのプロパティ
  3. 「F」メソッドのパラメータ
  4. 「F」メソッド内で生成されたオブジェクト

例(RUBY)

class Mail
  attr_reader :from, :to, :body

  def initialize(from, to, body)
    @from = from
    @to = to
    @body = body
  end
end

class Mailer
  attr_reader :smtp_server_address

  def initialize(smtp_server_address)
    @smtp_server_address = smtp_server_address
  end

  # メールオブジェクト(Mail)の生成と初期化を担当し、実際のメール送信のために内部的にdeliverメソッドを呼び出します。
  def send_email(from, to, body)
    mail = Mail.new(from, to, body) # 3.「F」メソッドのパラメータ、4.「F」メソッド内で生成されたオブジェクト
	deliver(mail) # 1. 「F」メソッドを持つオブジェクトのメソッド
  end

  private

  # deliverメソッドはSMTP サーバに接続してメールを転送するコードなど実際にメールを送るロジックをカプセル化します。
  def deliver(mail)
    puts "Connecting to SMTP server at #{$smtp_server_address}..." # 2. 「F」メソッドを持つオブジェクトのプロパティ
    puts "Email from '#{mail.from}' to '#{mail.to}' sent with body: '#{mail.body}'"
  end
end

mailer = Mailer.new("smtp.example.com")
mailer.send_email("sender@example.com", "receiver@example.com", "Hello, this is a test email.")

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?