Saya melihat, di sini di Programmer, jawaban untuk pertanyaan ini: Bagaimana cara berpikir tentang pola desain dan praktik OOP berubah dalam bahasa yang dinamis dan diketik dengan lemah? Di sana saya menemukan tautan ke artikel dengan judul yang blak-blakan: Are Pattern Patterns Missing Language Features . Tetapi di mana saya menemukan cuplikan yang bagi saya tampak sangat menarik dan yang mungkin dapat diverifikasi terhadap pengalaman mengingat ada insentif untuk itu, seperti:
PaulGraham berkata, "Peter Norvig menemukan bahwa 16 dari 23 pola dalam Pola Desain tidak terlihat atau lebih sederhana di Lisp."
atau kalimat lain yang mengonfirmasi apa yang baru-baru ini saya lihat dengan orang yang mencoba mensimulasikan kelas dalam JavaScript:
Tentu saja, tidak ada yang pernah berbicara tentang pola "fungsi", atau pola "kelas", atau banyak hal lain yang kita anggap remeh karena sebagian besar bahasa menyediakannya sebagai fitur bawaan. OTOH, programmer dalam bahasa PrototypeOriented murni? mungkin lebih mudah untuk mensimulasikan kelas dengan prototipe ...
Saya juga mempertimbangkan bahwa pola desain adalah alat komunikasi . Karena walaupun dengan pengalaman terbatas saya berpartisipasi dalam membangun aplikasi, saya dapat melihat sebagai anti-pola ( tidak efektif dan / atau kontraproduktif ) misalnya, memaksa tim PHP kecil untuk mempelajari pola GoF untuk aplikasi intranet kecil hingga menengah. Saya sadar bahwa skala, ruang lingkup, dan tujuan dapat menentukan apa yang efektif dan / atau produktif, tetapi saya masih belum berhasil menemukan gambaran teknis tentang hal itu.
Saya melihat aplikasi komersial kecil yang dicampur fungsional dengan OOP dan masih dapat dipertahankan, dan saya tidak tahu apakah banyak yang akan membutuhkan misalnya dalam python untuk menulis singleton, tetapi bagi saya modul sederhana melakukan hal yang sama.
Jadi, apakah ada studi, artikel lengkap atau bentuk eksposisi lain yang mempertimbangkan pola desain vs solusi atau cara yang lebih mudah untuk melakukannya, atau penggantian dengan fitur bahasa?
sumber
Jawaban:
Saya tidak mengetahui adanya diskusi atau studi mendalam yang memperhitungkan semua hal itu.
Yang mengatakan, seluruh argumen "pola desain hanya menambal fitur yang hilang dalam bahasa OO" agak tipis, menurut pendapat saya. Ya, beberapa pola desain persis seperti itu, mereka mengisi beberapa celah umum bahkan tidak ada dalam bahasa X lainnya. Ini biasanya pola desain tingkat rendah dan lebih sederhana, seperti beberapa / banyak yang asli dalam buku GoF.
Tapi pola desain jauh melampaui yang sederhana, dan menyebut mereka fitur bahasa yang hilang memperluas imajinasi. Lihat sekilas katalog pola aplikasi perusahaan Fowler , dan pikirkan seperti apa jadinya jika itu semua adalah bagian dari definisi inti suatu bahasa. Saya kira Anda akan berakhir dengan bahasa khusus domain ( DSL ) untuk aplikasi perusahaan (dan yang sangat kompleks, pada saat itu).
Jadi inilah masalahnya - pola desain adalah cara untuk menghasilkan solusi yang dapat digunakan kembali untuk masalah-masalah tertentu (yang sering diterapkan dalam bahasa generik, semua-tujuan). Di sinilah komunikasi juga masuk. Jika Anda memberi tahu saya "kami menggunakan Rekaman Aktif", saya sudah tahu banyak tentang aplikasi Anda, tanpa menghabiskan menit membahas berbagai pendekatan. Jadi ya, pola desain tidak menambal lubang dalam spesifikasi bahasa. Apakah hanya itu yang mereka lakukan? Tidak - tidak dengan tembakan panjang.
Edit:
Di satu sisi, apa yang saya katakan adalah bahwa pola memungkinkan praktisi OO untuk berpikir pada tingkat yang lebih tinggi, dan hampir membangun jenis DSL untuk lingkungan mereka, sambil tetap dalam sintaksis bahasa mereka. Dan ya, saya telah melihat apa yang terjadi ketika Anda menerapkannya di mana-mana (lihat: AbstractSingletonProxyFactoryBean , ya, itu ada), atau berpikir itu semacam peluru perak. Intinya adalah bahwa meskipun mereka membutuhkan waktu lama untuk benar-benar merasa nyaman, mereka seharusnya benar-benar menurunkan kompleksitas dengan membuat hal-hal yang dapat diprediksi / dipahami pada tingkat tinggi. Ini sangat berbeda dengan menjadi tambalan untuk kegagalan bahasa Anda.
Sunting 2 - menambahkan contoh counter AbstractSingletonProxyFactoryBean untuk mengolok-olok pola. Agar benar-benar adil, bila dilihat dari lampu AOP, bahkan contoh tandingan ini dapat dipertahankan.
sumber