रूबी, पायथन, पीएचपी बिना स्प्रिंग के कैसे मैनेज होता है?


13

मैं अपने साइड प्रोजेक्ट्स के लिए वर्क ( स्प्रिंग , हाइबरनेट, मेवेन, रैस्टसी) और PHP (CakePHP) और पाइथन (Django) में जावा एप्लिकेशन और वेब सेवाएं लिखता हूं।

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

तो, क्या डेवलपर्स को बस कसकर युग्मित घटकों और अन्य शिकायतों के साथ "डाल देना" है जो स्प्रिंग समाप्त कर देता है या क्या मुझे कुछ याद आ रहा है?

वसंत से अपरिचित लोगों के लिए, हम जिन सुविधाओं का सबसे अधिक उपयोग करते हैं, वे हैं:

  • नियंत्रण कंटेनर का उलटा: अनुप्रयोग घटकों का विन्यास और जावा वस्तुओं का जीवन चक्र प्रबंधन,

  • पहलू-उन्मुख प्रोग्रामिंग: क्रॉस-कटिंग रूटीन के कार्यान्वयन को सक्षम करता है,

  • लेनदेन प्रबंधन: कई लेनदेन प्रबंधन एपीआई को एकीकृत करता है और जावा वस्तुओं के लिए लेनदेन का समन्वय करता है।


3
यदि आप कम से कम संक्षेप में बताएं कि स्प्रिंग क्या करता है तो आपको बेहतर उत्तर मिलेंगे।
प्रति जोहानसन

4
सिर्फ इसलिए कि पायथनस्टेस जावा के buzzwords का उपयोग नहीं करते हैं, इसका मतलब यह नहीं है कि डिजाइन पैटर्न काफी अलग हैं। खैर, शायद नुकसान कम ब्लोट को छोड़कर।
वार्तेक

6
आपकी परिभाषा के साथ भी मुझे अभी भी बिल्कुल पता नहीं है कि स्प्रिंग क्या करता है।
सेवंसेकाट

और वह वसंत के साथ सबसे बड़ी शिकायतों में से एक है। इससे पहले कि मैंने जावा उद्यम विकास करना शुरू किया, मुझे इसकी कोई आवश्यकता नहीं थी।
rdasxy

मैं एक जावा डेवलपर हूं, लेकिन मैं वास्तव में, इसकी जटिलता के लिए वास्तव में वसंत को नापसंद करता हूं।
महमूद होसम

जवाबों:


15

अन्य प्लेटफार्मों को स्प्रिंग की आवश्यकता नहीं है क्योंकि वे भाषाएं जावा के रूप में प्रतिबंधक के पास कहीं भी नहीं हैं।

मैं नोड.जेएस के साथ एक उदाहरण दूंगा

  • नियंत्रण कंटेनर का व्युत्क्रम: अनुप्रयोग घटकों का विन्यास और जावा वस्तुओं का जीवन चक्र प्रबंधन

सर्वर कॉन्फ़िगरेशन या तो कोड या एक साधारण json विन्यास फाइल में किया जाता है। सामान्य IoC प्रणालियों के लिए, हमें बस उनकी आवश्यकता नहीं है, जावास्क्रिप्ट एक अभिव्यंजक और गतिशील भाषा है। हां, आपको IoC की आवश्यकता है लेकिन यह सरल है, फ़ंक्शन ऑब्जेक्ट के रूप में अपनी वस्तुओं पर निर्भरताएं पास करें।

  • पहलू-उन्मुख प्रोग्रामिंग: क्रॉस-कटिंग दिनचर्या को लागू करने में सक्षम बनाता है

मुझे नहीं लगता कि हमें ऐसा कुछ चाहिए, हम मॉड्यूलर कोड लिखते हैं और यह सिर्फ काम करता है।

  • लेनदेन प्रबंधन: कई लेनदेन प्रबंधन एपीआई को एकीकृत करता है और जावा वस्तुओं के लिए लेनदेन का समन्वय करता है

noSQL अविश्वसनीय रूप से लोकप्रिय है। लेन-देन की कोई धारणा नहीं है।

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


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

3
दूसरी वजह, अन्य भाषाओं में स्प्रिंग नहीं है क्योंकि ... उन्हें वास्तव में उपयोगी होने के लिए स्प्रिंग की आवश्यकता नहीं है ;-)
डीन हार्डिंग

7
यह कहते हुए कि आपको आईओसी, एओपी या लेन-देन प्रबंधन की आवश्यकता नहीं है, छोटी दृष्टि और गलत है। कई उच्च स्तरीय भाषाएँ आपको AOP और / या IoC डिज़ाइन सिद्धांतों का उपयोग करके आसानी से कोड लिखने की अनुमति देती हैं। यह सिर्फ इतना है कि उच्च स्तर की अधिकांश भाषाओं को उन क्षमताओं को प्रदान करने के लिए एक स्पष्ट वर्ग या कंटेनर की आवश्यकता नहीं है।
डायटबुद्ध

2
@Raynos जेनेरिक IoC सिस्टम के लिए, हमें बस उनकी आवश्यकता नहीं है, जावास्क्रिप्ट एक अभिव्यंजक और गतिशील भाषा है। यह कुछ हद तक गलत जानकारी है। आपको नहीं लगता कि आपको उनकी आवश्यकता है। coffeescripter.com/2010/08/…
हारून मैकाइवर

4
@AaronMcIver आप सही थे, हमें IoC की आवश्यकता है।
रयूनोस

15

अधिकांश उच्च स्तरीय भाषाओं में AOP और / या IoC डिज़ाइन सिद्धांतों का उपयोग करके लिखना तुच्छ है।

AOP को लागू करने के लिए आपको उच्च आदेश कार्यों का समर्थन करने के लिए भाषा की आवश्यकता है। उदाहरण के लिए:

def log(fn):
  def wrapped_fn(*a, **kw):
    logger.log(fn_formatter(fn, a, kw))
    return fn(*a, **kw)
  return wrapped_fn

@log
def do_something(my_friend):
  return have_fun_with(my_friend)

प्रोग्रामिंग करते समय आप सामान्य IoC या निर्भरता इंजेक्शन सिद्धांतों का भी पालन कर सकते हैं। आपको उस क्षमता को प्रदान करने के लिए किसी विशेष कंटेनर की आवश्यकता नहीं है। आप इस तरह से कोड लिख सकते हैं।

def etl(iextract, transformations, iload):
  return iload(itertools.imap(compose(*transformations), iextract()))

9

वैसे पायथन वसंत का आनंद भी वसंत पायथन लेता है ।

जावा विकास को आसान बनाने के लिए स्प्रिंग फ्रेमवर्क बनाया गया था और जो रूबी या पाइथन विकास के लिए जावा के विकास के लिए सही है वह आवश्यक नहीं है।

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

विडंबना यह है कि, नए जावा वेब फ्रेमवर्क Django और रेल ढांचे (उदाहरण के लिए ग्रेड और प्ले फ्रेम देखें) को पकड़ने की कोशिश कर रहे हैं।


4
ग्रेल्स जावा फ्रेमवर्क नहीं है। यह एक ग्रूवी ढांचा है। ग्रूवी जावा बाइट कोड के लिए संकलित करता है, लेकिन यह जावा नहीं है।
केविन क्लाइन

@kevincline हाँ मुझे पता है लेकिन दिन के अंत में यह JVM वेब फ्रेमवर्क (स्प्रिंग और हाइबरनेट पर निर्मित) है।
चिरोन

1
हाँ, ग्रेल्स के बारे में बड़ी बात यह है कि आपको स्प्रिंग का पता नहीं है।
केविन क्लाइन

1
@kevincline जरूरी नहीं कि सच हो। कभी-कभी आपको स्प्रिंग पर वापस आना पड़ता है और यहाँ और चीजों को
ट्विक करना

3

पायथन के लिए, ब्लूब्रीम (उर्फ ज़ोप 3) प्रदान करता है कि स्प्रिंग क्या करता है और अधिक।

जटिलता और शक्ति एक लागत पर आती है, ऐसे समय होते हैं जब आप इसे भुगतान नहीं करना चाहते हैं।

कई प्रोग्रामर ब्लूब्रीम को कठिन पाते हैं और उन्हें जो करने की आवश्यकता होती है, उसके लिए वे बहुत अधिक दुबले, छोटे टूलकिट पसंद करते हैं। अधिकांश अन्य समाधान (Django, आदि) MVC प्रतिमान पर आधारित हैं।

आप जावा स्पेस में एक्शन के साथ-साथ सुंदर प्लेफ्रामवर्क जैसी चीजों के साथ भी देख सकते हैं ।

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