2008-10-16 16 views
9

किसी वेब साइट व्यापार परत में स्थाई विधियों का उपयोग करने के लिए डाउनसाइड्स क्या हैं जो कक्षा को तुरंत चालू करते हैं और फिर कक्षा पर एक विधि बुलाते हैं? किसी भी तरह से प्रदर्शन हिट क्या हैं?स्थैतिक तरीकों के लिए डाउनसाइड्स क्या हैं?

उत्तर

12

प्रदर्शन अंतर नगण्य होगा।

एक स्थिर विधि का उपयोग करने का नकारात्मक पक्ष यह है कि यह कम परीक्षण योग्य हो जाता है। जब स्थैतिक विधि कॉल में निर्भरता व्यक्त की जाती है, तो आप उन निर्भरताओं को मोक्स/स्टब्स से प्रतिस्थापित नहीं कर सकते हैं। यदि सभी निर्भरताओं को इंटरफेस के रूप में व्यक्त किया जाता है, जहां कार्यान्वयन घटक में पारित किया जाता है, तो आप यूनिट परीक्षणों के लिए घटक के एक नकली/स्टब संस्करण का उपयोग कर सकते हैं, और फिर वास्तविक कार्यान्वयन (संभवतः एक आईओसी कंटेनर के साथ झुका हुआ) असली के लिए तैनाती।

+0

यह निर्भर करता है की तरह हैं। सिस्टम.माथ स्थैतिक वर्ग यह अपेक्षाकृत कम प्रतीत नहीं होता है कि यह गैर स्थैतिक था। क्या मैं गलत हूँ, जॉन? –

+2

यह नहीं है कि स्थैतिक विधि स्वयं परीक्षण योग्य नहीं है - यह है कि * स्थिर विधियों का उपयोग * चीजें टेस्टेबल नहीं हैं, क्योंकि आप स्थिर विधि के कार्यान्वयन को सरल के साथ प्रतिस्थापित नहीं कर सकते हैं। उदाहरण के लिए, यदि विधि डेटाबेस को हिट करती है, तो आपका परीक्षण भी होगा। –

0

यदि विधि स्थिर डेटा का उपयोग करती है, तो यह वास्तव में आपके वेब एप्लिकेशन के सभी उपयोगकर्ताओं के बीच साझा की जाएगी।

कोड केवल, सभी प्रणालियों में स्थिर तरीकों के साथ सामान्य मुद्दों से परे कोई वास्तविक समस्या नहीं है।

3

जॉन स्कीट सही है - प्रदर्शन अंतर नगण्य होगा ...

कहा करने के बाद कि, यदि आप एक उद्यम आवेदन का निर्माण कर रहे हैं, मैं पारंपरिक स्तरीय दृष्टिकोण माइक्रोसॉफ्ट द्वारा समर्थन किया और के एक नंबर का उपयोग कर सुझाव है अन्य सॉफ्टवेयर कंपनियों। मुझे संक्षेप में समझाएं:

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

आपके आवेदन की प्रस्तुति परत में प्रदर्शन के लिए एएसपी.नेट एएसपीएक्स पेज और "प्रक्रिया नियंत्रण" के लिए एएसपी.नेट कोड-बैक शामिल होंगे। जब मैं सबमिट करता हूं तो क्या होता है इसके बारे में बात करने का यह एक शानदार तरीका है। क्या मैं दूसरे पेज पर जाता हूं? क्या सत्यापन है? क्या मुझे डेटाबेस में जानकारी सहेजने की ज़रूरत है? उसके बाद मैं कहां जाऊं?

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

उपरोक्त विधियों प्रक्रिया नियंत्रण परत से कहा जाता हो, वे व्यापार ऑब्जेक्ट (उदा, ग्राहक, चालान, भुगतान, आदि) के सभी इन्स्टेन्शियशन संभाल और उचित व्यापार के नियम लागू होंगे।

आपकी व्यावसायिक वस्तुएं आपकी डेटा परत के साथ सभी डेटाबेस इंटरैक्शन को संभालने वाली हैं। यही है, वे जानते हैं कि उनके पास मौजूद डेटा को कैसे सहेजना है ... यह एमवीसी पैटर्न के समान है।

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

आशा है कि इससे थोड़ा सा मदद मिलेगी ।

3

प्रदर्शन बुद्धिमान, स्थिर तरीकों का उपयोग कर ऑब्जेक्ट निर्माण/विनाश के भूमि के ऊपर से बचा जाता है। यह आमतौर पर गैर महत्वपूर्ण है।

इन्हें केवल तभी उपयोग किया जाना चाहिए जहां विधि की विधि राज्य से संबंधित नहीं है, उदाहरण के लिए, कारखाने के तरीकों के लिए। यह कोई मतलब होता है सिर्फ एक और वस्तु दृष्टान्त का दृष्टांत को :-)

String.Format (एक वस्तु उदाहरण बनाने के लिए), TryParse() और पार्स() पद्धतियों जब एक स्थिर विधि समझ में आता है के सभी अच्छे उदाहरण हैं । वे हमेशा एक ही काम करते हैं, राज्य की आवश्यकता नहीं होती है और काफी आम हैं इसलिए इंस्टेंसिंग कम समझ में आता है।

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

+1

"किसी अन्य ऑब्जेक्ट इंस्टेंस को तुरंत चालू करने के लिए ऑब्जेक्ट इंस्टेंस बनाने के लिए कोई अर्थ नहीं होगा :-)" - अगर आपको किसी को किसी मज़ेदार/प्लग करने योग्य तरीके से किसी निश्चित प्रकार के उदाहरण बनाने का तरीका बताया जाता है। वह फैक्टरी पैटर्न है। –

+0

मैं कारखाने विधि पैटर्न के बारे में बात कर रहा हूं ... –

0
  1. Testability: स्थिर निर्भरता कम परीक्षण योग्य हैं
  2. थ्रेडिंग: आप संगामिति समस्याएं हो सकती
  3. डिजाइन: स्थैतिक चर वैश्विक चर
संबंधित मुद्दे

 संबंधित मुद्दे