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.
Jawaban:
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.
sumber
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)!
sumber