Apakah ada alur kerja tertentu atau pola desain yang umum digunakan untuk membuat aplikasi pemrograman fungsional yang besar? [Tutup]

13

Saya telah menjelajahi Clojure untuk sementara waktu sekarang, meskipun saya belum menggunakannya pada proyek nontrivial. Pada dasarnya, saya merasa nyaman dengan sintaksis dan beberapa idiom. Berasal dari latar belakang OOP, dengan Clojure menjadi bahasa fungsional pertama yang sangat saya perhatikan, saya tentu tidak nyaman dengan cara fungsional dalam melakukan sesuatu.

Yang mengatakan, apakah ada alur kerja tertentu atau pola desain yang umum dengan membuat aplikasi fungsional yang besar? Saya benar-benar ingin mulai menggunakan pemrograman fungsional "nyata", tetapi saya takut bahwa dengan kurangnya keahlian saya saat ini, itu akan mengakibatkan kegagalan epik.

"Gang of Four" adalah standar untuk programmer OO, tetapi apakah ada hal serupa yang lebih diarahkan pada paradigma fungsional? Sebagian besar sumber daya yang saya temukan memiliki nugget pemrograman yang hebat, tetapi mereka tidak mundur untuk memberikan tampilan yang lebih luas dan lebih arsitektur.

Andrew
sumber
6
Beberapa pola GOF sebenarnya hanya solusi dalam bahasa OO untuk hal-hal yang sudah disediakan oleh Pemrograman Fungsional. Lihat stackoverflow.com/q/327955
Robert Harvey
2
terkait: stackoverflow.com/q/89212
kapal tunda
Saya pikir ada terlalu banyak fokus pada pola spesifik GoF / OOP dalam diskusi ini. Adakah yang bisa memposting beberapa pola spesifik pemrograman fungsional aktual (yang tidak hanya mencoba membuktikan kesederhanaan GoF dalam bahasa fungsional)?
Daniel B

Jawaban:

3

Pola-pola semacam ini biasanya merupakan gejala dari model dasar yang rusak dan tidak layak.

OOP rusak oleh desain, tidak cocok untuk sebagian besar aplikasinya, oleh karena itu meledak dengan semua yang disebut "pola". Model fungsional (hanya sedikit) lebih fleksibel, dan kebutuhan "pola" tidak begitu jelas di sana.

Setelah Anda mulai menerapkan pendekatan berorientasi bahasa (alami untuk programmer fungsional), menggunakan atau membuat DSL untuk setiap domain masalah tertentu, Anda akan menemukan bahwa tidak ada pola yang muncul sama sekali, karena Anda selalu menggunakan model yang memadai untuk menggambarkan masalah.

Tentu saja beberapa "pola" atau "resep" tingkat tinggi yang berulang tidak dapat dihindari bahkan dalam matematika yang sangat abstrak, bersih dan murni, tetapi semuanya memiliki jenis yang berbeda dan tingkat abstraksi yang berbeda dari pola GoF. Misalnya, Anda akan menemukan monads bermanfaat.

Logika SK
sumber
+1 untuk 2 paragraf terakhir, saya pikir itu tepat. Mengenai OOP, saya penasaran dengan alasan di balik menyebutnya rusak, selain fakta bahwa itu adalah alat generik yang sering diterapkan pada masalah tertentu (maka pola tingkat rendah seperti GoF muncul). Bisakah Anda menguraikan secara singkat, atau memposting tautan yang merangkum pendapat Anda?
Daniel B
@ DanielB, tidak ada yang salah dengan OOP per se, tetapi cara itu biasanya diterapkan benar-benar rusak. Model ini hanya cocok untuk beberapa masalah dunia nyata (dan itu benar-benar bersinar di sana, ketika diterapkan dengan tepat), tetapi untuk sisanya ia membutuhkan semua kruk dan lakban agar sesuai. Lihat jawaban saya di programmers.stackexchange.com/questions/52608/… misalnya.
SK-logic
OK, saya pikir saya ada di halaman yang sama. Bahkan, saya mungkin telah mengajukan pertanyaan yang tepat ini sebelumnya, maaf tentang itu - cara Anda mengucapkan kalimat itu sepertinya Anda lebih menyiratkan.
Daniel B
-3

Menurut pendapat pribadi saya, pola desain adalah semantik. Saya ingat menulis ulang beberapa aplikasi lama saya menggunakan MVC hanya untuk memastikan saya memahami polanya dan saya pikir saya mengerti. Tetapi, pada akhirnya, saya tidak mendapatkan apa pun dari MVC atas kode asli saya.

Namun, jika saya menerapkan kode asli saya ke lingkungan pengembangan yang lebih besar dan memberi tahu seseorang bahwa ada masalah dengan metode tertentu ini ... akan sulit bagi pengembang untuk melacak masalahnya. NAMUN, jika saya mengatakan bahwa ContractController telah dibersihkan untuk beberapa alasan, (s) dia akan tahu persis harus mulai dari mana.

Pola desainnya bagus ... tapi seperti yang saya katakan, saya pikir mereka semantik!

EDIT: Anda tipe penginjil membuat saya bingung. Bagaimana bisa sesuatu dikembangkan tanpa MVC (atau pola desain lainnya)!

aserwin
sumber
2
semantic (sɪˈmæntɪk) - adj 1. dari atau berkaitan dengan makna atau yang timbul dari perbedaan antara makna kata atau simbol yang berbeda 2. atau terkait dengan semantik (studi makna) 3. logika yang berkaitan dengan interpretasi teori formal, seperti ketika tabel kebenaran diberikan sebagai akun penghubung sentensial
Robert Harvey
+1 - poin saya adalah bahwa pola desain hanyalah alat komunikasi!
aserwin
Pola desain lebih dari sekadar cara untuk berkomunikasi; mereka adalah resep konkret, dipahami dengan baik yang dapat diimplementasikan dalam perangkat lunak untuk memecahkan masalah tertentu, yang biasa ditemui.
Robert Harvey
Itulah yang dikatakan buku-buku itu. Tapi saya tidak pernah benar-benar menyelesaikan masalah melalui pola desain yang saya tidak bisa menyelesaikannya tanpa itu. Satu-satunya keuntungan yang saya perhatikan dalam pengalaman saya sendiri adalah kemampuan untuk berbicara satu sama lain tentang kode! ;)
aserwin
1
Mengenai hasil edit Anda: Jadi, Anda lebih suka menemukan kembali roda setiap kali Anda menulis sedikit kode baru?
Robert Harvey