Heim > Web-Frontend > js-Tutorial > Hauptteil

Refactoring – Attribute in Mengen umwandeln

Barbara Streisand
Freigeben: 2024-10-20 11:33:02
Original
608 Leute haben es durchsucht

Begünstigen Sie die Unveränderlichkeit, indem Sie Attribute in Mengen umwandeln

TL;DR: Die Verwendung von Sätzen für Attribute vereinfacht Ihren Code und erleichtert die Zustandsverwaltung

Behandelte Probleme

  • Veränderlichkeit
  • Komplexität
  • Attribute werden verunreinigt
  • Setter

Verwandte Code-Smells

Schritte

  1. Attribute identifizieren, die Zustände darstellen
  2. Ersetzen Sie die Attribute durch Sätze: eines für jeden Zustand
  3. Passen Sie die Methoden an, um Elemente zwischen Sätzen zu verschieben, anstatt Attribute zu ändern

Beispielcode

Vor

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
Nach dem Login kopieren

Nach

// 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
Nach dem Login kopieren

Typ

[X] Halbautomatisch

Sicherheit

Dieses Refactoring ist sicher, wenn Ihre Attribute nicht auf einem bestimmten Indexierungsverhalten basieren.

Da Sets die Reihenfolge der Elemente nicht beibehalten, prüfen Sie, ob Ihre Logik von der Reihenfolge abhängt.

Warum ist der Code besser?

Entitäten sind ihrem Wesen nach unveränderlich.

Die Verwendung von Mengen gewährleistet Eindeutigkeit und vereinfacht die Logik.

Sie müssen nicht mehr nach Duplikaten suchen, bevor Sie Elemente hinzufügen.

Operationen wie Vereinigung, Schnittmenge und Differenz werden unkomplizierter, wodurch Ihr Code wartbarer und flexibler wird.

Einschränkungen

Sets behalten die Reihenfolge der Elemente nicht bei.

Wenn Ihre Logik von der Reihenfolge abhängt, ist die Konvertierung in eine Menge möglicherweise nicht geeignet und Sie sollten eine geordnete Sammlung oder ein geordnetes Array verwenden

KI-Refactoring

Sie können Ihre KI-Assistenten auffordern, dieses Refactoring für Sie durchzuführen.

Probieren Sie sie aus!

Without Proper Instructions With Specific Instructions
ChatGPT ChatGPT
Claude Claude
Perplexity Perplexity
Copilot Copilot
Gemini Gemini

Schlagworte

  • Veränderlichkeit

Verwandte Refactorings

https://dev.to/mcsee/refactoring-001-remove-setters-26cg

Siehe auch

Credits

Bild von Angelo Giordano in Pixabay


Dieser Artikel ist Teil der Refactoring-Reihe.

Das obige ist der detaillierte Inhalt vonRefactoring – Attribute in Mengen umwandeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!