292 чытанні

Refactoring 027 - Як выдаліць Getters

па Maximiliano Contieri7m2025/04/20
Read on Terminal Reader

Занадта доўга; Чытаць

Вылучыць або замяніць геттэры з паводзінамі, багатымі на паводзіны, якія выконваюць аперацыі, а не выяўляюць ўнутраны стан.
featured image - Refactoring 027 - Як выдаліць Getters
Maximiliano Contieri HackerNoon profile picture

Галоўная / Заявы і абмоўкі пра абмежаванне адказнасці

І

Тлумачэнні ЦД парадку збора рэкрутаў з 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

    І
  1. Узнагароды, якія выяўляюць ўнутраны статус аб'екта
  2. І
  3. Знайсці ўсе выкарыстаньні галіны ў кодэкбазе
  4. І
  5. Праблема ў тым, што добрыя матывы не заўсёды добрыя справы.
  6. І
  7. Стварыць метады, якія раскрываюць намер, якія выконваюць аперацыі (вылучыць прэфік Get)
  8. І
  9. Актывізаваць свой код, каб выкарыстоўваць новыя метады
  10. І

Навуковы код

Перш за ўсё

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.Актуализуйце свой код, каб выкарыстоўваць новыя метады

ІБез правільных інструкцый з спецыяльнымі інструкцыямі ChatGPT ChatGPT Claude Claude Perplexity Perplexity Copilot Gemini DeepSeek DeepSeek Meta AI Meta AI Grok Grok Qwen Qwen
Без правільных інструкцый з спецыяльнымі інструкцыяміІЧатГПТ ЧатГПІКлод КлодІПерспектывы ПерспектывыІКопілот пілотаІДзіцячая GeminiІЗагрузіць DeepSeekІПрацягласць Meta AIІГрэк ГрэкІЧэмпіён QwenІБез правільных інструкцый з спецыяльнымі інструкцыяміІ

Без правільных інструкцый

Без правільных інструкцый

І

З конкретнай інструкцыяй

З конкретнай інструкцыяй

ЧатГПТ ЧатГПЧэхія

Чэхія

Чэхія

Чэхія

Клод КлодКлод

Клод

Клод

Клод

Перспектывы ПерспектывыПерспектывы

Перспектывы

І

Перспектывы

Перспектывы

Копілот пілотаПілот

Пілот

Пілот

Пілот

Дзіцячая GeminiДзіцячы

Дзіцячы

Дзіцячы

Дзіцячы

Загрузіць DeepSeekІ

глыбіня

глыбіня

глыбіня

глыбіня

Працягласць Meta AIІ

Мэты для

Мэты для

І

Мэты для

Мэты для

Грэк ГрэкІ

Грошы

Грошы

І

Грошы

Грошы

Чэмпіён QwenКвін

Квін

Квін

Квін

Дзень ️

    І
  • Інкапсуляцыя
  • І

На ўзроўні

    І
  • [x] Наступная
  • І

Вынікі пошуку - Related Posts

Так што

Крэдыт

ФотаКрыніцаЯеPixabay


Гэтая кніга з'яўляецца часткай серыі Refactoring.


L O A D I N G
. . . comments & more!

About Author

Maximiliano Contieri HackerNoon profile picture
Maximiliano Contieri@mcsee
I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written

ВЕСІЦЬ БІРКІ

ГЭТЫ АРТЫКУЛ БЫЎ ПРАДСТАЎЛЕНЫ Ў...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks