Shuruudaha dhismaha dhismaha dhismaha dhismaha
HakuTL;DR: Waqtigaan ama ku yaalaa getters by methods-rich in behavior that perform operations instead of exposing internal state.
Haku
TL;DR: Waqtigaan ama ku yaalaa getters by methods-rich in behavior that perform operations instead of exposing internal state.
Qalabka Qalabka
- Haku
- Qalabka Anemic Haku
- Qalabka ah Haku
- Qalabka Qalabka Haku
- mutant oo ah Haku
- Dhammaan Dhammaan Demeter Haku
- Qalabka Information Haku
- Qalabka Internal Haku
- Qalabka Primitive Haku
Sida loo isticmaali karaa codka
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxix
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv
Haku
- Haku
- Shuruudaha dhismaha waaweyn ee shuruudaha. Haku
- Search all codes in codebase Haku
- Shuruudaha waxaa loo isticmaali karaa in la isticmaali karaa goobka. Haku
- Shuruudaha dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha Haku
- Nidaamka codka si loo isticmaali karaa midabada cusub Haku
Xubin Code
Xafiiska
public class Invoice {
private List<LineItem> items;
private Customer customer;
private LocalDate dueDate;
public Invoice(Customer customer, LocalDate dueDate) {
this.customer = customer;
this.dueDate = dueDate;
this.items = new ArrayList<>();
}
public void addItem(LineItem item) {
// This is the right way
// to manipulate the internal consistency
// adding assertions and access control if necessary
items.add(item);
}
public List<LineItem> getItems() {
// You are exposing your internal implementation
// In some languages, you also open a backdoor to
// manipulate your own collection unless you return
// a copy
return items;
}
public Customer getCustomer() {
// You expose your accidental implementation
return customer;
}
public LocalDate getDueDate() {
// You expose your accidental implementation
return dueDate;
}
}
Invoice invoice = new Invoice(customer, dueDate);
// Calculate the total violating encapsulation principle
double total = 0;
for (LineItem item : invoice.getItems()) {
total += item.getPrice() * item.getQuantity();
}
// Check if the invoice is overdue
boolean isOverdue = LocalDate.now().isAfter(invoice.getDueDate());
// Print the customer information
System.out.println("Customer: " + invoice.getCustomer().getName());
Ka dibna
public class Invoice {
private List<LineItem> items;
private Customer customer;
private LocalDate dueDate;
public Invoice(Customer customer, LocalDate dueDate) {
this.customer = customer;
this.dueDate = dueDate;
this.items = new ArrayList<>();
}
public void addItem(LineItem item) {
items.add(item);
}
// Step 3: Move behavior that uses the getter into the object
public double calculateTotal() {
// Step 4: Create intention-revealing methods
double total = 0;
for (LineItem item : items) {
total += item.price() * item.quantity();
}
return total;
}
public boolean isOverdue(date) {
// Step 4: Create intention-revealing methods
// Notice you inject the time control source
// Removing the getter and breaking the coupling
return date.isAfter(dueDate);
}
public String customerInformation() {
// Step 4: Create intention-revealing methods
// You no longer print with side effects
// And coupling to a global console
return "Customer: " + customer.name();
}
// For collections, return an unmodifiable view if needed
// Only expose internal collaborators if the name
// is an actual behavior
public List<LineItem> items() {
return Collections.unmodifiableList(items);
}
// Only if required by frameworks
// or telling the customer is an actual responsibility
// The caller should not assume the Invoice is actually
// holding it
public String customerName() {
return customer.name();
}
// You might not need to return the dueDate
// Challenge yourself if you essentially need to expose it
// public LocalDate dueDate() {
// return dueDate;
// }
}
// Client code (Step 5: Update client code)
Invoice invoice = new Invoice(customer, dueDate);
double total = invoice.calculateTotal();
boolean isOverdue = invoice.isOverdue(date);
System.out.println(invoice.customerInformation());
Haku
- Haku
- [x] Qalabka Semi-Auto Haku
Qalabka ️
Refactoring waa mid ka mid ah si ay u isticmaali karaa, laakiin waxaa loo isticmaali karaa si ay u isticmaali karaa.
Waxaad u baahan tahay in ay u baahan tahay in ay u isticmaali karaa go'aanka iyo in ay u isticmaali karaa go'aanka cusub ee go'aanka.
Dhabka ugu badan waxaa laga yaabaa in aad u xusuusato in aad u xusuusato in aad u xusuusato in aad u xusuusato in aad u xusuusato in aad u xusuusato in aad u xusuusato.
Waxaad ku xigtay in ay ku xigtay in ay ka mid ah wax soo saarka oo ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka.
Waayo, waxaa loo isticmaali karaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid
Sida loo yaabaa, sidoo kale u baahan tahay in ay ka mid ah dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha.
Sidaas ka mid ah codsiga ugu fiican?
Qalabka ugu fiican waa in ay ku saabsanHaku-Haku-HakuSida loo yaabaa, waxaa loo isticmaali karaa in ay ka mid ah macluumaadka macluumaadka ah.
Soo dejisan waxay ku dhigi karaa logic-ka ku saabsan data-ka-object-ka ku yaalaa, si ay u raaxeyn karaa dubbing-ka. Waxay ku dhigi karaa si ay u dhigi karaa si ay u dhigi karaa representation-ka iyo in ay ku yaalaa codka client-ka.
Qalabka waxaa loo yaqaan ReductionQalabkaSida loo yaqaan 'Client' waa in aad u baahan tahay in ay u baahan tahay si ay u baahan tahay in ay u baahan tahay in ay u baahan tahay in ay u baahan yahay.
Markaas ka mid ah dhismaha dhismaha Demeter oo ka mid ah dhismaha dhismaha dhismaha.
Ka dib markiiQalabka Qalabka Qalabka QalabkaSida loo yaqaan "Solution" waxaa loo yaqaan "Solutions" (Solutions) waxaa loo yaqaan "Solutions" (Solutions) iyo "Solutions" (Solutions) waxaa loo yaqaan "Solutions" (Solutions).
Sida loo isticmaali karaa in ay u isticmaali karaa? ️
Shuruudaha Xirfadeed oo ku yaalaaHakuWaayo, waxaa laga yaabaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah.
Haddii loo yaqaan 'objects' waa in la soo bandhigiisa in la soo bandhigiisa, laakiin waxaa loo yaqaan 'objects' waa in la soo bandhigiisa in la soo bandhigiisa.
Sida loo yaabaa, waxaad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir in aad ka soo xiriir.
Ma rabtaa in aad u dhismaha ugu fiican ee dhismaha domain by modeling your objects to perform operations rather than exposing the data.
Sida loo yaqaan "One-to-One" waa in la soo bandhigiisa mid ka mid ah warshadaha real iyo model-ka ah, sidaas ka soo bandhigiisa codka ah waa in la soo bandhigiisa oo ku yaalaa in ay u soo bandhigiisa sida ay u soo bandhigiisa.
Qalabka waxaa laga yaabaa in laHakuQalabka dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha.
Haku ️
Shuruudaha iyo librarka waxay ka mid ah ka mid ah mid ka mid ah seryalization / deserialization.
Codebases ka mid ah codebacks waxaa laga yaabaa isticmaalka getter ah oo ah waa caawin ah si ay u adeegsanay oo dhan.
Qalabka dhismaha waxaa laga yaabaa in ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka ah.
Refactor iyo AI
HakuShuruudaha ugu caawinayo: 1. Isticmaanka getters oo loo yaqaan 'object state' internal.2. Find all getter uses in the codebase.3. Move behavior that uses the getter into the object itself.4. Create intention-revealing methods that perform operations.5. Update your code to use the new methods.5.
Haku
Shuruudaha ugu caawinayo: 1. Isticmaanka getters oo loo yaqaan 'object state' internal.2. Find all getter uses in the codebase.3. Move behavior that uses the getter into the object itself.4. Create intention-revealing methods that perform operations.5. Update your code to use the new methods.5.
Haddii ka mid ah warqad
Haddii ka mid ah warqad
Sida loo yaqaan "Special Instructions"
Sida loo yaqaan "Special Instructions"
Haku
Qalabka
Qalabka
QEEBE
Haku
Qalabka
Qalabka
Haku
Haku
QEEBE
Haku ️
- Haku
- Qalabka Encapsulation Haku
Qalabka
- Haku
- [x] Qalabka Haku
Qalabka Refactoring
Sida loo yaabaa
Qalabka
This article is part of the Refactoring Series.