298 ընթերցումներ

027 - Ինչպես հեռացնել Getters

կողմից Maximiliano Contieri7m2025/04/20
Read on Terminal Reader

Չափազանց երկար; Կարդալ

Հեռնել կամ փոխարինել getter- ի հետ գործառույթներ, որոնք կատարում են գործառույթներ, այլեւ բացահայտել ինտեգրային պայմաններ:
featured image - 027 - Ինչպես հեռացնել Getters
Maximiliano Contieri HackerNoon profile picture

Արդյոք, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն.

Հիմնական

TL;DR: Կառուցեք կամ փոխեք getters- ի հետ գործառույթների խոշոր մեթոդներ, որոնք կատարում են գործառույթներ, այլեւ բացահայտել ներքին պայմանները:

Հիմնական

TL;DR: Կառուցեք կամ փոխեք getters- ի հետ գործառույթների խոշոր մեթոդներ, որոնք կատարում են գործառույթներ, այլեւ բացահայտել ներքին պայմանները:

Հիմնական խնդիրներ

    Հիմնական
  • Anemic գործիքներ
  • Հիմնական
  • Բարձր համատեղ
  • Հիմնական
  • Հեռնել encapsulation
  • Հիմնական
  • Հիմնական mutage
  • Հիմնական
  • Demeter- ի կարգի վերլուծություններ
  • Հիմնական
  • Տեղադրողություն
  • Հիմնական
  • Արդյունաբերական արտահայտություններ
  • Հիմնական
  • Հիմնական Obsession
  • Հիմնական

Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված

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. Տեղադրեք getters, որոնք բացահայտել են internal object state
  2. Հիմնական
  3. Տեղադրեք բոլոր սխալները CodeBase- ում
  4. Հիմնական
  5. Մուտք գործել գործառույթը, որը օգտագործում է getter- ը ինքներդ օդանավի մեջ
  6. Հիմնական
  7. Գործիքներ կատարելու intention-revealing մեթոդների ստեղծում (լուծել get prefix)
  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] Հիմնական ավտոմատ
  • Հիմնական

Անվտանգություն ️

Այս վերահսկողությունը սովորաբար անվտանգ է, բայց պահանջում է ճշգրիտ կատարումը:


Դուք պետք է ապահովել, որ Getter- ի բոլոր օգտագործումներները Identified են եւ փոխվել են նոր բուժման մեթոդների հետ:


Լավագույն վտանգը կատարվում է այն ժամանակ, երբ Getters- ը վերցնում է փոխարելի բաղադրիչները կամ բաղադրիչները, քանի որ հաճախորդի կոդը կարող է փոխել այդ բաղադրիչները:


Դուք պետք է ստուգեք, որ վարքագիծը չի փոխվել ամբողջական փորձերի միջոցով, առաջ եւ հետո refactoring.


Երբ դուք ունեք բիզնեսը, դուք կարող եք վերցնել ոչ մի փոխարինող բաղադրիչ կամ տեսանյութեր, որպեսզի պահպանել անվտանգությունը փոխանցման ժամանակ: Երբ բաղադրիչները պահանջում են բաղադրիչների հասնել, դուք կարող եք պահպանել պարզ բաղադրիչներ, առանց "գնել" բաղադրիչը, ինչպես նաեւ ձեր բաղադրիչների բաղադրիչները:


Որպես սովորաբար, դուք պետք է ավելացնել գործառույթային ծախսերը (լուսանկարներ) ձեր կոդը, երբ դուք կատարում եք refactoring.

Ինչու է ավելի լավ սխալը

The refactored code is better because it adheres to theՏեսեք, չգիտեքՀիմնական հոդվածը, որ ձեր բարդները հզոր են, քան պարզապես anemic տվյալների մատակարարներ.


Այս լուծում տեղադրում է օդանավի տվյալների հետ կապված ռեժիմը օդանավի ինքներդում: Այն կտրում է վերլուծման մանրամասները, որը թույլ է տալիս փոխել ինտեգրային արտադրությունը, առանց ազդեցության հաճախորդի կոդը:


Այս մեթոդը նվազեցնում էԿոնտակտՔանի որ հաճախորդները չեն պետք է գիտեն, թե ինչ է բաղադրիչի ներքին կառուցվածքը:


Այն նաեւ փնտրում է Demeter- ի կարգի վերահսկողությունը, այնպես որ փնտրում է Getter- ի ցանցերը:


Քանի որԲարձրությունը չի փոխվել, լուծումը թույլ է տալիս ավելի լավ ստուգման եւ բիզնես կարգի վերահսկողության տեղում.

Ինչպե՞ս կարող է բուժել երեխա: ️

Բարձրացնել կոճակը բարելավում էԲրիտանիաՀիմնականը, ինչպիսիք են սխալը եւ իրականությունը, այնպես, որ բարդները աշխատում են ավելի շատ, ինչպիսիք են իրենց իրական աշխարհում:


Աշխարհում, օդանավները չեն բացահայտել իրենց ներքին տարածքը, որ այլն կարող են մոդել - նրանք կատարում են գործառույթներ, որոնք հիմնված են պահանջների վրա:


Նշում է, որ դուք չեք հարցնում բանկային հաշիվը իր ցածրության համար, ապա կտրում եք, թե ինչպես կարող է բեռնել: Այնպես որ, դուք հարցում եք հաշիվը: «Ինչպե՞ս կարող եմ բեռնել $100- ը: Այս հաշիվը օգտագործում է իր ինտեգրային պայմանները եւ կօգնի ձեզ պատասխանել:


Դուք կարող եք ստեղծել ավելի ճշգրիտ արտադրություն տրանսպորտային դիզայնների հետ մոդելել ձեր բոնուսները կատարելու գործառույթների, այլեւ բացահայտելով տվյալները.

Այսպիսով, ձեր համակարգչային մոդելի եւ իրական աշխարհի միջեւ մի-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-նե-ն


Այս դիզայնը հետեւում էՔարտիՏեղադրելով այն, որ բաղադրիչները հավատում են իրական աշխարհի բաղադրիչներ եւ բաղադրիչներ:

Արդյոք ️

Քարտի եւ գրասենյակների հաճախ պահանջում են Getter մեթոդներ serialization / deserialization.


Հիմնական կոդը բազանները կարող են լայնորեն օգտագործվել getter- ի օգտագործման համար, որը դժվար է վերլուծել մեկ անգամ:


Արդյունքների փորձարկումը կարող է լինել ավելի դժվար, քանի որ ինտեգրային պայմանները չեն հասանելի: Հիշեք, դուք երբեք չեք պետք փորձել անձնական մեթոդներ:

Հիմնական հոդված՝ AI-ի հետ

Հիմնական

Տեղադրեք getters, որոնք բացահայտել են ինտերնետային ախտորսային կայքը: 2 Տեղադրեք բոլոր getter օգտագործումները codebase- ում: 3 Տեղադրեք գործառույթը, որը օգտագործում է getter- ը ինտերնետային ախտորսում: 4 Տեղադրեք intention-revealing մեթոդներ, որոնք կատարում են գործառույթներ: 5 Տեղադրեք ձեր կոդը, որպեսզի օգտագործեք նոր մեթոդներ:

Հիմնական

Տեղադրեք getters, որոնք բացահայտել են ինտերնետային ախտորսային կայքը: 2 Տեղադրեք բոլոր getter օգտագործումները codebase- ում: 3 Տեղադրեք գործառույթը, որը օգտագործում է getter- ը ինտերնետային ախտորսում: 4 Տեղադրեք intention-revealing մեթոդներ, որոնք կատարում են գործառույթներ: 5 Տեղադրեք ձեր կոդը, որպեսզի օգտագործեք նոր մեթոդներ:

ՀիմնականՉնայած ճշգրիտ ուղեցույցներ հատուկ ուղեցույցների ChatGPT ChatGPT Claude Claude Perplexity Perplexity Copilot Copilot Gemini DeepSeek Meta AI Meta AI Grok Grok Qwen Qwen
Չնայած ճշգրիտ ուղեցույցներ հատուկ ուղեցույցների ChatGPT ChatGPT Claude Claude Perplexity Perplexity Copilot Copilot Gemini DeepSeek Meta AI Meta AI Grok Grok Qwen QwenՉնայած ճշգրիտ ուղեցույցներ, հատուկ ուղեցույցներՉնայած ճշգրիտ մատակարարություն

Չնայած ճշգրիտ մատակարարություն

Հիմնական

Բարձր ճշմարտություններով

Բարձր ճշմարտություններով

Խաղատուն ChatGPTԳործիքներ

Գործիքներ

Հիմնական

Գործիքներ

Գործիքներ

ՔլեյդՔլեյդ

Քլեյդ

Քլեյդ

Քլեյդ

Տեղադրություն PerplexityՊահպանություն

Պահպանություն

Պահպանություն

Պահպանություն

Copilot-ի հետազոտությունՊոլիտ

Պոլիտ

Պոլիտ

Պոլիտ

Հիմնական հոդված՝ GeminiԵրկու

Երկու

Երկու

Երկու

DeepSeek- ը DeepSeek- ըDeepSeek-ի մասին

DeepSeek-ի մասին

DeepSeek-ի մասին

DeepSeek-ի մասին

ՀիմնականՄետինե AIՀիմնականՄետինե AIՀիմնականՀիմնական

Մետինե AI

Մետինե AI

Մետինե AI

Մետինե AI

Բրիտանիա GrokԳրիկ

Գրիկ

Գրիկ

Գրիկ

ՏեսակներԿանայք

Կանայք

Կանայք

Կանայք

️ ️

    Հիմնական
  • encapsulated
  • Հիմնական

    Հիմնական
  • [x] Հիմնական
  • Հիմնական

Related Արդյունքներ

Ահա

Ապրանքներ

ՆկարագրությունKris-ի մասինԴաPixabay-ի մասին


Այս հոդվածը մեկն է The Refactoring Series- ում:


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