Maison >développement back-end >C++ >Le principe « Dites, ne demandez pas » expliqué en quelques secondes

Le principe « Dites, ne demandez pas » expliqué en quelques secondes

Linda Hamilton
Linda Hamiltonoriginal
2025-01-19 10:03:10469parcourir

Le Principe Tell, Don't Ask, pierre angulaire de la programmation orientée objet (POO), préconise la conception d'objets qui encapsulent à la fois leurs données et les méthodes qui manipulent ces données. Cette approche favorise des systèmes plus maintenables et plus robustes en améliorant l'encapsulation.


? Comprendre « Dites, ne demandez pas »

Le principe « Dites, ne demandez pas » met l'accent sur le fait d'indiquer aux objets quoi faire, plutôt que de récupérer leurs données et de les traiter en externe. Il favorise le maintien de la logique et de l'état au sein de l'objet lui-même.

Au lieu d'accéder aux données d'un objet pour prendre des décisions externes, vous demandez directement à l'objet d'effectuer une action interne. Cette stratégie simplifie le code, minimise les dépendances et améliore l'extensibilité et la maintenabilité du système.


?‍?‍? Exemple : Surveillance de la valeur du capteur

Examinons un scénario impliquant la valeur d'un capteur et une alarme déclenchée lorsque cette valeur dépasse un seuil.

L'approche « Demander »

<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>

Utilisation :

<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>

L'approche « Tell »

Avec "Tell, Don't Ask", le comportement est intégré à la Monitor classe.

<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>

Utilisation :

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

La version "Tell" élimine la prise de décision externe en encapsulant la logique dans la méthode setValue.


⭐ Avantages de « Dites, ne demandez pas »

Encapsulation plus forte : les données et le comportement sont étroitement couplés.
Code concis : la logique externe est minimisée par le comportement internalisé.
Maintenabilité améliorée : Plus facile à modifier et à étendre les fonctionnalités.


? Quand "dire"

Comportement encapsulé :Quand un objet sait intrinsèquement comment traiter ses données.

Exemple : Un Monitor objet, conscient de sa limite, devrait déclencher de manière autonome une alarme en cas de dépassement de cette limite.

Actions déclenchées par l'état : Lorsque les changements d'état nécessitent des actions ultérieures (par exemple, notifications, journalisation).

Exemple : Un objet UserProfile met automatiquement à jour un journal d'activité lors des modifications de profil.


? Quand "demander"

Récupération de données : Lorsque des données sont nécessaires sans altérer l'état de l'objet.

Exemple : Récupération de l'adresse e-mail d'un User objet.

Prise de décision externe : Lorsque les décisions reposent sur des facteurs externes.

Exemple :Obtention du nom d'un Person pour déterminer de l'extérieur un message d'accueil approprié.

Délégation de responsabilité :Lorsque des objets collaborent et que l'un a besoin des données d'un autre pour la prise de décision.

Exemple : Un Router interroge la charge d'un Server pour la gestion du trafic.


? Ressources connexes

Intéressé ? ? Explorez d'autres articles de ma série sur les principes de programmation !

  • Le principe de conception KISS expliqué en 100 secondes
  • Le principe DRY expliqué en 100 secondes

Restez informé des prochains articles :

  • Linkedin
  • Github
  • Twitter/X

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn