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.
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.
Examinons un scénario impliquant la valeur d'un capteur et une alarme déclenchée lorsque cette valeur dépasse un seuil.
<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>
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
.
✅ 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.
✅ 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.
✅ 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'unServer
pour la gestion du trafic.
Intéressé ? ? Explorez d'autres articles de ma série sur les principes de programmation !
Restez informé des prochains articles :
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!