C++ में आर्किटेक्चरल पैटर्न: ऐसा कोड कैसे लिखें जिसे दिखाने में शर्म न आए

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ बिना आर्किटेक्चर के क्यों दर्दनाक है

\n

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

\n

C++ में आर्किटेक्चरल पैटर्न विश्वविद्यालय के व्याख्यानों का उबाऊ सिद्धांत नहीं है। ये सिद्ध युद्ध-परीक्षित नुस्खे हैं जो प्रोजेक्ट को बचाते हैं जब वह "खिलौने" से औद्योगिक में बदल जाता है। इस लेख में हम C++ आर्किटेक्चरल पैटर्न पर चर्चा करेंगे जो वास्तव में जीवन को सरल बनाते हैं: MVC से Observer तक। और हाँ, बहुत सारा कोड होगा।

\n\n

आर्किटेक्चरल पैटर्न क्या है (और यह "सिर्फ पैटर्न" से कैसे अलग है)

\n

बहुत से लोग C++ डिज़ाइन पैटर्न (GoF: Singleton, Factory, Adapter) को आर्किटेक्चरल समझ लेते हैं। अंतर सरल है:

\n
    \n
  • डिज़ाइन पैटर्न — क्लास या मॉड्यूल स्तर के सूक्ष्म-समाधान (उदाहरण के लिए, ऑब्जेक्ट कैसे बनाएं)।
  • \n
  • आर्किटेक्चरल पैटर्न — संपूर्ण एप्लिकेशन स्तर के मैक्रो-समाधान (घटक कैसे संवाद करते हैं, परतें कैसे विभाजित हैं)।
  • \n
\n

आर्किटेक्चर यह निर्धारित करता है कि क्या आपका प्रोजेक्ट छह महीने में "कीचड़ का बड़ा गोला" (Big Ball of Mud) बन जाएगा। तो आइए C++ के लिए तीन सबसे उपयोगी पैटर्न देखें।

\n\n

1. C++ में MVC (Model-View-Controller): बाँटो और राज करो

\n

MVC एक क्लासिक है। यह एप्लिकेशन को तीन भागों में विभाजित करता है: डेटा (Model), प्रदर्शन (View) और नियंत्रण तर्क (Controller)। C++ में यह GUI-एप्लिकेशन (Qt, wxWidgets) या यहां तक कि कंसोल उपयोगिताओं के लिए विशेष रूप से प्रासंगिक है।

\n\n

यह कोड में कैसा दिखता है

\n

आइए एक सरल कैलकुलेटर की कल्पना करें। Model परिणाम संग्रहीत करता है, View इसे प्रदर्शित करता है, Controller इनपुट को संसाधित करता है।

\n
#include <iostream>\n#include <string>\n\n// Model: GUI के बारे में कुछ नहीं जानता\nclass CalculatorModel {\npublic:\n    double add(double a, double b) {\n        result_ = a + b;\n        return result_;\n    }\n    double getResult() const { return result_; }\nprivate:\n    double result_ = 0;\n};\n\n// View: केवल प्रदर्शन\nclass CalculatorView {\npublic:\n    void showResult(double value) {\n        std::cout << "परिणाम: " << value << std::endl;\n    }\n    void showError(const std::string& msg) {\n        std::cerr << "त्रुटि: " << msg << std::endl;\n    }\n};\n\n// Controller: Model और View को जोड़ता है\nclass CalculatorController {\npublic:\n    CalculatorController(CalculatorModel& model, CalculatorView& view)\n        : model_(model), view_(view) {}\n\n    void handleAdd(double a, double b) {\n        double res = model_.add(a, b);\n        view_.showResult(res);\n    }\nprivate:\n    CalculatorModel& model_;\n    CalculatorView& view_;\n};\n\nint main() {\n    CalculatorModel model;\n    CalculatorView view;\n    CalculatorController controller(model, view);\n\n    controller.handleAdd(5, 3); // आउटपुट: परिणाम: 8\n    return 0;\n}
\n

यह क्यों बढ़िया है? आप Model को छुए बिना कंसोल View को Qt-विजेट से बदल सकते हैं। या GUI चलाए बिना Model के लिए यूनिट टेस्ट जोड़ सकते हैं। यह शुरू से C++ अनुप्रयोगों के डिज़ाइन का आधार है।

\n\n

2. Observer (प्रेक्षक): जब परिवर्तन सभी को दिखाई देने चाहिए

\n

कल्पना करें: आपके पास एक तापमान सेंसर है, और कई पैनलों को तापमान बदलने पर अपडेट होना चाहिए। हर सेकंड सेंसर से पूछताछ (polling) करने के बजाय, Observer स्वयं सब्सक्राइबर्स को सूचित करता है। यह C++ आर्किटेक्चरल पैटर्न है जो कोड को इवेंट-संचालित बनाता है।

\n\n

C++11 और नए में कार्यान्वयन

\n

लचीलेपन के लिए स्मार्ट पॉइंटर्स और std::function का उपयोग करें।

\n
#include <iostream>\n#include <vector>\n#include <memory>\n#include <functional>\n\n// प्रेक्षक इंटरफ़ेस\nclass IObserv                

ब्लॉग

पुस्तक अनुशंसाएँ