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
Libérer: 2025-01-19 10:03:10
original
474 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Utilisation :

<code>TellMonitor monitor = new TellMonitor("Temperature Sensor", 100, alarm);
monitor.setValue(120);</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal