속성을 세트로 변환하여 불변성을 선호하세요
TL;DR: 속성 세트를 사용하면 코드가 단순화되고 상태 관리가 더 쉬워집니다
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] 반자동
이 리팩토링은 속성이 특정 인덱싱 동작에 의존하지 않는 경우 안전합니다.
세트는 요소 순서를 유지하지 않으므로 논리가 순서에 의존하는지 확인하세요.
엔티티는 본질적으로 불변입니다.
세트를 사용하면 고유성이 보장되고 논리가 단순화됩니다.
더 이상 요소를 추가하기 전에 중복을 확인할 필요가 없습니다.
합집합, 교차점, 차이 등의 연산이 간단해지면서 코드를 더욱 유지 관리하기 쉽고 유연하게 만들 수 있습니다.
세트는 요소 순서를 유지하지 않습니다.
논리가 시퀀스에 의존하는 경우 세트로 변환하는 것이 적절하지 않을 수 있으므로 Ordered Collection 또는 Array를 사용해야 합니다
AI 보조원에게 이 리팩토링을 수행하도록 요청할 수 있습니다.
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
Pixabay에 있는 Angelo Giordano의 이미지
이 글은 리팩토링 시리즈의 일부입니다.
위 내용은 리팩토링 - 속성을 세트로 변환의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!