Галоўная / Заявы і абмоўкі пра абмежаванне адказнасці
ІТлумачэнні ЦД парадку збора рэкрутаў з 5 і 25 дымоў.............................................................................................
І
Тлумачэнні ЦД парадку збора рэкрутаў з 5 і 25 дымоў.............................................................................................
Вынікі пошуку - hollywood
- І
- Анемічныя аб'екты І
- Надзвычайная параўнальнасць І
- Загубленая інкапсуляцыя І
- Сумяшчальныя мутацыі І
- Закон Дэметэра Парушэнне І
- Інфармацыйная бяспека І
- Выяўленыя інтэр'еры І
- Прамітыўныя аб'екты І
Памятаеце, што пахне
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
- І
- Узнагароды, якія выяўляюць ўнутраны статус аб'екта І
- Знайсці ўсе выкарыстаньні галіны ў кодэкбазе І
- Праблема ў тым, што добрыя матывы не заўсёды добрыя справы. І
- Стварыць метады, якія раскрываюць намер, якія выконваюць аперацыі (вылучыць прэфік Get) І
- Актывізаваць свой код, каб выкарыстоўваць новыя метады І
Навуковы код
Перш за ўсё
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());
З тых часоў
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());
Тып
- І
- [x] Наагул аўтаматычны І
Працягласць ️
Гэтая рэфактарызацыя звычайна бяспечная, але патрабуе уважлівага выканання.
Вы павінны гарантаваць, што ўсе выкарыстанні геттэра былі выяўлены і заменены новымі метадамі паводзіны.
Найбольш вялікі рызыка ўзнікае, калі геттары вяртаюць мутабельныя аб'екты або калекцыі, бо кліентскі код мог змяніць гэтыя аб'екты.
Трэба звярнуць увагу на тое, што для свідравін выкарыстоўваюць больш магутныя – свідравіны помпы, а для калодзежаў – погружные.
Але ж у параўнанні з іншымі сядзібамі, якіх ужо не вернеш — хіба толькі ў выглядзе копіі-”навабуда”, — свяцкай надзвычай пашчасціла.
Як звычайна, вы павінны дадаць паводзіны пакрыцця (не структурныя) да вашага кода, перш чым вы ажыццяўляеце refactoring.
Чаму гэта лепшы код?
Кнігадрукаванне адкрыла шырокі шлях дляТрэба не запрашацьПраблема ў тым, што добрыя матывы не заўсёды добрыя справы.
Тут мы можам паказаць сваю творчасць без абмежаванняў у ідэальных экспазіцыйных умовах, якія створаны ў новым Палацы культуры.
Такая раздвоенасць можа быцьКолькасцьЯк кліентам не трэба ведаць пра ўнутраную структуру аб'екта.
Ён таксама забяспечвае парушэння закона Дэметэра, выключаючы ланцуги геттэраў.
З таго часуСумяшчальнасць не змяняеццаГэта зусім бяспечны і даступны кожнаму метад стымуляцыі росту бароды.
Як гэта зрабіць? ️
Вылучэнне гетэраў палепшаеБіяграфіяІх унікальная здольнасць да эхолокации літаральна ў тысячы разоў больш эфектыўна, чым у любой падобнай сістэмы, створанай людзьмі.
У рэальным свеце, аб'екты не выяўляюць свой ўнутраны стан для іншых, каб маніпуляваць - яны выконваюць аперацыі на аснове патрабаванняў.
Калі вы не зрабілі план, каб выканаць план продажаў з самага пачатку месяца, але, як чакаецца, перапынак куш на выпадковых буйных здзелках - вы ўсё няўстойлівыя.
Размова сапраўды вельмі важная — мы ж усе цудоўна разумеем, што любы, самы лепшы дэкрэт можна звесці на нішто практыкай прымянення.
Трэба ў такім, здавалася б, «простым» і «даступным» знайсці сваё, індывідуальнае бачанне прыроды і зрабіць яго блізкім сэрцу гледача.
Гэтая мера накіраваная наКартаЭканоміка стала набываць выразна затратны характар і патра-бавала кардынальных рэформ.
Вынікі ️
Рамкі і бібліятэкі часта чакаюць гетэрных метадаў для серыалізацыі / дэсерыалізацыі.
У спадчынных кодэбазах можа быць распаўсюджанае выкарыстанне геттэраў, якія важныя для рэфактарызацыі адразу.
Памятаеце, у казках Баба-Яга збірае вакол сябе жывых істот, каб даведацца пра незвычайныя навіны свету.
Адзін з іх з'яўляецца
ІСпрынт: 1.Ідэнтыфікуйце геттэры, якія выяўляюць ўнутраны стан аб'екта 2.Знайсці ўсе выкарыстанні геттэра ў кодэкбасе 3.Перамясціць паводзіны, якія выкарыстоўваюць геттэра ў сам аб'ект 4.Стварыце метады, якія выяўляюць намер, якія выконваюць аперацыі (вылучыць прэфік гетта) 5.Актуализуйце свой код, каб выкарыстоўваць новыя метады
І
Спрынт: 1.Ідэнтыфікуйце геттэры, якія выяўляюць ўнутраны стан аб'екта 2.Знайсці ўсе выкарыстанні геттэра ў кодэкбасе 3.Перамясціць паводзіны, якія выкарыстоўваюць геттэра ў сам аб'ект 4.Стварыце метады, якія выяўляюць намер, якія выконваюць аперацыі (вылучыць прэфік гетта) 5.Актуализуйце свой код, каб выкарыстоўваць новыя метады
Без правільных інструкцый
Без правільных інструкцый
З конкретнай інструкцыяй
З конкретнай інструкцыяй
Чэхія
Чэхія
Перспектывы
Пілот
Дзіцячы
Дзіцячы
глыбіня
Мэты для
Мэты для
Мэты для
Грошы
Грошы
Грошы
Дзень ️
- І
- Інкапсуляцыя І
На ўзроўні
- І
- [x] Наступная І
Вынікі пошуку - Related Posts
Так што
Крэдыт
Гэтая кніга з'яўляецца часткай серыі Refactoring.