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

Bau Kod ommon di Jawa dan Cara Membaikinya

Patricia Arquette
Lepaskan: 2025-01-22 18:05:14
asal
1002 orang telah melayarinya

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>
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan