डिज़ाइन पैटर्न और वास्तुशिल्प पैटर्न के बीच अंतर क्या है?


119

जब हम इंटरनेट पर डिज़ाइन पैटर्न के बारे में पढ़ते हैं तो हम ध्यान देते हैं कि 3 श्रेणियां हैं:

  • क्रिएशनल
  • संरचनात्मक
  • व्यवहार

लेकिन जब हम किसी सॉफ्टवेयर का आर्किटेक्चर बनाते हैं, तो हम MVP, MVC या MVVM के बारे में सोचते हैं।

उदाहरण के लिए, रचनात्मक पैटर्न के बीच मुझे सिंगलटन पैटर्न मिला , लेकिन मैंने अपने एमपीवी में सिंगलटन का भी उपयोग किया है।

तो मेरा सवाल है: क्या एक उत्पाद के सभी ढांचे पर एक डिजाइन पैटर्न है?

  • यदि हाँ, तो सिंगलटन एक डिज़ाइन पैटर्न कैसे हो सकता है? क्योंकि मैं इसे अपने आवेदन में कहीं भी उपयोग कर सकता हूं। मूल रूप से, यह केवल एक समय में मेमोरी में एक उदाहरण बनाने के लिए प्रतिबंधित है, लेकिन क्या यह अवधारणा परिभाषित नहीं है कि सॉफ्टवेयर कैसे डिज़ाइन किया गया है?

  • यदि नहीं, तो तीन श्रेणियों के पैटर्न में एमवीपी, एमवीसी और एमवीवीएम कहां हैं? और सॉफ्टवेयर के डिजाइन और वास्तुकला में क्या अंतर है?


पहले से ही चर्चा की गई: stackoverflow.com/a/46419722/3649347
मुझे बताओ कि

2
डिज़ाइन पैटर्न और वास्तुशिल्प पैटर्न संसाधनों की इस सूची की जाँच करें github.com/DovAmir/awesome-design-patterns
dov.amir

जवाबों:


174

इसके लिए एक विस्तृत विवरण की आवश्यकता है लेकिन मैं अपने सर्वश्रेष्ठ ज्ञान के अंतर को समझने की कोशिश करूंगा।

पैटर्न आसुत समानताएं हैं जो आप कार्यक्रमों में पाते हैं। यह हमें एक बड़ी जटिल संरचना के पुनर्निर्माण और सरल भागों का उपयोग करने की अनुमति देता है। यह समस्याओं के एक वर्ग के लिए एक सामान्य समाधान प्रदान करता है।

एक बड़ा जटिल सॉफ्टवेयर विभिन्न स्तरों पर विखंडन की एक श्रृंखला से गुजरता है। बड़े स्तर पर, वास्तुशिल्प पैटर्न उपकरण हैं। छोटे स्तर पर, डिज़ाइन पैटर्न उपकरण हैं और कार्यान्वयन स्तर पर, प्रोग्रामिंग प्रतिमान उपकरण हैं।

एक पैटर्न बहुत अलग-अलग स्तरों पर हो सकता है। भग्न देखें । त्वरित क्रम, मर्ज सॉर्ट क्रम में तत्वों के समूह को व्यवस्थित करने के लिए सभी एल्गोरिदम पैटर्न हैं।

सबसे सरल दृश्य के लिए:

  • प्रोग्रामिंग प्रतिमान - प्रोग्रामिंग भाषा के लिए विशिष्ट
  • डिजाइन पैटर्न - सॉफ्टवेयर निर्माण में समस्याओं को हल करता है
  • आर्किटेक्चरल पैटर्न - सॉफ्टवेयर सिस्टम के लिए मूलभूत संरचनात्मक संगठन

मुहावरे प्रतिमान-विशिष्ट और भाषा-विशिष्ट प्रोग्रामिंग तकनीकें हैं जो निम्न-स्तरीय विवरणों को भरती हैं।

डिज़ाइन पैटर्न आमतौर पर कोड स्तर की सामान्यताओं से जुड़े होते हैं। यह छोटे उप-प्रणालियों को परिष्कृत और निर्माण करने के लिए विभिन्न योजनाएँ प्रदान करता है। यह आमतौर पर प्रोग्रामिंग भाषा से प्रभावित होता है। कुछ प्रतिमान भाषा के प्रतिमानों के कारण महत्वहीन हो जाते हैं । डिजाइन पैटर्न मध्यम स्तर की रणनीति है जो संस्थाओं और उनके संबंधों की संरचना और व्यवहार में से कुछ को बाहर निकालते हैं।

जबकि आर्किटेक्चर पैटर्न को डिज़ाइन पैटर्न की तुलना में उच्च स्तर पर समानता के रूप में देखा जाता है। आर्किटेक्चरल पैटर्न उच्च स्तर की रणनीतियां हैं जो बड़े पैमाने पर घटकों, वैश्विक गुणों और एक प्रणाली के तंत्र की चिंता करती हैं।

पैटर्न कैसे प्राप्त होते हैं? के माध्यम से:

  1. फिर से उपयोग,
  2. वर्गीकरण
  3. और अंत में समानता को भंग करने के लिए अमूर्तता।

अगर आपने ऊपर दिए गए विचारों का पालन किया है। आप देखेंगे कि सिंग्लटन एक "डिज़ाइन पैटर्न" है जबकि MVC चिंताओं को अलग करने से निपटने के लिए "वास्तुशिल्प" पैटर्न में से एक है।

पर पढ़ने की कोशिश करें:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern

14
बहुत अच्छी तरह से किया और विस्तृत। अब मैं केवल कामना करता हूं कि हर कोई शर्तों का उपयोग करेगा जैसा कि आपने उन्हें यहां रखा है। क्या मुझे हमारे विपणन विभाग के कॉफी डिस्पेंसर के ऊपर की दीवार पर आपके उत्तर का एक प्रिंट पिन करना चाहिए? शायद वे एक दिन समझ जाएंगे। ;-)
ofi

@ofi: धन्यवाद! भाषा निर्माण का उपयोग हमें भ्रमित कर सकता है और हमारा मार्गदर्शन कर सकता है। यह कुछ ऐसा है जो मुझे काफी शक्तिशाली लगता है।
pyfunc

+3 साक्षात्कार के सवालों से हमें बचाने के लिए :)
RAJESH KUMAR ARUMUGAM

अच्छा जवाब, धन्यवाद !! जैसा कि @ofi ने कहा, मैं इसे प्रिंट करूंगा और डिजाइन टीम वॉल में पिन करूंगा।
रोल करें

11

डिजाइन पैटर्न एक तरह से तकनीकी समस्याओं को हल करने के लिए अच्छी तरह से ज्ञात पैटर्न हैं जो कई बार खुद को साबित कर चुके हैं। डिजाइन पैटर्न सामान्य डिजाइन संरचनाएं और अभ्यास हैं जो पुन: प्रयोज्य ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर बनाने के लिए बनाते हैं। डिजाइन पैटर्न के उदाहरण हैं फैक्टरी पैटर्न, सिंगलटन, फेस, स्टेट, आदि डिज़ाइन पैटर्न का उपयोग पूरे आवेदन में छोटी समस्याओं को हल करने के लिए किया जा सकता है, और समग्र वास्तुकला की तुलना में इसे इंजेक्ट करना, बदलना, जोड़ना बहुत आसान है।

आर्किटेक्चर पैटर्न सॉफ्टवेयर एप्लीकेशन आर्किटेक्चर समस्याओं को हल करने के लिए प्रसिद्ध पैटर्न हैं। सॉफ्टवेयर एप्लिकेशन आर्किटेक्चर एक संरचित समाधान को परिभाषित करने की प्रक्रिया है जो सभी तकनीकी और परिचालन आवश्यकताओं को पूरा करता है। एप्लिकेशन की वास्तुकला कोड का समग्र 'संगठन' है। विभिन्न आर्किटेक्चर के उदाहरण एमवीसी, एमवीवीएम, एमवीपी, एन-लेयर (यानी यूआई-बीएलएल-डीएएल) आदि हो सकते हैं। आर्किटेक्चर को आम तौर पर सामने वाले को तय करने की आवश्यकता होती है और आवेदन बनने के बाद अक्सर इसे बदलना मुश्किल होता है।


1

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

अधिक जानकारी के लिए: https://www.oreilly.com/ideas/contrasting-altecture-patterns-with-design.patps


0

खैर, मुख्य भाग के लिए यह भाषा की बात है। मेरे अनुभव के अनुसार, डिज़ाइन और आर्किटेक्चर के बीच की सीमा रेखा, जहाँ तक सॉफ्टवेयर का सवाल है, यह एक व्यापक नदी है जिसकी चौड़ाई जल स्तर से होती है जो बदले में मुख्य रूप से विपणन के मौसम से प्रभावित होती है। आम तौर पर "डिज़ाइन" शब्द का उपयोग सॉफ्टवेयर उत्पाद के व्यवहार के एक मजबूत पहलू के साथ किया जाता है, जैसा कि अंतिम उपयोगकर्ताओं द्वारा मान्यता प्राप्त है, जबकि "आर्किटेक्चर" एक सॉफ्टवेयर की तकनीकी संरचना के लिए खड़ा है, अर्थात घटक, पुस्तकालय, प्रोटोकॉल और जो भी इसे पूरा करने की आवश्यकता है। डिज़ाइन। "डिजाइन पैटर्न" दो भूमिकाएं लेते हैं: 1 उन्हें मानक समस्याओं (अधिक या कम) की श्रेणी को हल करने के लिए सर्वोत्तम अभ्यास के रूप में माना जाता है, न कि प्रोडक्शंस; 2 वे डेवलपर्स को संवाद करने में मदद करते हैं। एक सिंगलटन के अपने उदाहरण के साथ रहना, यह हमें यह जानने की अनुमति देता है कि हर बार समझाने के बजाय केवल शब्द का उपयोग करके यांत्रिकी क्या है, कि हमने एक निर्दिष्ट डेटास्पेस (चर या जो भी) का उपयोग करके एक एकल उदाहरण बनाया है जो एक नियंत्रित तरीके से सेट किया गया है और होने की गारंटी है केवल एक, क्योंकि हमने कक्षा के निर्माणकर्ता आदि की रक्षा की है, इसलिए IMHO आपके प्रश्न का संक्षिप्त उत्तर है: यह इस बात पर निर्भर करता है कि कौन बात कर रहा है। क्या इससे कुछ समझ में आता है?


0

डिज़ाइन पैटर्न उनके दायरे में आर्किटेक्चरल पैटर्न से भिन्न होते हैं, वे अधिक स्थानीय होते हैं, कोड आधार पर उनका प्रभाव कम होता है, वे कोड आधार के एक विशिष्ट खंड को प्रभावित करते हैं, उदाहरण के लिए:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

आर्किटेक्चरल पैटर्न का कोड बेस पर व्यापक प्रभाव पड़ता है, जो अक्सर पूरे आवेदन को या तो क्षैतिज रूप से प्रभावित करता है (यानी किसी परत के अंदर कोड को कैसे संरचना करें) या लंबवत (यानी। कैसे एक अनुरोध बाहरी परतों से आंतरिक परतों में संसाधित होता है। वापस)। आर्किटेक्चरल पैटर्न के उदाहरण: मॉडल-व्यू-कंट्रोलर, मॉडल-व्यू-व्यूमॉडल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.