Apa anti-pola terburuk yang Anda temui dalam karier Anda sebagai seorang programmer?
Saya sebagian besar terlibat dalam java, meskipun mungkin bahasa-independen.
Saya pikir yang terburuk adalah apa yang saya sebut anti-pola utama . Ini berarti program yang terdiri dari kelas tunggal, sangat besar (terkadang disertai dengan sepasang kelas kecil) yang berisi semua logika. Biasanya dengan loop besar di mana semua logika bisnis terkandung, kadang-kadang memiliki puluhan ribu baris kode.
language-agnostic
anti-patterns
стривігор
sumber
sumber
Saya akan menemukan satu lagi yang jelas dengan "copy-paste". Menyalin kode yang hampir identik dengan apa yang Anda inginkan, kemudian mengubah beberapa hal (alih-alih mengekstraksi menjadi metode).
Ini sangat lazim dalam beberapa kode uji fungsional dan API dari akhir 90-an: Secara harfiah ratusan (atau bahkan ribuan) kasus uji yang hampir identik yang dapat dipecah menjadi beberapa fungsi yang mengambil 3 atau 4 parameter - atau, bahkan lebih baik , sesuatu yang digerakkan oleh data. Pekerjaan pertama saya di luar perguruan tinggi adalah 8 bulan menulis ulang dan refactoring ribuan baris pasta yang menggunakan metode yang sudah usang. Pada saat saya selesai, file tes kurang dari sepersepuluh dari ukuran aslinya dan jauh lebih mudah dikelola (dan dapat dibaca!).
sumber
Saya pikir saya bisa menulis banyak tentang Pattern Mania dan solusi yang bisa diselesaikan dengan usaha yang jauh lebih sedikit, tetapi saya lebih suka menunjuk ke artikel bagus yang baru saja saya baca dengan contoh fantastis tentang bagaimana solusi sederhana dapat terlalu rumit .
Bagaimana (tidak) menulis faktorial di Jawa atau jadi kami menempatkan pabrik ke dalam algoritma Anda
sumber
Palu Emas
sumber
Daerah
Dalam C # Anda dapat menentukan wilayah kode yang dapat diciutkan dalam IDE, sehingga menyembunyikannya kecuali jika Anda ingin berurusan dengan kode itu. Saya telah (sekarang sedang) proyek di mana daerah membentang ratusan baris (berharap saya melebih-lebihkan) dan ada beberapa daerah dalam fungsi seribu baris (sekali lagi saya berharap saya bercanda).
Sisi baiknya, pengembang yang membuat wilayah melakukan pekerjaan yang sangat baik dalam mengidentifikasi fungsi-fungsi spesifik dalam suatu wilayah. Sedemikian rupa sehingga saya dapat melakukan metode ekstrak di wilayah tersebut dan melanjutkan.
Wilayah mendorong pengembang untuk "menyembunyikan" omong kosong mereka di depan mata.
sumber
DoNotUseRegions
.#region SQL Update
membuatnya dapat dilipat sehingga lebih sedikit pengguliran yang diperlukan.Bagi saya pola terburuknya adalah Copy / Paste .
sumber
Bukan metode kelebihan beban:
Jelas menunjukkan bahwa programmer tidak mengerti kelebihan beban.
sumber
Loop Switch Sequences
http://en.wikipedia.org/wiki/Loop-switch_ berikutnyaence
Mereka mengganggu saya tanpa akhir dan benar-benar menunjukkan betapa tidak berpengalamannya dev itu
sumber
Soft coding , yaitu ketika programmer keluar dari jalan mereka untuk menghindari hard-coding dan berakhir di sisi lain skala - dependensi "hard coded".
sumber
Pertahankan status klien.
Pernah bekerja dengan aplikasi web di mana semua negara disimpan di browser. (Untuk memastikan skalabilitas bebas masalah, semua pengecualian diabaikan).
sumber
Checkin besar-besaran
Saya benci ketika saya melihat pengembang belum melakukan check-in lebih dari seminggu. Ini berarti dia entah macet dan belum mencari bantuan, atau dia menggabungkan banyak fitur menjadi satu check-in besar. (Aku meninggalkan skenario terburuk, dia hanya tidak melakukan apa-apa. Itu mudah untuk diselesaikan ... dua kata terdengar seperti kamu disewa.)
Jika Anda melakukan check-in besar, Anda kehilangan banyak manfaat SCM, seperti bisa menautkan perubahan set ke fitur tertentu. Anda juga mungkin memiliki banyak merger untuk dilakukan dan itu tidak selalu mudah untuk diperbaiki.
sumber
Saat ini, saya sedang bekerja dengan sepotong kode warisan dan saya suka cara pembuat kode sebelumnya mendapatkan elemen pertama dari daftar:
Tapi imho terburuk yang pernah saya lihat dalam kode ini adalah mendefinisikan kelas halaman JSP inline, menulis semua HTML, CSS dan Javascript menggunakan scriptlet dan out.println :-(
sumber
Salah satu pola anti perilaku terburuk yang saya lihat adalah toko yang hanya mengizinkan kode untuk diperiksa ke kontrol versi setelah itu dalam produksi. Ditambah dengan checkout eksklusif di VSS, hal ini menyebabkan proses berbelit-belit membatalkan checkout jika cacat produksi perlu diperbaiki sebelum rilis berikutnya, apalagi lebih dari satu orang perlu mengubah file yang diberikan untuk rilis mendatang.
Fakta bahwa ini adalah kebijakan departemen membuatnya bahkan lebih buruk daripada kasus pengembang tunggal berperilaku seperti ini.
sumber
Mengunci String secara literal
Nama kelas yang sangat panjang. (di JRE)
Struktur pewarisan yang buruk
Suatu Pengecualian yang bukan.
Penanganan kesalahan sia-sia dan samar
Pembuatan objek yang tidak perlu
Melempar pengecualian untuk tujuan lain
Menggunakan objek instan untuk metode statis.
Sinkronisasi pada bidang non-final
Salinan tak berguna dari String konstan
Panggilan tak berguna ke String.toString ()
Panggilan ke System.gc () untuk membebaskan sebagian memori
Mengatur variabel lokal ke nol untuk membebaskan sebagian memori
Menggunakan ++ i daripada i ++ untuk alasan kinerja (atau mikro-mikro-optimasi lainnya)
sumber
Kode ditaburi dengan:
atau
tanpa informasi tambahan.
sumber
Iterator untuk boneka:
Singletono-Factory:
if-else driven development (juga disebut prinsip buka tutup - buka untuk modifikasi tutup untuk pengertian):
StringPattern (juga disebut StringObject):
sumber
else if
sering kali itu satu-satunya cara untuk menyelesaikan sesuatu. Saya sedang memikirkan string; tidak bisa menggunakan sakelar. Kondisinya harus sama agar bermanfaat.getInstance
mengembalikan instance yang sama. Asumsi semacam itu akan memecah enkapsulasi dan sebenarnya merupakan salah satu dari anti-pola yang paling umum.Ini bukan begitu banyak pola pengkodean tetapi pola perilaku, itu cukup buruk: memodifikasi sesuatu dalam kode (katakanlah persyaratan berubah), kemudian mengubah semua tes unit sampai kode melewatinya. Tweak atau hanya menghapus semua kode uji dari metode pengujian, tetapi meninggalkan metode di sana.
Ini terkait dengan yang lebih umum, pola That'll Do , inilah baris kode yang representatif untuknya:
Lagipula itu berhasil.
sumber
Saya benar-benar membenci inversi abstraksi , atau menciptakan kembali primitif tingkat rendah di atas primitif tingkat tinggi. Namun, kadang-kadang, ini disebabkan oleh perancang bahasa yang buruk, bukan programmer yang buruk. Contoh:
Menggunakan kelas metode tunggal tanpa variabel anggota dan antarmuka yang sesuai, (diimplementasikan dalam bentuk tabel pointer fungsi), bukan penunjuk fungsi. Perhatikan bahwa dalam bahasa seperti Java, Anda mungkin tidak punya pilihan.
Dalam MATLAB dan R, desakan bahwa semuanya adalah vektor / matriks daripada primitif.
Saat kita menghancurkan MATLAB, bagaimana dengan fakta bahwa ia tidak memiliki integer, jadi ketika Anda membutuhkan integer Anda harus menggunakan double.
Bahasa murni fungsional di mana Anda harus menggunakan panggilan fungsi untuk menulis loop.
sumber
Pasti akan copy / paste, saya telah melihat banyak kode buruk yang diselesaikan karena itu, itu dan pengkodean koboi dan segala sesuatu yang berasal dari itu. (Kelas God, metode ekstra besar, algoritma yang dipikirkan dengan buruk, dll.)
Dan jika pola desain diizinkan, saya akan mengatakan: Melakukan proyek sebagai serangkaian tindakan dari rencana, tanpa melakukan desain atau analisis domain apa pun.
sumber
Kacang java multi guna -
Kacang java dengan banyak variabel, digunakan dalam beberapa jenis operasi. Setiap operasi menggunakan beberapa subset variabel kacang yang berubah-ubah, dan mengabaikan yang lainnya. Beberapa variabel untuk kondisi gui, beberapa variabel dilemparkan untuk melewati di antara komponen, beberapa yang bahkan mungkin tidak digunakan lagi. Contoh-contoh terbaik tidak memiliki dokumentasi, yang akan menghalangi apresiasi terhadap pola.
Juga, tidak bisa melupakan kekasih
sumber
Seorang mantan rekan kerja memiliki kebiasaan menggunakan kembali objek dengan menimpa properti mereka, daripada hanya membuat yang baru. Saya tidak pernah bisa membayangkan jumlah masalah yang disebabkan ini ketika mengimplementasikan fitur-fitur baru.
sumber
Sesuatu yang menyebabkan saya sangat berduka adalah pola "Peta besar di langit". Melempar peta bukannya menggunakan benda yang tepat. Anda tidak tahu apa yang "variabel" di dalamnya tanpa debugging, dan Anda tidak tahu apa yang mungkin ada di dalamnya tanpa melacak kode ke belakang. Biasanya memetakan Strings to Objects, atau Strings to Strings, yang berpotensi Anda parsing menjadi primitif.
sumber
Salah satu pola anti pengembangan favorit saya adalah penggunaan "desain" basis data yang mengharuskan terus menambahkan kolom tambahan ke satu atau lebih tabel secara terprogram . Ini adalah sepupu dari "desain" yang membuat tabel baru untuk setiap instance dari entitas. Keduanya pasti mengenai keterbatasan server database, tetapi biasanya tidak sampai sistem telah berproduksi untuk beberapa waktu.
sumber
Saya pikir salah satu anti-pola terburuk yang saya lihat melibatkan menggunakan tabel Database sebagai penyimpanan sementara alih-alih menggunakan memori komputer.
Domain masalah adalah hak milik yang melarang saya menjelaskannya, tetapi tidak perlu memahami masalah dasarnya. Ini adalah aplikasi GUI yang ditulis di Jawa dengan Database backend. Itu untuk mengambil input data tertentu, memanipulasinya dan kemudian mengkomit data yang diolah ke database.
Proyek kami memiliki algoritma yang cukup rumit yang menyimpan nilai menengah untuk diproses nanti. Alih-alih merangkum objek sementara di ... objek, tabel database dibuat seperti "t_object". Setiap kali nilai dihitung, itu ditambahkan ke tabel ini. Setelah algoritme selesai, ia akan memilih semua nilai antara dan memproses semuanya dalam satu objek Peta besar. Setelah semua pemrosesan selesai, nilai yang tersisa yang ditandai untuk disimpan akan ditambahkan ke skema basis data nyata dan entri sementara di tabel "t_object" akan dibuang.
Tabel itu juga digunakan seperti daftar unik, data hanya bisa ada satu kali. Ini mungkin fitur yang layak dari desain seandainya kita menerapkan Kendala di atas meja, tetapi akhirnya kita mengulangi seluruh tabel untuk melihat apakah data ada atau tidak. (Tidak, kami bahkan tidak menggunakan kueri yang digunakan di mana klausa dengan WADAH)
Beberapa masalah yang kami hadapi karena desain ini adalah debugging khusus. Aplikasi ini dibangun untuk menyalurkan data sehingga akan ada beberapa GUI yang akan melakukan pra-proses data sebelum tiba pada algoritma ini. Proses debugging adalah untuk memproses test case dan kemudian berhenti sesaat setelah menyelesaikan bagian di atas. Kemudian kami akan meminta database untuk melihat data apa yang terkandung dalam tabel ini.
Masalah lain yang kami temukan adalah bahwa data tidak dihapus dengan benar dari tabel sementara ini, yang akan mengganggu proses di masa mendatang. Kami menemukan ini karena Pengecualian tidak ditangani dengan benar dan oleh karena itu aplikasi tidak keluar dengan benar dan tidak menghapus data dalam tabel yang dikendalikannya.
Jika kami telah menggunakan Desain Berorientasi Objek Dasar dan menyimpan semuanya dalam Memori, masalah di atas tidak akan pernah terjadi. Pertama, debugging akan menjadi sederhana karena kita dapat dengan mudah mengatur break point dalam aplikasi dan kemudian memeriksa memori di stack dan heap. Kedua, setelah keluar abnormal dari aplikasi, memori java akan dibersihkan secara alami tanpa harus khawatir menghapusnya dari database.
CATATAN: Saya tidak mengatakan pola ini pada dasarnya buruk, tetapi dalam contoh ini saya merasa tidak perlu ketika prinsip-prinsip OO dasar sudah mencukupi.
Saya tidak yakin nama untuk anti-pola ini karena ini adalah pertama kalinya saya melihat hal seperti ini dilakukan. Adakah nama baik yang kalian pikirkan untuk pola ini?
sumber
Troli-Sebelum-Kuda - alias YouMightNeedIt
Sebagai contoh:
sumber
IMO anti-pola terburuk yang pernah saya lihat adalah "Kami tidak memerlukan pola busuk" Anti-Pola: Gagasan bahwa pola desain adalah pemborosan waktu dan Anda dapat menulis kode lebih cepat dengan hanya mengaitkannya dan menyalin / menempelkan sesuai kebutuhan.
Disebutkan terhormat memiliki kode yang memuat objek dari database menggunakan gaya VB6 lama:
tidak benar-benar anti-pola, tetapi juga menunjukkan kurangnya mengambil keuntungan dari arsitektur yang tepat dan pemisahan masalah.
Juga, hal-hal seperti ini:
sumber