Rumah >Java >javaTutorial >Bau Kod ommon di Jawa dan Cara Membaikinya
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.
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.
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.
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.
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.
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!