Pola desain untuk sistem aturan?

12

Sebagai proyek menyenangkan yang cepat, saya mencoba menulis permainan solitaire. Tetapi ketika mulai menulis sistem aturan, saya merasa kotor , karena kode saya merasa benar-benar tidak terstruktur dan tidak dapat dipertahankan , terutama karena logika permainan saya adalah kode spaghetti yang lengkap.

Saya pernah mengalami masalah ini sebelumnya, dan selalu merasa canggung ketika menulis bagian dari program saya ini, jadi saya bertanya-tanya, apakah ada praktik terbaik yang telah dicoba dan diuji dalam hal mendefinisikan aturan dalam permainan ?

Dasuraga
sumber
1
Maksimalkan Enkapsulasi dan Minimalkan Kopling
John McDonald

Jawaban:

2

Saya tidak berpikir ada solusi unik karena banyak cosiderations berasal dari masalah khusus.

Anda dapat menggunakan pola Pengendali Tampilan Model: ini memindahkan (membatasi) masalah Anda ke "cara menerapkan perilaku pada pengontrol", sebuah beahaviour yang selalu mengikuti aturan.

Kecuali jika kita berbicara tentang aturan yang sangat sederhana, cara Anda mengaturnya menimbulkan masalah ekspresi . Anda selalu menghadapi tuntutan yang saling bertentangan yaitu sederhana (terstruktur) dan ekspresif (menulis aturan yang menyenangkan).

Menggunakan MVC menyederhanakan pekerjaan Anda karena model memformalkan keadaan yaitu konteks di mana aturan ditegakkan.

Mengatakan bahwa, Anda mungkin menemukan manfaatnya untuk mengimplementasikan Pengendali menggunakan pola Strategi dan / atau pola Negara untuk menyusun perilaku yang kompleks dalam hal perilaku yang dapat dipindahkan yang lebih sederhana. Pola Rantai-of-resposibilitas dapat membantu Anda untuk mengekspresikan aturan sementara mesin State harus digunakan dengan hati-hati karena "negara" -nya sebagian tumpang tindih makna model "negara".

Menggunakan pola Command di dalam Controller mungkin berguna untuk mengurangi tanggung jawab Controller (Command tahu bagaimana menangani model) dan membuatnya mudah untuk menambahkan fungsi undo / redo di Controller.

Bagaimanapun, Anda harus mencoba menggunakan pola desain sebagai pedoman: mereka berguna untuk menghindari menciptakan kembali roda, terutama roda persegi, tetapi tidak setiap solusi masalah terdiri dari sekelompok (putaran) roda disatukan.

FxIII
sumber
2

Saya tidak yakin tentang menjadi yang terbaik atau bahkan baik, tetapi saya biasanya menggunakan pola Pengamat . Itu bekerja cukup baik untuk saya.

Ali1S232
sumber
1
Bisakah Anda memberi contoh?
Gustavo Maciel
Anda dapat membuat pengamat untuk setiap aturan, lalu melampirkannya ke status permainan. setelah setiap giliran permainan memanggil semua pengamat untuk memeriksa apakah ada aturan yang diterapkan.
Ali1S232
0

Kecuali Anda sudah melakukan pekerjaan berkali-kali sebelumnya, Anda akan selalu berakhir dengan kode spaghetti. Sebenarnya, pada titik ini, Anda baru saja memulai: apa yang Anda miliki adalah konsep kasar dari spesifikasi awal. Lihatlah beberapa saran lain di sini dan lakukan penulisan ulang yang serius. Dan kemudian beberapa penulisan ulang, dan kemudian .... Secara pribadi, saya tidak pernah yakin apakah saya mendapatkan kode saya ke dalam bentuk yang sangat bagus atau hanya bosan menulis ulang, tetapi saya tampaknya benar pada akhirnya.

Atasi masalah dari dua ujung. Cobalah untuk mendapatkan desain keseluruhan yang masuk akal dan pilih bagian-bagian kecil yang menangani tugas-tugas sederhana dan membuatnya benar. Kemudian cobalah untuk bekerja dengan cara Anda dari kedua ujung ke tengah. Dan kemudian bekerja dari belakang tengah ke kedua ujungnya. Lalu dari atas ke bawah, lalu dari bawah ke atas. Kemudian ulangi seluruh proses.

Pada dasarnya, apa yang Anda miliki adalah kumpulan kelas. Pertimbangkan kelas A. Jika kelas A dibangun dengan baik, kelas-kelas yang menggunakannya akan otomatis bekerja lebih baik, betapapun buruknya mereka. Jika kelas A menggunakan kelas dengan baik, kelas yang digunakan akan melakukan lebih banyak, baik atau buruknya mereka . Jadi, atur kelas Anda sebaik mungkin, lalu pastikan masing-masing kelas terbaik yang bisa dicapai.

Sangat penting untuk mendapatkannya semaksimal mungkin. Kode yang buruk akan menghantui Anda sampai hari Anda membuangnya. Dengan perangkat lunak, sedikit pemolesan ekstra selalu terbayar. (Kecuali tidak ada yang akhirnya menggunakan kode ....)

Singkatnya: periksa saran aktual yang diberikan dalam jawaban lain, lalu tulis ulang kode Anda sampai Anda mendapatkan sesuatu yang Anda sukai.

RalphChapin
sumber
Jadi jawaban Anda pada dasarnya adalah "baca jawaban lain dan lakukan kode bersih atau Anda akan menyesal" ...
kaoD
@ ChenD: Ya. Tetapi juga: upaya pengkodean pertama Anda mungkin akan menjadi sampah. (Jika tidak, Anda tidak mendorong diri sendiri cukup keras.) Dibutuhkan banyak kerja keras untuk menyatukannya, bersama dengan sedikit riset dan banyak pemikiran. Ini normal ketika menulis program yang terlibat. Semua upaya yang dilakukan dengan cara ini akan menghemat waktu, tenaga, dan kesedihan dalam jangka panjang (jika program tersebut masih ada dalam jangka panjang). Dan juga: OOP sangat membantu jika Anda bisa menguasainya. (Terbaik yang bisa saya lakukan tanpa melihat kode.)
RalphChapin
4
Apakah Anda sadar bahwa sebenarnya Anda TIDAK menjawab pertanyaan?
kaoD
Sebenarnya, terlepas dari apakah posting Ralph secara teknis adalah jawaban atau tidak, saya pikir tanggapan Ralph berbicara tentang motif OP untuk mengajukan pertanyaan sejak awal. Saya percaya ini memiliki banyak nilai bagi seorang pembuat kode yang belum menyadari bahwa sangat jarang Anda mendesain kode Anda pada percobaan pertama. Selain itu, ia menawarkan pendekatan untuk menghadapinya yang tampaknya lahir dari pengalaman Ralph.
Steve H
@SteveH Saya pikir jawabannya berlaku untuk hampir semua proses rekayasa perangkat lunak. Anda dapat menyalin dan menempelkannya di mana saja dan itu akan cocok.
kaoD