Untuk setiap proyek pemrograman, manajer dengan pengalaman pemrograman masa lalu mencoba bersinar ketika mereka merekomendasikan beberapa pola desain untuk proyek Anda. Saya suka pola desain ketika mereka masuk akal atau jika Anda membutuhkan solusi scalable. Saya telah menggunakan pola Proxy, Pengamat dan Komando dalam cara yang positif misalnya, dan melakukannya setiap hari. Tetapi saya benar-benar ragu untuk menggunakan katakan pola Pabrik jika hanya ada satu cara untuk membuat objek, karena pabrik mungkin membuat semuanya lebih mudah di masa depan, tetapi menyulitkan kode dan overhead murni.
Jadi, pertanyaan saya adalah sehubungan dengan karier masa depan saya dan jawaban saya untuk tipe manajer yang melemparkan nama-nama pola acak:
Pola desain mana yang Anda gunakan, yang membuat Anda kembali secara keseluruhan? Mana pola desain terburuk , yang harus Anda pertimbangkan kecuali dalam satu situasi tunggal di mana mereka masuk akal (baca: pola desain mana yang didefinisikan dengan sangat sempit)? (Sepertinya saya mencari ulasan negatif dari keseluruhan produk bagus Amazon untuk melihat apa yang paling disadap orang dalam menggunakan pola desain.) Dan saya tidak berbicara tentang Anti-Pola di sini, tetapi tentang Pola yang biasanya dianggap sebagai pola "baik".
Sunting: Seperti yang dijawab oleh beberapa orang, masalahnya paling sering adalah bahwa pola tidak "buruk" tetapi "salah digunakan". Jika Anda tahu pola, yang sering disalahgunakan atau bahkan sulit digunakan, mereka juga cocok sebagai jawaban.
Jawaban:
Saya tidak percaya pada pola yang buruk, saya percaya bahwa pola dapat diterapkan dengan buruk!
Untuk jawaban ini saya hanya mempertimbangkan pola GOF. Saya tidak tahu semua pola yang mungkin cukup baik untuk dipertimbangkan juga.
sumber
Terlepas dari Singleton dan Pengunjung yang telah disebutkan oleh penjawab lain, saya tidak tahu pola desain "terkenal". IMHO masalah terbesar tidak berasal dari pola desain tertentu yang "salah", melainkan dari pengembang yang menerapkan pola terlalu bersemangat.
Hampir semua orang melewati fase "pola demam" ketika berkenalan dengan pola. Berpikir bahwa pola adalah hal terbaik sejak memotong roti, awalnya seseorang mencoba menerapkannya kapan saja dia melihat kemungkinan. Ini menghasilkan kode yang terkubur di bawah pola, di mana pola itu sendiri tidak membantu lagi, hanya membuat kode lebih sulit untuk dipahami dan dipelihara dalam jangka panjang.
Akhirnya, sebagian besar dari kita melewati fase ini dan mulai belajar bagaimana menggunakan pola untuk menyelesaikan masalah nyata, bukan untuk kepentingan mereka sendiri. Pola memiliki harganya, yang merupakan kompleksitas tambahan, dan menerapkan pola spesifik apa pun hanya dibenarkan ketika membayar kompleksitas tambahan dengan membantu menyederhanakan beberapa bagian lain dari sistem, sehingga membuat kode / konfigurasi secara keseluruhan lebih mudah untuk dipahami dan dipelihara. Jika bukan ini masalahnya, sering kali lebih baik menjauhi pola, bertahan dengan solusi paling sederhana yang mungkin bisa berhasil.
sumber
Saya akan mengambil risiko di sini dan menyarankan penggunaan warisan yang berlebihan. Jelas paling berlaku dalam bahasa tanpa dukungan polimorfisme waktu kompilasi yang solid, seperti Java. Warisan run-time adalah alat, bukan semacam keajaiban satu fitur yang cocok untuk semua.
Orang lain telah menyatakan hal yang serupa dengan kebencian pribadi saya terhadap Singletons, jadi saya tidak akan membahasnya di sini.
sumber
Singleton. Ini adalah salah satu dari pola GOF yang sekarang lebih sering disebut sebagai anti-pola. Salah satu alasan untuk itu adalah Singleton membuat kode lebih sulit untuk diuji.
sumber
:-)
Mengikuti pola MVVM untuk WPF terlalu ketat, seperti ditunjukkan misalnya dengan pertanyaan ini . Beberapa orang mencoba mengikuti panduan bahwa tidak boleh ada kode yang dimasukkan ke dalam kode terlalu ketat dan menghasilkan semua jenis peretasan yang eksotis.
Dan tentu saja, MVVM sulit sekali, dan tidak layak untuk proyek jangka pendek kecil.
WPF melakukan posting ironis tentang hal itu dalam artikelnya MV-poo .
sumber
Beberapa pola dalam buku GOF adalah spesifik C ++, dalam arti mereka kurang berlaku dalam bahasa dengan refleksi, misalnya pola Prototipe kurang signifikan di Jawa.
Saya menganggap pola Juru Bahasa sebagai 'sempit'. Anda harus memiliki masalah umum yang layak dikembangkan pemecah masalah umum. Ini hanya berfungsi untuk masalah khusus di mana Anda dapat menciptakan bahasa, mendefinisikan tata bahasa dan menulis juru bahasa. Contoh masalah harus dinyatakan sebagai kalimat dalam tata bahasa. Saya tidak berpikir Anda sering menemukan situasi seperti itu.
sumber
Yang saya sesali paling sering (meskipun tidak paling keras): Ketika saya seharusnya baru saja membuat fungsi tetapi saya mengimplementasikan solusi OOP.
sumber
Pabrik. Saya telah melihat kode mengimplementasikannya yang hanya membuat satu jenis. Itu sama sekali kode IMO yang tidak berguna. Itu tidak membantu bahwa banyak contoh daring sepenuhnya dibuat-buat. Pabrik pizza?
Mungkin pabrik lebih mudah untuk diuji karena injeksi ketergantungan. Tetapi untuk menambahkan kode itu ketika Anda tidak membutuhkannya tidak ada gunanya bagi saya, dan argumen pengujian menghilang ketika Anda dapat menggunakan kerangka kerja tiruan seperti JMockit. Semakin mudah Anda membuat program, semakin baik. Pabrik hanya benar-benar masuk akal dengan jumlah tipe yang lebih besar (lebih besar, maksud saya setidaknya lebih dari 2).
sumber
Singleton
Saya setuju dengan yang lain tentang Singleton. Bukan berarti Anda tidak boleh menggunakannya, hanya saja itu harus dibatasi untuk beberapa kasus. Mereka sering digunakan sebagai global malas.
Thread-safety adalah salah satu masalah dengan lajang. Penanganan pengecualian adalah hal lain - jika singleton gagal dibuat dengan benar - Anda tidak selalu tahu apakah Anda dapat menangkap kesalahan dengan aman, terutama jika itu salah satu objek yang dibuat "sebelum main". Dan kemudian ada masalah membersihkan setelah itu.
Saya cenderung lebih suka menggunakan satu singleton dan meminta semua lajang "wannabe" lainnya "berlangganan" untuk Anda. Penggunaan tunggal saya yang paling umum adalah penanganan "acara berteriak": Anda hanya "menyiarkan ke seluruh dunia" bahwa suatu peristiwa telah terjadi dan siapa pun yang mendengarkan yang akan menangani acara tersebut melakukannya. Dengan begitu Anda memisahkan peristiwa yang sebenarnya terjadi dengan apa yang mendengarkannya. (Logging, sinyal, dll.)
Pengunjung
Hal buruk yang saya temukan tentang hal ini, terlepas dari fakta bahwa pengembang tidak dapat memikirkan nama yang bermakna dan hanya memanggil metode kunjungan (), adalah bahwa hal itu menambah ekstensibilitas dalam satu arah sementara menghapusnya di yang lain, yaitu menambahkan fungsionalitas tambahan tetapi membatasi jumlah objek yang perlu diketahui pengunjung tentang semua jenis objek yang mungkin dikunjungi.
Dimungkinkan, meskipun berantakan, untuk memungkinkan ekstensi di kedua arah tetapi ini tidak sepenuhnya menggunakan pola pengunjung dalam bentuk regulernya. Aplikasi yang paling umum untuk ini adalah mencetak objek: Anda memiliki berbagai cara untuk mencetak objek dan objek berbeda yang perlu dicetak. Anda harus dapat memperpanjang ini di kedua arah. (Mencetak berarti segala jenis benda yang berubah menjadi aliran: menyimpan dalam file / menulis ke konsol / GUI .. dll).
(Catatan: Anda tidak harus membingungkan ini dengan arsitektur tampilan dokumen, yang merupakan pola yang sedikit berbeda).
sumber
Saya pikir masalah dengan beberapa pola yang lebih kompleks adalah bahwa ada begitu banyak variasi pada mereka sehingga mereka kehilangan banyak nilainya sebagai alat komunikasi.
Pelaku terburuk yang bisa saya pikirkan dalam kategori ini adalah pola MVC. Bahkan jika kita mengabaikan MVP, ada begitu banyak variasi dalam peran masing-masing item ini sehingga Anda harus menghabiskan waktu satu jam di setiap kerangka kerja baru untuk mencari tahu di mana letak batas-batasnya.
sumber
Tidak ada pola buruk hanya orang jahat.
Saya lebih suka mewarisi kode yang mudah dibaca yang melakukan sesuatu yang jelas tetapi sedikit verbose atau tidak (antrian musik villian jahat) dapat digunakan kembali (terkesiap!) Daripada beberapa mash mash of
InheritAbstractTemplateFaucetSink<Kitchen>
.Kode yang dapat digunakan kembali bagus! Kemungkinan Anda tidak menulis kode yang akan digunakan kembali atau menulis ulang logika serupa untuk aplikasi lain akan membawa Anda lebih sedikit waktu daripada beberapa upaya gila untuk menggunakan kembali beberapa kode aplikasi lain.
Untuk membaca lebih lanjut, buka beberapa kode C di implementasi waras dari header posix atau clibs dan mainkan polanya. Kode ini ditulis oleh beberapa programmer paling cerdas dan paling berdedikasi di dunia. Apakah Anda tahu berapa banyak Pola Pabrik Abstrak yang akan Anda lihat? ... TIDAK ADA !. Peluang yang lebih baik adalah jika Anda memahami bagian lain dari apa yang terjadi, Anda akan menemukan logika yang sangat mudah dipahami dan dilacak.
Maksud saya adalah ini sebagian besar "pola" tidak dibuat untuk membuat kode lebih baik mereka diciptakan untuk menjual buku dan perangkat lunak pemodelan. Jika Anda pandai pemrograman Anda mungkin akan menghindari sebagian besar dari ini dan menulis kode yang dirancang jelas, ringkas, dan cerdik yang memecahkan masalah Anda. Ketika Anda memiliki masalah lain, Anda akan menulis kode yang jelas, ringkas, dan cerdik untuk memecahkan masalah itu. Jika tujuan Anda adalah untuk menulis lebih sedikit kode daripada yang saya kira Anda tidak cocok menjadi seorang programmer. Saya suka menulis kode dan ingin menulis sebanyak mungkin. Ketika saya menulis ulang sesuatu yang sudah saya tulis, saya melakukannya puluhan kali lebih cepat dan bisa menyingkirkan semua hal yang tidak saya sukai dengan pertama kali saya melakukannya.
Dengan itu saya akan meninggalkan Anda mungkin dengan kutipan (relevan) terbaik dalam ilmu komputer.
" Ada dua cara membangun desain perangkat lunak: Salah satu caranya adalah membuatnya begitu sederhana sehingga jelas tidak ada kekurangan, dan cara lainnya adalah membuatnya sangat rumit sehingga tidak ada kekurangan yang jelas. Metode pertama jauh lebih sulit." . "
sumber
Saya setuju bahwa ada waktu untuk sebagian besar pola, dan Anda dapat menyalahgunakan banyak pola. Saya tahu salah satu yang paling banyak saya lecehkan di masa lalu adalah pola Template Abstrak. Diambil sepenuhnya itu dikenal sebagai ASP.NET webforms.
sumber