Apa itu pemrograman berbasis pola?

16

Adakah yang bisa menjelaskan obsesi terhadap pola dan anti-pola dalam pemrograman? Saya bertanya karena saya sama sekali tidak tahu apa arti salah satu pola. Ketika dihadapkan dengan tugas pemrograman saya berpikir tentang masalah sebentar, tulis beberapa struktur data yang saya pikir akan relevan, prototipe solusi, pisahkan beberapa modul dan lakukan iterate. Tidak dalam proses saya berpikir "Oh, saya perlu pola FunkyLookyTastic di sini".

davidk01
sumber
12
Obsesi dengan pola dalam satu cara merupakan anti-pola
Anto
1
Pada poin terakhir, saya sebagian setuju. Ada beberapa pola yang akan saya sebutkan, tetapi beberapa pola buku teks tampak seperti varian kecil satu sama lain, dan yang menarik biasanya adalah bagaimana Anda mengadaptasi pola tersebut agar sesuai dengan kasus tertentu, jadi Anda tentu tidak boleh dogmatis tentang hal-hal tersebut.
Steve314
1
Apakah Anda memprogram dalam bahasa yang dinamis? Banyak pola yang disebut orang adalah cara untuk mengatasi keterbatasan di Jawa.
johncip
Juga, memperlakukan setiap masalah secara terpisah tidak berskala dengan ukuran tim. Misalnya, dengan kerangka kerja MVC, model sering dinormalisasi tetapi pandangan mungkin berhubungan dengan data yang diturunkan. Ada beberapa cara untuk mengatasinya, tetapi orang-orang seharusnya tidak memecahkan masalah itu (berpotensi berbeda) setiap kali ditemui. Dan orang lain yang membaca kode tidak harus mencari tahu bagaimana masalah X diselesaikan dalam contoh ini, sebagai lawan dari semua yang lain.
johncip

Jawaban:

19

Suatu pola adalah pendekatan umum untuk memecahkan jenis masalah yang umum; tidak lebih, dan tidak kurang. Dengan mengetahui dan memahaminya, Anda dapat memanfaatkan pengalaman orang lain untuk memandu Anda menuju jenis solusi yang terbukti berfungsi dengan baik, menghindari perangkap yang telah ditemukan di masa lalu, dan mendiskusikan solusi menggunakan terminologi yang akrab bagi orang lain yang tahu pola itu.

Tentu saja, Anda dapat menemukan solusi yang baik tanpa secara eksplisit menggunakan pola, dan sama-sama menghasilkan solusi yang buruk dengan mencoba menerapkan pola yang tidak benar-benar cocok dengan masalah khusus Anda. Saya pikir "obsesi" yang Anda amati umumnya berasal dari orang-orang yang baru saja menemukan konsep itu, dan berpikir bahwa itu agak lebih kuat daripada yang sebenarnya. Kebanyakan orang akan dengan cepat mengenali mereka apa adanya: alat yang berguna, bukan peluru ajaib.

Anti-pola, di sisi lain, adalah perilaku umum yang cenderung mengurangi kualitas kode. Sekali lagi, penting untuk mengetahui dan memahami beberapa di antaranya sehingga Anda dapat menghindari perilaku seperti itu, dan mencoba memperbaikinya (dengan argumen yang beralasan) ketika Anda mengamati orang lain. Beberapa akan menggambarkan terlalu seringnya pola sebagai anti-pola.

Mike Seymour
sumber
1
Sebagai contoh, pola berorientasi objek geng-empat terkenal disusun dari pengalaman penulis dan orang-orang yang berhubungan dengan mereka. Alasan beberapa pola memiliki beberapa nama - mereka diciptakan kembali secara independen dan dinamai beberapa kali. Kebanyakan pemrogram secara alami akan menemukan kembali beberapa pola yang tersisa untuk perangkat mereka sendiri - dan beberapa antipattern, tentu saja.
Steve314
3
"obsesi" yang Anda amati umumnya berasal dari orang-orang yang baru saja menemukan konsep - kebanyakan benar, IMHO. ada yang, saya percaya, yang merasa Anda harus mendekati masalah dengan pola siap ... dan jika solusi Anda tidak termasuk pola yang jelas, maka solusi Anda salah ... kita harus meluangkan waktu untuk mempelajari pola, bagaimana mereka
Sudah
9

Pola keduanya adalah pengetahuan yang disaring dari programmer dalam buku masak, dan cara yang berguna bagi programmer untuk berkomunikasi.

Seperti yang disarankan oleh jawaban lain, pola adalah solusi umum untuk masalah umum. Manfaatnya adalah Anda sering dapat memperoleh solusi yang lebih baik dengan menggunakan pola yang ada atau menemukan kemungkinan jebakan sebelum Anda mulai membuat kode.

Manfaat lainnya adalah ketika Anda berbicara dengan seseorang tentang kode Anda. Pola adalah jenis jargon lain yang memadatkan deskripsi panjang menjadi beberapa kata. Coba jelaskan "maka kita memiliki pengamat yang ditambahkan oleh pabrik" tanpa merujuk pada pola. Anda bisa melakukannya, tetapi butuh waktu lama.


sumber
2
+1 untuk komunikasi. Rutinitas sehari-hari berjalan lebih lancar ketika semua orang berada di halaman yang sama dan memiliki leksikon yang sama.
Ampt
3

Sebagian besar pengembang akan merasa ngeri pada paradigma atau metodologi baru yang masuk. Saya melakukannya ketika saya pertama kali mendengar tentang pola desain. Pola desain sesuai dengan namanya: desain atau templat untuk membuat kelas dan memodelkan perilaku dan interaksi mereka dengan cara yang dapat diprediksi

Lihatlah rumah-rumah. Mereka memiliki beberapa kesamaan. Setiap rumah memiliki ruang tamu, dapur, kamar tidur, kamar mandi, toilet minimum. Tidak ada yang akan membangun rumah tanpa kamar mandi, kan? Apartemen memiliki pola yang berbeda dengan bunglows. Kastil memiliki pola yang berbeda sama sekali. Pakaian juga memiliki pola. Jaket dan kemeja formal keduanya memiliki desain dasar yang sama, namun mereka memiliki perilaku yang berbeda: Anda tidak akan mengenakan jaket koboi untuk wawancara. Demikian pula kelas dan tindakan mereka dapat dikelompokkan sesuai dengan perilaku dan desain mereka. Melihat elemen-elemen umum dalam perilaku mereka memberi Anda pola desain untuk kelas.

Pola desain dalam pemahaman saya hanya penting jika reusabilitas dan pengembangan adalah perhatian utama. Jika Anda membuat aplikasi kecil (katakanlah kurang dari 10 kelas), Anda mungkin tidak membutuhkannya sama sekali. Tetapi proyek-proyek besar, terutama yang memiliki tim besar yang mengerjakannya dan memiliki siklus perawatan yang panjang dan penambahan fitur, pasti akan membutuhkan pola. Bahkan bukan pilihan dalam proyek besar.

Lihatlah beberapa tutorial online tentang pola. Wikipedia memiliki seperangkat artikel yang bagus. Situs ini juga bagus: http://sourcemaking.com/ . Jika Anda seorang programmer yang berpengalaman, Anda akan menemukan bahwa Anda telah menemukan beberapa pola, bahkan mungkin menerapkan sesuatu yang serupa tanpa menyadarinya dengan nama tertentu.

Jangan abaikan mereka sama sekali! Anda mungkin menemukan mereka berguna di masa depan jika tidak sekarang. Kunci untuk mendekati Pola Desain dengan pikiran terbuka adalah dengan bertanya: "Apa yang akan terjadi jika saya tidak menggunakan pola desain?" Pola tidak dimaksudkan sebagai "obat" (meskipun Anda dapat menggunakannya sebagai obat untuk masalah); alih-alih, mereka mewujudkan diktum "pencegahan lebih baik daripada penyembuhan".

Semua sama, saya akan memperingatkan terhadap obsesi dengan menerapkan pola di mana pun dan kapan pun Anda melihat alasan kecil untuk menggunakannya. Saya menghadapi masalah ini dalam satu proyek di mana arsitek yakin bahwa tanpa DP proyek akan menjadi bencana total. Kami mengadakan pertemuan kelompok di mana para insinyur menggeser desain dan menunjukkan bahwa banyak pola yang dia rekomendasikan tidak akan berguna sama sekali selain menunjukkan "wow lihat pola-pola yang indah". Diperlukan banyak upaya meyakinkan dan tawar-menawar untuk mengurangi jumlah tempat di mana pola-pola itu digunakan hanya sebagai kebutuhan saja.

DPD
sumber
1

Orang-orang yang menjawab benar dalam hal "pemrograman berbasis pola" seperti yang biasanya dipikirkan. Saya memiliki definisi yang sedikit berbeda yang saya temukan lebih relevan dengan apa yang saya lakukan dan saya cenderung menggunakan "pemrograman berbasis pola" untuk menggambarkan pendekatan plugin daripada pendekatan perencanaan.

Karena saya memprogram plugin jQuery, plugin cloud CMS dan plugin eCommerce, "pemrograman berbasis pola" dari perspektif itu berarti melihat teknologi inti dan kasus penggunaan apa yang ada dan mengenai yang paling relevan secara statistik. Plugin khususnya harus sangat berbasis pola sehingga cocok dengan konteks pemrograman dengan baik.

Namun, yang terbaik adalah menerapkan pola SETELAH Anda melihat kasus penggunaan yang valid pada beberapa proyek sehingga secara statistik valid untuk digunakan kembali.

Jason
sumber