नियम प्रणालियों के लिए डिजाइन पैटर्न?


12

एक त्वरित मजेदार परियोजना के रूप में, मैंने एक त्यागी खेल लिखने की कोशिश की। लेकिन जब नियम प्रणालियों को लिखने के लिए हो रहा था, तो मुझे गंदा लगा , क्योंकि मेरा कोड पूरी तरह से असंरचित और अटूट था , मुख्यतः क्योंकि मेरा गेम लॉजिक स्पेगेटी कोड था।

मैं इस समस्या में पहले भी भाग चुका हूं, और अपने कार्यक्रम के इस भाग को लिखते समय हमेशा अजीब महसूस करता हूं, इसलिए मैं सोच रहा था, कि क्या किसी गेम में नियमों को परिभाषित करने की कोशिश की जाती है और सबसे अच्छी प्रथाओं का परीक्षण किया जाता है ?


1
अधिकतम Encapsulation और कम से कम युग्मन
जॉन मैकडोनाल्ड

जवाबों:


2

मुझे नहीं लगता है कि बहुत सारी विशिष्टताओं के बाद से एक विशिष्ट समस्या है।

आप मॉडल व्यू कंट्रोलर पैटर्न का उपयोग कर सकते हैं: यह आपकी समस्या को नियंत्रित करता है "कंट्रोलर पर एक व्यवहार को कैसे लागू किया जाए", यह एक नियम है जो हमेशा नियमों का पालन करता है।

जब तक हम बहुत ही सरल नियमों के बारे में बात कर रहे हैं, जिस तरह से आप उन्हें व्यवस्थित करते हैं वह अभिव्यक्ति की समस्या पैदा करता है । आप हमेशा सरल (संरचित) होने और अभिव्यंजक होने (मज़ेदार नियम लिखने) की परस्पर विरोधी मांगों का सामना करते हैं।

एमवीसी का उपयोग करना आपकी नौकरी को सरल बनाता है क्योंकि मॉडल एक राज्य को औपचारिक बनाता है अर्थात वह संदर्भ जिसमें नियम लागू किए जाते हैं।

कहा कि, आप सरल स्वैच्छिक व्यवहार के संदर्भ में जटिल व्यवहार की रचना करने के लिए रणनीति पैटर्न और / या राज्य पैटर्न का उपयोग करके नियंत्रक को लागू करने के लिए उपयोगी हो सकते हैं । एक चेन-ऑफ-रिस्पॉन्सिबिलिटी पैटर्न आपको नियमों को व्यक्त करने में मदद कर सकता है जबकि एक स्टेट मशीन को सावधानी से इस्तेमाल किया जाना चाहिए क्योंकि इसका "राज्य" आंशिक रूप से "राज्य" के मॉडल के अर्थ को ओवरलैप करता है।

कंट्रोलर के भीतर कमांड पैटर्न का उपयोग करना कंट्रोलर रिस्पांसिबिलिटी को कम करने के लिए उपयोगी हो सकता है (कमांड को मॉडल के साथ कैसे व्यवहार करना है) यह जानने के लिए और कंट्रोलर में पूर्ववत / फिर से कार्य करना आसान बनाना है ।

किसी भी दर पर, आपको दिशानिर्देश के रूप में डिज़ाइन पैटर्न का उपयोग करने का प्रयास करना चाहिए: वे पहिया को सुदृढ़ करने से बचने के लिए उपयोगी होते हैं, विशेष रूप से वर्ग पहिया, लेकिन हर समस्या के समाधान में एक (गोल) पहियों का एक गुच्छा नहीं होता है।


2

मैं सबसे अच्छा या अच्छा होने के बारे में निश्चित नहीं हूं, लेकिन मैं आमतौर पर ऑब्जर्वर पैटर्न का उपयोग करता हूं । इसने मेरे लिए काफी काम किया।


1
क्या आप एक उदाहरण बना सकते हैं?
गुस्तावो मैकिएल

आप प्रत्येक नियम के लिए एक पर्यवेक्षक बना सकते हैं, फिर उन्हें खेल स्थिति में संलग्न कर सकते हैं। प्रत्येक मोड़ के बाद राज्य उन सभी नियमों को लागू करने के लिए जाँच करने के लिए सभी पर्यवेक्षकों को बुलाता है।
अली

0

जब तक आपने पहले कई बार काम किया है, आप हमेशा स्पेगेटी कोड के साथ समाप्त करेंगे। दरअसल, इस बिंदु पर, आपने केवल शुरुआत की है: आपके पास जो है वह प्रारंभिक कल्पना का मोटा मसौदा है। यहां कुछ अन्य सलाह देखें और कुछ गंभीर पुनर्लेखन करें। और फिर कुछ और फिर से लिखना, और फिर .... व्यक्तिगत रूप से, मुझे कभी भी यकीन नहीं है कि क्या मुझे अपना कोड वास्तव में महान आकार में मिलता है या बस इसे फिर से लिखने के लिए बीमार हो सकता है, लेकिन मुझे लगता है कि यह अंततः ठीक हो जाएगा।

दो छोरों से समस्या का सामना करें। समझ बनाने के लिए और साधारण भागों को संभालने वाले छोटे भागों को लेने और उन्हें सही बनाने के लिए समग्र डिज़ाइन प्राप्त करने का प्रयास करें । फिर दोनों छोरों से बीच की तरफ अपने तरीके से काम करने की कोशिश करें। और फिर बीच के हिस्से से दोनों छोर की ओर काम करें। फिर ऊपर से नीचे, फिर नीचे से ऊपर। फिर पूरी प्रक्रिया को दोहराएं।

अनिवार्य रूप से, जो आपके पास है वह कक्षाओं का संग्रह है। कक्षा ए पर विचार करें। यदि वर्ग ए अच्छी तरह से बनाया गया है, तो इसका उपयोग करने वाले वर्ग स्वचालित रूप से बेहतर काम करेंगे, हालांकि वे अच्छे या बुरे हैं। यदि क्लास ए अच्छी तरह से कक्षाओं का उपयोग करता है, तो उपयोग किए गए वर्ग अधिक करेंगे, हालांकि वे अच्छे या बुरे हैं। इसलिए अपनी कक्षाओं को सर्वश्रेष्ठ के रूप में व्यवस्थित करें, तो सुनिश्चित करें कि प्रत्येक सबसे अच्छा वर्ग है जो संभवतः हो सकता है।

यह उतना ही महत्वपूर्ण है जितना आप कर सकते हैं। बुरा कोड आपको तब तक परेशान करेगा जब तक आप उसे बाहर नहीं फेंक देते। सॉफ्टवेयर के साथ, अतिरिक्त पॉलिशिंग का एक बिट हमेशा बंद का भुगतान करता है। (जब तक कोई कोड का उपयोग करके समाप्त न हो जाए ...)

योग करने के लिए: अन्य उत्तरों में दी गई वास्तविक सलाह को देखें, फिर अपना कोड तब तक लिखें जब तक आपको कुछ पसंद न हो।


तो आपका उत्तर मूल रूप से "अन्य उत्तरों को पढ़ें और क्लीन कोड करें या आपको पछतावा होगा" ...
kaoD

@kaoD: हाँ। लेकिन यह भी: आपका पहला कोडिंग प्रयास शायद रद्दी होगा। (यदि यह नहीं है, तो आप अपने आप को बहुत मुश्किल नहीं कर रहे हैं।) इसे एक साथ खींचने के लिए बहुत मेहनत करनी पड़ेगी, साथ ही साथ थोड़ी खोजबीन और बहुत सोच-विचार भी करना होगा। सम्मिलित कार्यक्रम लिखते समय यह सामान्य है। इस तरीके से खर्च किए गए सभी प्रयास लंबे समय में समय, प्रयास और दुःख को बचाएंगे (यदि कार्यक्रम अभी भी लंबे समय में है)। और यह भी: OOP बड़ा समय मदद करता है अगर आप इसे लटका सकते हैं। (सर्वश्रेष्ठ मैं कोड को देखे बिना कर सकता हूं।)
राल्फचपिन

4
क्या आपको एहसास है कि आप वास्तव में सवाल का जवाब नहीं दे रहे हैं?
कावड़

वास्तव में, इस बात की परवाह किए बिना कि राल्फ का पद तकनीकी रूप से एक उत्तर था या नहीं, मुझे लगता है कि राल्फ की प्रतिक्रिया पहली बार में सवाल पूछने के लिए ओपी के मकसद के लिए बोली गई थी। मेरा मानना ​​है कि यह एक कोडर के लिए बहुत अधिक मूल्य है, जो इस बात को महसूस नहीं करता है कि यह दुर्लभ है कि आप पहली कोशिश में अपना कोड सबसे अच्छा डिजाइन करते हैं। इसके अलावा, उन्होंने इससे निपटने के लिए एक दृष्टिकोण की पेशकश की जो राल्फ के अनुभव से पैदा हुआ था।
स्टीव एच

@SteveH मुझे लगता है कि उसका जवाब लगभग किसी भी सॉफ्टवेयर इंजीनियरिंग प्रक्रिया पर लागू होता है। आप इसे कहीं भी कॉपी और पेस्ट कर सकते हैं और यह फिट होगा।
काओड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.