ホームページ >バックエンド開発 >C++ >「尋ねずに伝えてください」の原則を数秒で説明

「尋ねずに伝えてください」の原則を数秒で説明

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-19 10:03:10468ブラウズ

オブジェクト指向プログラミング (OOP) の基礎である Tell, Don't Ask 原則 は、データとそのデータを操作するメソッドの両方をカプセル化するオブジェクトの設計を提唱しています。このアプローチは、カプセル化を強化することで、より保守しやすく堅牢なシステムを促進します。


? 「尋ねずに伝えてください」を理解する

「尋ねないで教えてください」の原則は、オブジェクトのデータを取得して外部で処理するのではなく、オブジェクトに何をすべきかを指示することに重点を置いています。 これにより、オブジェクト自体内でロジックと状態を維持することが促進されます。

オブジェクトのデータにアクセスして外部の決定を行うのではなく、オブジェクトに内部アクションを実行するように直接指示します。この戦略により、コードが簡素化され、依存関係が最小限に抑えられ、システムの拡張性と保守性が向上します。


?‍?‍?例: センサー値の監視

センサーの値と、この値がしきい値を超えたときにトリガーされるアラームを含むシナリオを調べてみましょう。

「尋ねる」アプローチ

<code>class AskMonitor {
  private int value;
  private int limit;
  private String name;
  private Alarm alarm;

  public AskMonitor(String name, int limit, Alarm alarm) {
    this.name = name;
    this.limit = limit;
    this.alarm = alarm;
  }

  public int getValue() { return value; }
  public void setValue(int value) { this.value = value; }
  public int getLimit() { return limit; }
  public String getName() { return name; }
  public Alarm getAlarm() { return alarm; }
}</code>

使用法:

<code>AskMonitor monitor = new AskMonitor("Temperature Sensor", 100, alarm);
monitor.setValue(120);

if (monitor.getValue() > monitor.getLimit()) {
  monitor.getAlarm().warn(monitor.getName() + " is too high");
}</code>

「伝える」アプローチ

「Tell, Don't Ask」では、動作が Monitor クラスに統合されます。

<code>class TellMonitor {
  private int value;
  private int limit;
  private String name;
  private Alarm alarm;

  public TellMonitor(String name, int limit, Alarm alarm) {
    this.name = name;
    this.limit = limit;
    this.alarm = alarm;
  }

  public void setValue(int value) {
    this.value = value;
    if (this.value > this.limit) {
      alarm.warn(name + " is too high");
    }
  }
}</code>

使用法:

<code>TellMonitor monitor = new TellMonitor("Temperature Sensor", 100, alarm);
monitor.setValue(120);</code>

「Tell」バージョンでは、setValue メソッド内にロジックをカプセル化することで、外部の意思決定を排除します。


⭐「聞かずに伝える」の利点

より強力なカプセル化: データと動作は密接に結合されています。
簡潔なコード: 動作を内部化することで外部ロジックが最小限に抑えられます。
保守性の向上: 機能の変更と拡張が容易になりました。


?いつ「伝える」べきか

カプセル化された動作: オブジェクトがデータの処理方法を本質的に知っている場合。

例: Monitor オブジェクトは、その制限を認識していて、その制限を超えると自律的にアラームをトリガーする必要があります。

状態によってトリガーされるアクション: 状態が変化すると、後続のアクション (通知、ログ記録など) が必要になります。

例: UserProfile オブジェクトは、プロファイルの変更時にアクティビティ ログを自動的に更新します。


? 「尋ねる」とき

データ取得: オブジェクトの状態を変更せずにデータが必要な場合。

例: User オブジェクトの電子メール アドレスを取得します。

外部意思決定: 意思決定が外部要因に依存する場合。

例: Person の名前を取得して、適切な挨拶を外部的に決定します。

責任の委任: オブジェクトが連携し、意思決定のためにオブジェクトが別のオブジェクトからのデータを必要とする場合。

例: トラフィック管理のために Router の負荷をクエリする Server


?関連リソース

興味がありますか? ?私のプログラミング原則シリーズの他の投稿をご覧ください!

  • 100 秒でわかる KISS の設計原理
  • 100 秒で説明する DRY の原理

今後の投稿についても最新情報を入手してください:

  • リンクトイン
  • Github
  • ツイッター/X

以上が「尋ねずに伝えてください」の原則を数秒で説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。