design patterns - Infrastructure: models as an external to an application to avoid stored procedures -


मेरा विचार:

मैं विभिन्न कारणों से संग्रहित प्रक्रियाओं को तुच्छ जानता हूं: लागत, स्केलेबिलिटी, और संगतता।

  • लागत: मुझे एक अच्छा माइस् SQL सर्वर की लागत के लिए 2-3 अच्छा हल्के वजन वाले वेब अनुप्रयोग सर्वर मिल सकते हैं।

  • स्केलेबिलिटी: यकीन है कि मैं क्वेरी परिणामों को कैश कर सकता हूं, लेकिन जब मैं संग्रहीत कार्यविधियों का उपयोग कर रहा हूं तो मुझे कैश की जा सकने वाली किसी भी बेहतर ग्रैन्यूलरिटी का मौका खो देता है और इससे हमेशा अनुप्रयोगों का उपयोग करने के लिए संबंधों का इस्तेमाल होता है MySQL (जो कि संग्रहीत प्रक्रियाओं को फिर से लिखने के लिए MySQL से कुछ और करने के लिए धन मिला है?)

  • संगतता: कुछ बिंदु पर list_foo_widgetsByUser () संग्रहीत कार्यविधि की आवश्यकता के अनुसार फिट नहीं हो सकता ग्राहक # 123 यह list_foo_widgetByUser () के हस्ताक्षर को संशोधित करने के लिए आत्मघाती होगा ... तो फिर मुझे एक नया sproc cl123_list_foo_widgetByUser () लिखना होगा और इस तरह से मादा या एक घृणित डीबीए की ओर जाता है।

  • मेरा समाधान:

    मॉडलों को एप्लिकेशन के रिपॉजिटरी से बाहर निकाल कर उन्हें बाहरी रेपो में डाल दिया। प्रत्येक आवेदन के बाद एक मॉडल / बेस उपनिर्देशिका होगी जो बाहरी भंडार को इंगित करता था। फिर GetModel ("FooWidgets") की तरह सामने एक साधारण कारखाना विधि डालें जो या तो baseFooWidget वर्ग को एक उदाहरण या एक एप्लिकेशन विशिष्ट बाल उदाहरण के रूप में वापस करेगा। इससे अलग-अलग अनुप्रयोगों को फूविजेट के वर्ग का मालिकाना हो सकता है या कुछ उपकरण जैसे लिक्विबेस के साथ मिलकर कामयाब हो सकता है, इससे अधिकता के एक बड़े आधार की अनुमति मिलती है।

    मेरे सिर के पीछे की आवाज कहते हैं यह बहुत आसान है ... क्या है मैं यहां लापता हूं? संदर्भ: मुझे पता है कि PHP Kohana ढांचे को इन पंक्तियों के साथ कुछ काम करता है ताकि एप्लिकेशन डिजाइनर को Kohana के आधार लाइब्रेरी को अतिरिक्त कार्यप्रणाली के साथ लपेट दें और अगर PHP ऐसा कर सकता है, तो मैं ' किसी भी अन्य भाषा में कोई समस्या नहीं है।

यह संग्रहित प्रक्रियाओं से छुटकारा पाने के लिए एक उत्कृष्ट विचार है, आप अपने तीन बिंदुओं के साथ बिल्कुल नाखून मारा।

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

  1. नीचे: डेटाबेस। बस तालिकाओं, संबंधों और यही।
  2. फिर आपको मैपिंग की आवश्यकता है: साधारण टेबल जो आपकी टेबल का प्रतिनिधित्व करते हैं प्रति तालिका में आम तौर पर एक ऑब्जेक्ट।
  3. अगला, इन ऑब्जेक्ट्स से निपटने के लिए आपको तरीकों की आवश्यकता है। अधिकांश तालिकाओं को "सभी प्राप्त करें", "आईडी से प्राप्त करें" और "सहेजना" के तरीकों की आवश्यकता होगी आदर्श रूप से, ये एक अलग मॉड्यूल में जाते हैं, इसलिए मैपिंग को बदलने की आवश्यकता के बिना इसे विकसित किया जा सकता है।
  4. अंत में, आपको अपने व्यावसायिक तर्क की आवश्यकता होती है, जो एक अलग परत या आपके ऐप्लिकेशन में जा सकती है।

यह एक सरलीकृत अवलोकन है मुझे नहीं पता कि क्या आप अपने समाधान के साथ इसका मतलब है, लेकिन यह आमतौर पर जिस तरह से चला जाता है: चिंताओं को अलग करना यदि आप डेटाबेस बदलते हैं, तो आपको केवल मैपिंग को बदलना होगा। यदि आपको अलग-अलग परिणाम सेट की आवश्यकता है, तो आप केवल ऐक्सेस लेयर को बदल सकते हैं।

उपकरण जो आपको इस प्रक्रिया में मदद कर सकते हैं सीतनिद्रा में होना (लेकिन तब आपको जावाब्रिज की आवश्यकता है), यह ORM उपकरण है पसंद का, लेकिन एक बहुत अधिक सीखने की अवस्था है। PHP के लिए, ऐसा लगता है कि सिद्धांत आपके लिए बहुत कुछ कर सकता है अन्य उपकरण भी मौजूद हैं आदर्श रूप से, एक उपकरण roundtrip इंजीनियरिंग की अनुमति देता है: यदि आप कुछ बदलते हैं, तो आप उपकरण फिर से चलाते हैं (या कुछ बदल सकते हैं) और आप एप्लिकेशन को नहीं तोड़ते हैं।


Comments

Popular posts from this blog

asp.net - Javascript/DOM Why is does my form not support submit()? -

sockets - Delphi: TTcpServer, connection reset when reading -

javascript - Classic ASP "ExecuteGlobal" statement acting differently on two servers -