Memihak kepada kebolehubahan dengan menukar atribut kepada set
TL;DR: Menggunakan set untuk atribut memudahkan kod anda dan memudahkan pengurusan negeri
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] Separa Automatik
Pemfaktoran semula ini selamat apabila atribut anda tidak bergantung pada gelagat pengindeksan tertentu.
Memandangkan set tidak mengekalkan susunan elemen, semak sama ada logik anda bergantung pada susunan.
Entiti tidak boleh berubah pada dasarnya.
Menggunakan set memastikan keunikan dan memudahkan logik.
Anda tidak perlu lagi menyemak pendua sebelum menambah elemen.
Operasi seperti kesatuan, persimpangan dan perbezaan menjadi mudah, menjadikan kod anda lebih boleh diselenggara dan fleksibel.
Set tidak mengekalkan susunan unsur.
Jika logik anda bergantung pada jujukan, menukar kepada set mungkin tidak sesuai dan anda harus menggunakan Koleksi Tertib atau Tatasusunan
Anda boleh menggesa pembantu AI anda untuk membuat pemfaktoran semula ini untuk anda.
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
Imej oleh Angelo Giordano dalam Pixabay
Artikel ini adalah sebahagian daripada Siri Pemfaktoran Semula.
Atas ialah kandungan terperinci Pemfaktoran semula - Tukar Atribut kepada Set. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!