Saya sedang mengerjakan proyek yang memproses permintaan, dan ada dua komponen untuk permintaan: perintah dan parameter. Pawang untuk setiap perintah sangat sederhana (<10 baris, sering <5). Setidaknya ada 20 perintah, dan kemungkinan akan memiliki lebih dari 50 perintah.
Saya telah menemukan beberapa solusi:
- satu saklar besar / jika-lain pada perintah
- peta perintah ke fungsi
- peta perintah ke kelas / lajang statis
Setiap perintah melakukan sedikit pengecekan kesalahan, dan satu-satunya bit yang dapat diabstraksi adalah memeriksa jumlah parameter, yang didefinisikan untuk setiap perintah.
Apa yang akan menjadi solusi terbaik untuk masalah ini, dan mengapa? Saya juga terbuka untuk pola desain yang mungkin saya lewatkan.
Saya telah membuat daftar pro / con berikut untuk masing-masing:
beralih
- pro
- menyimpan semua perintah dalam satu fungsi; karena sederhana, ini membuatnya menjadi tabel pencarian visual
- tidak perlu mengacaukan sumber dengan banyak fungsi / kelas kecil yang hanya akan digunakan di satu tempat
- kontra
- sangat panjang
- sulit untuk menambahkan perintah secara terprogram (perlu menggunakan rantai menggunakan case standar)
perintah peta -> fungsi
- pro
- potongan kecil, seukuran gigitan
- dapat menambah / menghapus perintah secara terprogram
- kontra
- jika dilakukan in-line, sama secara visual dengan saklar
- jika tidak dilakukan in-line, banyak fungsi hanya digunakan di satu tempat
perintah peta -> kelas statis / singleton
- pro
- dapat menggunakan polimorfisme untuk menangani pengecekan kesalahan sederhana (hanya seperti 3 baris, tapi tetap saja)
- manfaat serupa untuk memetakan -> solusi fungsi
- kontra
- banyak kelas yang sangat kecil akan mengacaukan proyek
- implementasi tidak semuanya di tempat yang sama, sehingga tidak mudah untuk memindai implementasi
Catatan tambahan:
Saya menulis ini di Go, tapi saya rasa solusinya tidak spesifik untuk bahasa. Saya mencari solusi yang lebih umum karena saya mungkin perlu melakukan sesuatu yang sangat mirip dalam bahasa lain.
Perintah adalah string, tetapi saya dapat dengan mudah memetakan ini ke nomor jika nyaman. Tanda tangan fungsinya adalah seperti:
Reply Command(List<String> params)
Go memiliki fungsi tingkat atas, dan platform lain yang saya pertimbangkan juga memiliki fungsi tingkat atas, maka perbedaan antara opsi kedua dan ketiga.