Rumah >Java >javaTutorial >Bau Kod ommon di Jawa dan Cara Membaikinya

Bau Kod ommon di Jawa dan Cara Membaikinya

Patricia Arquette
Patricia Arquetteasal
2025-01-22 18:05:14991semak imbas

ommon Code Smells in Java and How to Fix Them

Kod menghidu isyarat kemungkinan masalah dalam kod Java anda, menjejaskan kebolehselenggaraan, kebolehbacaan dan prestasi. Walaupun tidak selalu pepijat, menanganinya memastikan pangkalan kod anda bersih dan cekap. Artikel ini mengkaji lima bau kod Java biasa, memberikan contoh, penjelasan dan penyelesaian yang dipertingkatkan.


  1. Kaedah Terlalu Panjang

Masalahnya: Kaedah yang terlalu panjang menghalang kebolehbacaan, ujian dan penyelenggaraan. Walaupun dengan kaedah pembantu, menggabungkan berbilang tahap abstraksi melanggar Prinsip Tanggungjawab Tunggal (SRP).

Contoh:

<code class="language-java">public void processOrder(Order order) {
    validateOrder(order);
    calculateDiscount(order);
    updateInventory(order);
    generateInvoice(order);
    sendNotification(order);
}</code>

processOrder mencampurkan tugas yang tidak berkaitan (pengesahan, pengiraan diskaun, kemas kini inventori, invois dan pemberitahuan), menjadikannya sukar untuk mengubah suai tanpa akibat yang tidak diingini.

Penyelesaian: Faktorkan semula kepada kaedah yang lebih kecil dan fokus. Corak reka bentuk seperti Corak Perintah atau Corak Saluran Paip meningkatkan kemodulatan.

Kod Difaktorkan Semula (Corak Perintah):

<code class="language-java">interface OrderCommand { void execute(Order order); }

class ValidateOrderCommand implements OrderCommand {
    public void execute(Order order) { /* Validation logic */ }
}

// ... other commands (ApplyDiscountCommand, etc.)

class OrderProcessor {
    List<OrderCommand> commands;

    public OrderProcessor(List<OrderCommand> commands) { this.commands = commands; }

    public void processOrder(Order order) {
        for (OrderCommand command : commands) { command.execute(order); }
    }
}

// Usage
List<OrderCommand> commands = List.of(new ValidateOrderCommand(), new ApplyDiscountCommand(), ...);
OrderProcessor processor = new OrderProcessor(commands);
processor.processOrder(new Order());</code>

Faedah: Modulariti yang dipertingkatkan, ujian bebas dan penggunaan semula arahan, penambahan langkah baharu yang mudah.


  1. Kelas Tuhan

Masalahnya: "God Class" mengendalikan terlalu banyak tanggungjawab, membawa kepada gandingan yang tinggi dan kebolehselenggaraan yang lemah.

Contoh:

<code class="language-java">public class OrderManager {
    public void createOrder() { /* Implementation */ }
    public void updateOrder() { /* Implementation */ }
    public void deleteOrder() { /* Implementation */ }
    public void validatePayment() { /* Implementation */ }
    public void sendInvoice() { /* Implementation */ }
}</code>

Penyelesaian: Pisahkan tanggungjawab kepada kelas yang lebih kecil dan fokus.

Kod Difaktorkan Semula:

<code class="language-java">public class OrderService {
    public void createOrder() { /* Implementation */ }
    // ... other order-related methods
}

public class PaymentService {
    public void validatePayment() { /* Implementation */ }
}

public class NotificationService {
    public void sendInvoice() { /* Implementation */ }
}</code>

Faedah: Gandingan yang dikurangkan, modulariti yang dipertingkatkan, penyelenggaraan yang lebih mudah, ujian dan sambungan bebas.


  1. Nombor Ajaib

Masalahnya: Menggunakan nombor literal secara langsung mengurangkan kejelasan kod dan menjadikan pengubahsuaian berisiko.

Contoh:

<code class="language-java">public double calculateDiscount(double totalAmount) {
    return totalAmount > 1000 ? totalAmount * 0.1 : totalAmount;
}</code>

Penyelesaian: Gantikan nombor literal dengan pemalar bernama.

Kod Difaktorkan Semula:

<code class="language-java">private static final double DISCOUNT_THRESHOLD = 1000;
private static final double DISCOUNT_RATE = 0.1;

public double calculateDiscount(double totalAmount) {
    return totalAmount > DISCOUNT_THRESHOLD ? totalAmount * DISCOUNT_RATE : totalAmount;
}</code>

Faedah: Kebolehbacaan dipertingkatkan, mengurangkan risiko ralat semasa kemas kini, logik perniagaan yang lebih jelas.


  1. Kod Pendua

Masalahnya: Kod berulang merentas kaedah atau kelas membawa kepada ketidakkonsistenan dan sakit kepala penyelenggaraan.

Contoh:

<code class="language-java">public double calculateTax(double amount) { return amount * 0.18; }
public double calculateDiscount(double amount) { return amount * 0.1; }</code>

Penyelesaian: Abstrak logik biasa ke dalam kaedah yang boleh digunakan semula.

Kod Difaktorkan Semula:

<code class="language-java">private double applyRate(double amount, double rate) { return amount * rate; }

public double calculateTax(double amount) { return applyRate(amount, 0.18); }
public double calculateDiscount(double amount) { return applyRate(amount, 0.1); }</code>

Faedah: Menghapuskan lebihan, memastikan konsistensi, memudahkan pengubahsuaian dan lanjutan.


  1. Senarai Parameter Berlebihan

Masalahnya: Kaedah dengan banyak parameter sukar dibaca, difahami dan terdedah kepada ralat semasa panggilan.

Contoh:

<code class="language-java">public void processOrder(Order order) {
    validateOrder(order);
    calculateDiscount(order);
    updateInventory(order);
    generateInvoice(order);
    sendNotification(order);
}</code>

Penyelesaian: Merangkum parameter dalam objek atau gunakan corak pembina.

Kod Difaktorkan Semula:

<code class="language-java">interface OrderCommand { void execute(Order order); }

class ValidateOrderCommand implements OrderCommand {
    public void execute(Order order) { /* Validation logic */ }
}

// ... other commands (ApplyDiscountCommand, etc.)

class OrderProcessor {
    List<OrderCommand> commands;

    public OrderProcessor(List<OrderCommand> commands) { this.commands = commands; }

    public void processOrder(Order order) {
        for (OrderCommand command : commands) { command.execute(order); }
    }
}

// Usage
List<OrderCommand> commands = List.of(new ValidateOrderCommand(), new ApplyDiscountCommand(), ...);
OrderProcessor processor = new OrderProcessor(commands);
processor.processOrder(new Order());</code>

Faedah: Meningkatkan kebolehbacaan dan kebolehlanjutan; menambah parameter tidak memerlukan perubahan tandatangan kaedah.


Kod alamat berbau secara proaktif menghalang isu reka bentuk yang lebih besar dan mengurangkan hutang teknikal, yang membawa kepada aplikasi Java yang lebih mantap dan boleh diselenggara. Ingat prinsip DRY (Don't Repeat Yourself) dan SRP (Single Responsibility Principle) untuk kod yang lebih bersih dan cekap.

Atas ialah kandungan terperinci Bau Kod ommon di Jawa dan Cara Membaikinya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Bagaimana saya belajar javaArtikel seterusnya:Bagaimana saya belajar java