मैं हाल ही में निम्न स्थिति में चला गया।
class A{
public:
void calculate(T inputs);
}
सबसे पहले, A
भौतिक दुनिया में एक वस्तु का प्रतिनिधित्व करता है, जो वर्ग को विभाजित नहीं करने के लिए एक मजबूत तर्क है। अब, calculate()
काफी लंबा और जटिल कार्य हो गया है। मैं इसके लिए तीन संभावित संरचनाएं देखता हूं:
- इसे पाठ की दीवार के रूप में लिखें - लाभ - सभी जानकारी एक ही स्थान पर है
private
कक्षा में उपयोगिता कार्यों को लिखें और उन्हेंcalculate
शरीर में उपयोग करें - नुकसान - उन तरीकों के बारे में बाकी कक्षा को पता नहीं है / देखभाल / समझ नहीं हैcalculate
निम्नलिखित तरीके से लिखें :void A::calculate(T inputs){ auto lambda1 = () [] {}; auto lambda2 = () [] {}; auto lambda3 = () [] {}; lambda1(inputs.first_logical_chunk); lambda2(inputs.second_logical_chunk); lambda3(inputs.third_logical_chunk); }
क्या यह एक अच्छा या बुरा अभ्यास माना जा सकता है? क्या यह दृष्टिकोण किसी भी समस्या को प्रकट करता है? सब के सब, मैं एक अच्छा दृष्टिकोण के रूप में इस पर विचार करना चाहिए जब मैं फिर से उसी स्थिति का सामना कर रहा हूं?
संपादित करें:
class A{
...
public:
// Reconfiguration of the algorithm.
void set_colour(double colour);
void set_density(double density);
void set_predelay(unsigned long microseconds);
void set_reverb_time(double reverb_time, double room_size);
void set_drywet(double left, double right);
void set_room_size(double value);;
private:
// Sub-model objects.
...
}
वे सभी विधियाँ:
- एक मूल्य प्राप्त करें
- राज्य का उपयोग किए बिना, कुछ अन्य मूल्यों की गणना करें
- अपने राज्य को बदलने के लिए "उप-मॉडल ऑब्जेक्ट्स" में से कुछ को कॉल करें।
यह पता चला है कि, सिवाय set_room_size()
, उन विधियों उप-वस्तुओं के लिए अनुरोधित मान को पास करते हैं। set_room_size()
दूसरी ओर, अस्पष्ट फ़ार्मुलों की एक जोड़ी स्क्रीन करता है और फिर (2) विभिन्न प्राप्त परिणामों को लागू करने के लिए उप-ऑब्जेक्ट्स कॉलिंग की आधी स्क्रीन करता है। इसलिए, मैंने फ़ंक्शन को दो लैम्ब्डा में अलग किया है और फ़ंक्शन के अंत में उन्हें कॉल करता हूं। अगर मैं इसे अधिक तार्किक विखंडू में विभाजित करने में सक्षम होता, तो मैं अधिक लंबोदर को अलग कर देता।
भले ही, वर्तमान प्रश्न का लक्ष्य यह निर्धारित करना है कि क्या सोचने का तरीका जारी रहना चाहिए, या क्या यह मूल्य (पठनीयता, स्थिरता, डिबग-क्षमता आदि) को जोड़ने के लिए सबसे अच्छा है।
Firstly, A represents an object in the physical world, which is a strong argument for not splitting the class up.
भौतिक दुनिया में मौजूद किसी वस्तु के बारे में निश्चित रूप से डेटा काA
प्रतिनिधित्व करता है। आप उदाहरण के बिना वास्तविक वस्तु और वास्तविक वस्तु के बिना एक उदाहरण हो सकते हैं , इसलिए उनके साथ ऐसा व्यवहार करना कि वे एक हैं और एक ही निरर्थक है। A
A
calculate()
उन उप-कार्यों के बारे में पता चलेगा।
A
, तो यह थोड़ा चरम पर ले जा रहा है।
A
भौतिक दुनिया में एक वस्तु का प्रतिनिधित्व करता है, जो कक्षा को विभाजित नहीं करने के लिए एक मजबूत तर्क है।" जब मैंने प्रोग्रामिंग शुरू की तो दुर्भाग्य से मैंने यह बताया था। मुझे यह महसूस करने में वर्षों लग गए कि यह हॉर्स हॉकी का एक गुच्छा है। चीजों को समूहित करना एक भयानक कारण है। मैं स्पष्ट नहीं कर सकता कि समूह की चीजों के लिए अच्छे कारण क्या हैं (कम से कम मेरी संतुष्टि के लिए), लेकिन वह वह है जिसे आपको अभी त्याग देना चाहिए। अंत सब, "अच्छे कोड" के सभी हो सकते हैं कि यह सही काम करता है, समझने में अपेक्षाकृत आसान है, और बदलना अपेक्षाकृत आसान है (यानी, बदलावों के अजीब दुष्प्रभाव नहीं हैं)।