Favoriser l'immuabilité en convertissant les attributs en ensembles
TL;DR : L'utilisation d'ensembles pour les attributs simplifie votre code et facilite la gestion de l'état
class Bill { amount: number; paid: boolean; constructor(amount: number) { this.amount = amount; this.paid = false; } pay() { if (!this.paid) { this.paid = true; } } } const bill = new Bill(100); console.log(bill.paid); // false bill.pay(); console.log(bill.paid); // true
// 1. Identify attributes representing states class Accountant { // 2. Replace the attributes with sets: one for each state unpaidBills: Set<Bill>; paidBills: Set<Bill>; constructor() { this.unpaidBills = new Set(); this.paidBills = new Set(); } addBill(bill: Bill) { this.unpaidBills.add(bill); } payBill(bill: Bill) { // 3. Adjust methods to move items // between sets instead of mutating attributes if (this.unpaidBills.has(bill)) { this.unpaidBills.delete(bill); this.paidBills.add(bill); } } } class Bill { amount: number; constructor(amount: number) { this.amount = amount; } } const bill = new Bill(100); const accountant = new Accountant(); accountant.addBill(bill); console.log(accountant.unpaidBills.has(bill)); // true accountant.payBill(bill); console.log(accountant.paidBills.has(bill)); // true
[X] Semi-automatique
Cette refactorisation est sûre lorsque vos attributs ne reposent pas sur un comportement d'indexation spécifique.
Puisque les ensembles ne maintiennent pas l'ordre des éléments, vérifiez si votre logique dépend de l'ordre.
Les entités sont immuables par essence.
L'utilisation d'ensembles garantit l'unicité et simplifie la logique.
Vous n'avez plus besoin de vérifier les doublons avant d'ajouter des éléments.
Les opérations telles que l'union, l'intersection et la différence deviennent simples, ce qui rend votre code plus maintenable et flexible.
Les ensembles ne préservent pas l'ordre des éléments.
Si votre logique dépend de la séquence, la conversion en un ensemble peut ne pas être appropriée et vous devez utiliser une collection ou un tableau ordonné
Vous pouvez demander à vos assistants IA de réaliser cette refactorisation pour vous.
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
https://dev.to/mcsee/refactoring-001-remove-setters-26cg
Image d'Angelo Giordano dans Pixabay
Cet article fait partie de la série Refactoring.
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!