Setiap kali saya mendengar tentang Anti-pola, saya ingat istilah lain yaitu. Bau desain.
"Bau desain adalah struktur tertentu dalam desain yang mengindikasikan pelanggaran prinsip-prinsip desain dasar dan berdampak negatif terhadap kualitas desain". (Dari "Refactoring untuk Bau Desain Perangkat Lunak: Mengelola utang teknis")
Ada banyak bau desain yang diklasifikasikan berdasarkan melanggar prinsip desain:
Bau abstraksi
Abstraksi Hilang: Aroma ini muncul ketika rumpun data atau string yang disandikan digunakan alih-alih membuat kelas atau antarmuka.
Abstraksi Imperatif: Bau ini timbul ketika suatu operasi diubah menjadi kelas.
Abstraksi Tidak Lengkap: Aroma ini muncul ketika abstraksi tidak mendukung metode komplementer atau saling terkait sepenuhnya.
Abstraksi Beraneka Ragam: Bau ini muncul ketika suatu abstraksi memiliki lebih dari satu tanggung jawab yang ditetapkan padanya.
Abstraksi yang Tidak Perlu: Bau ini terjadi ketika abstraksi yang sebenarnya tidak diperlukan (dan dengan demikian bisa dihindari) diperkenalkan dalam desain perangkat lunak.
Abstraksi Tidak Dimanfaatkan: Bau ini muncul ketika abstraksi dibiarkan tidak digunakan (baik yang tidak langsung digunakan atau tidak dapat dijangkau).
Duplikat Abstraksi: Aroma ini muncul ketika dua atau lebih abstraksi memiliki nama yang identik atau implementasi yang identik atau keduanya.
Aroma enkapsulasi
Enkapsulasi Kurang: Bau ini terjadi ketika aksesibilitas yang dinyatakan dari satu atau lebih anggota abstraksi lebih permisif daripada yang sebenarnya diperlukan.
Enkapsulasi Leaky: Aroma ini muncul ketika abstraksi “mengekspos” atau “kebocoran” detail implementasi melalui antarmuka publiknya.
Enkapsulasi Tidak Ada: Bau ini terjadi ketika variasi implementasi tidak dienkapsulasi dalam abstraksi atau hierarki.
Enkapsulasi yang tidak dieksploitasi: Aroma ini muncul ketika kode klien menggunakan pemeriksaan tipe eksplisit (menggunakan if-else dirantai atau beralih pernyataan yang memeriksa jenis objek) alih-alih mengeksploitasi variasi dalam tipe yang sudah dienkapsulasi dalam hierarki.
Modularisasi berbau
Modularisasi Rusak: Bau ini muncul ketika data dan / atau metode yang idealnya dilokalisasi menjadi abstraksi tunggal dipisahkan dan tersebar di berbagai abstraksi.
Modularisasi yang Tidak Memadai: Bau ini muncul ketika abstraksi ada yang belum sepenuhnya terurai, dan penguraian lebih lanjut dapat mengurangi ukurannya, kompleksitas implementasi, atau keduanya.
Modularisasi Cyclically-Dependent: Bau ini muncul ketika dua atau lebih abstraksi bergantung satu sama lain secara langsung atau tidak langsung (menciptakan hubungan yang erat antara abstraksi).
Modularisasi Hub-Like: Bau ini muncul ketika abstraksi memiliki dependensi (baik yang masuk dan keluar) dengan sejumlah besar abstraksi lainnya.
Bau hirarki
Hilang Hirarki: Aroma ini muncul ketika segmen kode menggunakan logika kondisional (biasanya bersama dengan "tipe yang ditandai") untuk secara eksplisit mengelola variasi dalam perilaku di mana hierarki dapat dibuat dan digunakan untuk merangkum variasi tersebut.
Hierarki yang Tidak Perlu: Aroma ini muncul ketika seluruh hierarki warisan tidak diperlukan, menunjukkan bahwa warisan telah diterapkan secara tidak perlu untuk konteks desain tertentu.
Hirarki yang Tidak Difaktor: Aroma ini muncul ketika ada duplikasi yang tidak perlu di antara tipe-tipe dalam hierarki.
Hirarki Luas: Aroma ini muncul ketika hierarki warisan terlalu lebar yang mengindikasikan bahwa jenis peralihan mungkin hilang.
Hierarki Spekulatif: Aroma ini muncul ketika satu atau lebih tipe dalam hierarki disediakan secara spekulatif (yaitu, berdasarkan pada kebutuhan yang dibayangkan daripada persyaratan yang sebenarnya).
Hirarki Mendalam: Aroma ini muncul ketika hierarki pewarisan “terlalu berlebihan” dalam.
Rebellious Hierarchy: Aroma ini muncul ketika subtipe menolak metode yang disediakan oleh supertype-nya.
Patah Hierarki: Bau ini muncul ketika supertipe dan subtipenya secara konseptual tidak berbagi hubungan "IS-A" yang mengakibatkan penggantian yang rusak.
Hirarki Multipath: Aroma ini muncul ketika subtipe mewarisi baik secara langsung maupun tidak langsung dari supertipe yang mengarah ke jalur pewarisan yang tidak perlu dalam hierarki.
Hirarki Cyclic: Bau ini muncul ketika suatu supertipe dalam hierarki tergantung pada subtipe mana pun.
Definisi dan klasifikasi di atas dijelaskan dalam "Refactoring untuk bau desain perangkat lunak: Mengelola utang teknis ". Beberapa sumber daya yang lebih relevan dapat ditemukan di sini .