2012-02-09 35 views
21

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

पहली चीजें पहले, मैंने निर्णय लिया है कि स्कैला सर्वर-साइड भाषा होगी। मेरे पास मेरे कारण हैं, और यह XYZ पोस्ट बनाम स्कैला नहीं है - वह विकल्प बनाया गया है। मैंने इस तथ्य को भी सफल कर दिया है कि हम क्लाउड में वेब पर हैं, इसलिए मैं जावास्क्रिप्ट से कोशिश करने और दूर जाने के लिए भी नहीं जा रहा हूं। शायद मैं कॉफीस्क्रिप्ट के साथ करूंगा, लेकिन मैं ब्राउज़र-होस्टेड कोड लिखूंगा।

अब, स्कैला मानते हुए, अधिकांश लोग शायद Play! या Lift पर कूदेंगे। शायद खेलें! इसे endorsement from Typesafe दिया गया है, लेकिन मुझे लगता है कि मेरे पास एक और महत्वपूर्ण सवाल है जिसे पहले जवाब देने की आवश्यकता है। आर्किटेक्चर क्या है? अगर मैं एक बहुत समृद्ध ग्राहक चाहता हूं, तो क्या मुझे वास्तव में इस तथ्य के आधार पर एक साधारण स्टेटलेस सेवा परत से अधिक की आवश्यकता है कि हमारे पास जावास्क्रिप्ट का एक टन होगा? मुझे यकीन नहीं है कि यह एक सिंगल पेज वेबपैप होगा, लेकिन BlueEyes की तरह कुछ सही विकल्प है? लिफ्ट और प्ले! वे अधिक हेवीवेट हैं कि वे अधिक ज़िम्मेदारी लेते हैं। वे HTML उत्पन्न करते हैं और इन ढांचे के लिए, ब्राउज़र बहुत गूंगा है। रूटिंग, सत्यापन, अजाक्स और धूमकेतु समर्थन जैसी चीजें सभी सर्वर-साइड चिंताओं हैं। चूंकि ब्राउजर आज अधिक सक्षम है, इसलिए समृद्ध, इंटरैक्टिव फीचर्स सामान्य रूप से सर्वर से जावास्क्रिप्ट उत्पन्न और इंजेक्शन द्वारा कार्यान्वित किए जाते हैं।

मेरा प्रश्न इस पर उबलता है। क्या मैं पारंपरिक लिफ्ट/प्ले के साथ जाता हूं! ढांचा जहां सर्वर क्लाइंट और सर्वर ज़िम्मेदारी दोनों पर लेता है या क्या मैं एक समृद्ध ग्राहक + रीस्ट-स्टाइल सेवा परत के साथ जाता हूं जहां ग्राहक आवेदन में एक और प्रमुख भूमिका निभाता है? एक आर्किटेक्चर जहां क्लाइंट रूटिंग, सत्यापन, बाध्यकारी इत्यादि से संबंधित है। मैं KnockOut.js, Sammy.js, Sproutcore, Sproutcore, Backbone.js, जैसे फ्रेमवर्क देख रहा हूं ... ... मैं उन सभी को सूचीबद्ध करने के लिए पर्याप्त नहीं हूं लेकिन यह कहने के लिए पर्याप्त है कि वे सभी क्लाइंट-साइड परिप्रेक्ष्य से इनमें से कुछ ढांचे की विशेषताएं।

यदि मैं Play चुनता हूं !, क्या मैं उस समृद्ध यूआई को छोड़ रहा हूं? उन स्थितियों के बारे में क्या है जहां मैं एकीकरण/मैशप/मोबाइल उद्देश्यों के लिए सेवा API प्रदान करना चाहता हूं? कैसे खेलेंगे! मेरी मदद करो? स्पष्ट रूप से ब्लूईस यहाँ अच्छी तरह से खेलता है। मुझे लगता है कि मुझे एक सेवा परत की परवाह किए बिना चाहिए।

यदि मैं ब्लूईस चुनता हूं, तो मेरा ग्राहक कोड कैसा दिखता है? इनमें से कितने जावास्क्रिप्ट-आधारित ढांचे को मुझे मुझे देने की ज़रूरत है? मैं अभी भी अपनी सेवा परत में अपने अधिकांश व्यवसाय-तर्क चाहता हूं, लेकिन रूटिंग, बाध्यकारी .. सभी यूआई सामान क्लाइंट की चिंता होगी।

मुझे यकीन नहीं है कि कोई सही या गलत जवाब है, लेकिन मुझे लगता है कि यह समुदाय शायद मुझे सही दिशा में इंगित कर सकता है।

मैं भी http://www.andyczerwonka.com/picking-a-web-technology-isnt-as-easy-as-it-u-45228

+0

आपको स्कैला से बाहर नहीं रखना है, लेकिन आपको [हास्केल और यसोड] (http://www.yesodweb.com/) पसंद आएगा। यसोड स्पष्ट रूप से बहुत ही भरोसेमंद है। –

उत्तर

4

Play 2.0 बीटा में नमूना अनुप्रयोग है जो आप ढूंढ रहे हैं (जेनकंटैक्ट्स)। इसका सर्वर पक्ष केवल समृद्ध इंटरफ़ेस का एक गुच्छा है, जबकि इसके ग्राहक पक्ष एक समृद्ध उपयोगकर्ता इंटरफ़ेस बनाने के लिए कॉफ़ीस्क्रिप्ट आदि का लाभ उठाते हैं।

+0

अच्छा। मैं एक बार नजर डालूँगा। वही हो सकता है जो मैं ढूंढ रहा हूं। – andyczerwonka

+0

ऐप का कहना है कि मॉडल और क्लाइंट-साइड टेम्पलेट्स बैकबोन कोड से गायब हैं, और वास्तविक जीवन में इसकी अनुशंसा नहीं की जाती है। फिर zentasks की वास्तुकला एक अनुशंसित एक समग्र है? अन्यथा Play में हमें विचारों और मॉडलों की आवश्यकता क्यों होगी? – Alexy

+0

मैं सामने के अंत के लिए AngularJS पर बस गया – andyczerwonka

4

जहाँ तक मुझे पता है, दोनों खेलते हैं पर अपने ब्लॉग पर इस पोस्ट! और लिफ्ट का मूल रूप से "बैक एंड" के रूप में उपयोग किया जा सकता है, और आप अपने "फ्रंट एंड" के रूप में HTML5 + CSS + JS का उपयोग कर सकते हैं; वे आपकी इच्छा के सामने वाले अंत को बनाने की अपनी क्षमता को जरूरी नहीं रखते हैं, इसलिए उस कारण से उन्हें अस्वीकार करना मूर्खतापूर्ण होगा। नोटॉक चीजें जैसे knockout.js विज्ञापन दें कि वे "किसी भी वेब ढांचे के साथ काम करते हैं"। हालांकि, यह सच हो सकता है कि आपको जो चाहिए वह उससे अधिक "हेवीवेट" हैं।

मैंने कभी ब्लूईस के बारे में कभी नहीं सुना है, लेकिन ऐसा लगता है कि यह किसी विशेष प्रकार के उपयोग के मामले में है। यदि यह आपके बिल को फिट करता है, तो यह शायद आपकी समस्या का सबसे सुव्यवस्थित समाधान होगा।

लेकिन अगर ऐसा कुछ है जो आप वास्तव में वेब पर डालने की योजना बनाते हैं, तो "रूटिंग, सत्यापन, बाध्यकारी, आदि" व्यावहारिक रूप से को पीछे की ओर से संभालने के लिए की आवश्यकता है; मैं बस इन चीजों में से किसी एक (सुरक्षित रूप से) कोड द्वारा संभाला जा सकता है जो क्लाइंट के ब्राउज़र में चलता है। साथ ही, यदि आपके उपयोगकर्ता जावास्क्रिप्ट को अक्षम करना चुनते हैं, तो आपकी वेबसाइट पूरी तरह से अनुपयोगी होगी।

+0

हां, ज़ाहिर है, इस तरह इस्तेमाल किया जा सकता है। लिफ्ट में आराम सहायक हैं जो आपको JSON सेवाओं की सेवा करने की अनुमति देते हैं, लेकिन यह प्राथमिक उपयोग केस नहीं है। लिफ्ट के लिए प्राथमिक उपयोग केस एक-स्टॉप शॉप वेब फ्रेमवर्क है, यह एक डिफ़ॉल्ट के रूप में jQuery और ब्लूप्रिंट भी मानता है, क्योंकि यह आप किसी अन्य चीज़ पर निर्भर नहीं होना चाहते हैं। मुझे यकीन नहीं है कि नई समृद्ध-ग्राहक दुनिया में सर्वर-साइड फ्रेमवर्क का काम है। निश्चित नहीं। – andyczerwonka

+2

जावास्क्रिप्ट को अक्षम करने के बारे में आपकी आखिरी टिप्पणी - यदि उपयोगकर्ता ऐसा करते हैं तो वे न केवल मेरे एप्लिकेशन को अक्षम कर रहे हैं, वे इंटरनेट को अक्षम कर रहे हैं। – andyczerwonka

+0

"नई समृद्ध-ग्राहक दुनिया में" :) हम स्पष्ट रूप से हमेशा के लिए "क्लाउड/पतली ग्राहक" और "रिच क्लाइंट/न्यूनतम बैकएंड" के बीच बोबिंग करेंगे। वैसे भी, मैं काफी हद तक निश्चित हूं कि लिफ्ट, प्ले, और शायद ब्लूईज भी आपके रास्ते में बिना पहुंचने के तरीके में उपयोग करने के लिए पर्याप्त लचीलापन प्रदान करते हैं। ढांचे की अधिकांश निफ्टी और ढांचे की शक्ति आपके प्रोजेक्ट के लिए अनावश्यक होगी, लेकिन इसका मतलब यह नहीं है कि उन ढांचे का उपयोग करना एक बुरा विचार है। –

18

यदि आप चाहते हैं कि बैकएंड पर एक आरईएसटी एपीआई है, तो लिफ्ट, प्ले! या ब्लूए ठीक काम करेगा। लेकिन मैं सिर्फ लिफ्ट का उपयोग करने के फायदे बताऊंगा।

  1. यह सच नहीं है कि लिफ्ट दोनों आगे और पीछे के अंत को लागू करने की कोशिश करता है। हम लिफ्ट के केवल आरईएसटी उपयोग का समर्थन करते हैं और यह सही परियोजना के लिए प्रोत्साहित है।
  2. जबकि लिफ्ट jQuery और ब्लूप्रिंट के साथ आता है, आप किसी भी जावास्क्रिप्ट लाइब्रेरी और सीएसएस फ्रेमवर्क का उपयोग कर सकते हैं, वर्तमान में मेलिंग सूची पर बहुत से लोग दिखाते हैं कि वे लिफ्ट के साथ ट्विटर बूस्टर का उपयोग कैसे करते हैं। यह Lift module देखें जो बूटस्ट्रैप को एकीकृत करने में मदद करता है।
  3. लिफ्ट के साथ, आप स्टेटलेस शुरू कर सकते हैं, और अगर आपको लगता है कि आपकी ज़रूरतें बदलती हैं, तो आप राज्य भर सकते हैं। आप उन्हें उसी एप्लिकेशन पर भी मिश्रण और मिलान कर सकते हैं।
  4. कुछ आधुनिक दिखने वाले यूआई चाहते हैं? लिफ्ट का धूमकेतु समर्थन एक है, अगर सबसे अच्छा नहीं है, तो वहां बाहर। कई ब्राउज़रों/वर्कलोड पर उपयोग, साबित और परीक्षण करने के लिए बहुत आसान है। मैंने several posts लिफ्ट के धूमकेतु समर्थन को प्रदर्शित किया है।
  5. यदि आप फ्रंट और बैक एंड दोनों के लिए लिफ्ट का उपयोग करने का निर्णय लेते हैं, तो आप डिफ़ॉल्ट रूप से सुरक्षित एक एप्लिकेशन प्राप्त कर सकते हैं, xss, xsrf, या शीर्ष 10 OWASP सुरक्षा भेद्यता के बारे में चिंता करने की आवश्यकता नहीं है।
  6. वाणिज्यिक सहायता की आवश्यकता है, एक बढ़ती हुई सूची here
  7. प्रशिक्षण की आवश्यकता है? लंदन में Basic training आ रहा है और लिफ्ट के संस्थापक भी अन्य प्रशिक्षण सत्र प्रदान करते हैं।
  8. लिफ्ट के बारे में कई किताबें उपलब्ध हैं। Lift in Action, Simply Lift और Exploring Lift
  9. मदद करने के लिए तैयार एक बहुत ही सक्रिय community है।
  10. लिफ्ट का उपयोग कौन करता है? बस कुछ नाम: Foursquare, OpenStudy, The Guardian UK, StackMob और कई अन्य।

ठीक है, मुझे यहां रुकना चाहिए, लेकिन संक्षेप में, लिफ्ट एक शानदार ढांचा है जिसमें बहुत कुछ है, आप जितना चाहें उतना ही कम लेते हैं।

+0

मैं कुछ वर्षों से लिफ्ट समुदाय का हिस्सा रहा हूं और इसके साथ कुछ चीजें बनाई हैं। मैं परिचित हूं, और सहमत हूं कि यह मेरे उपयोग के मामले को संभालने में सक्षम है। सवाल यह है कि मैं कितना उपयोग करता हूं। – andyczerwonka

+0

यदि आप केवल एक आरईएसटी एपीआई की आवश्यकता है, तो लिफ्ट रास्ते में नहीं होगा, आप बस इसे एक साथ रखकर RestHelper को विस्तारित करते हैं और आप दूर जाते हैं, आपको साइटमैप, धूमकेतु, AJAX, कुछ भी के बारे में चिंता करने की ज़रूरत नहीं है। तो यह हेवीवेट महसूस नहीं करता है, या आप इसका क्या मतलब है "मैं इसका कितना उपयोग करता हूं?" – fmpwizard

+0

हाँ, यह उचित है। – andyczerwonka

2

यदि मैं Play चुनता हूं !, क्या मैं उस समृद्ध यूआई को छोड़ रहा हूं?

समृद्ध यूआई द्वारा आपका क्या मतलब है? अग्रभाग पर अधिक जावास्क्रिप्ट?

यदि आप एक समृद्ध यूआई के रूप में - HTML5 + CSS3 + jQuery पर विचार करते हैं - तो ये किसी भी "बैकएंड" (लिफ्ट/प्ले) के साथ बहुत अच्छी तरह से काम करते हैं।

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

एचटीएमएल 5 की ओर झुकाव + CSS3 + jQuery + प्ले 2.0 :)

सिर्फ मेरे विचार ..

+0

Play 2.0 में अभी भी कितना आसान और शक्तिशाली लिफ्ट है, अभी भी विकसित किया जा रहा है, बग को हर दिन तय किया जा रहा है और पूर्ण दस्तावेज की कमी है। यह प्ले 1.0 के रूप में * परिपक्व * नहीं है, भले ही प्ले 1.0 में स्केल समर्थन कम हो। –

+0

मैं सहमत हूं - मैं मास्टर से खींच रहा हूं और मैं इसे प्रथम श्रेणी का अनुभव कर रहा हूं! :-) – andyczerwonka

0

वास्तुकला क्या है?

Play! दृढ़ता से एक MVC वास्तुकला का उपयोग करने के लिए एक मानक पैटर्न में संकुल बनाने के लिए अपने सर्वर को प्रोत्साहित करती है:

app/ 
    controllers/ 
    Application.scala 
    views/ 
    Application/ 
     index.scala.html 
    models/ 
public/ 
    images/ 
    stylesheets/ 
    javascripts/ 

इससे यह तोड़ने के लिए की तुलना में वास्तुकला का पालन करने में आता है।

मैं लिफ्ट या ब्लूईस के लिए बात नहीं कर सकता, लेकिन उनमें से कोई भी वास्तुकला को दृढ़ता से प्रोत्साहित नहीं करता है।

+0

मैं कहूंगा कि लिफ्ट टूल्स का एक बैग है। सही टीम और सही समस्या के लिए यह बढ़िया है। BlueEyes वास्तव में तुलना नहीं करता है कि यह HTTP अनुरोधों की सेवा करने पर बहुत केंद्रित है और उपभोक्ता के रूप में कोई धारणा नहीं करता है। – andyczerwonka

+0

मैं वास्तव में एमवीसी (प्ले!) बनाम व्यू-फर्स्ट (लिफ्ट) के बारे में नहीं पूछ रहा हूं, मुझे अधिक दिलचस्पी है कि सर्वर क्लाइंट-साइड चिंताओं में कितना भाग लेता है। – andyczerwonka

+0

उस स्थिति में, आपके द्वारा सूचीबद्ध ढांचे में से कोई भी क्लाइंट-साइड आर्किटेक्चर पर कोई प्रभाव नहीं होना चाहिए। –

0

निश्चित रूप से yiir दिमाग बनाने से पहले http://twitter.github.com/finagle पर एक नज़र डालें। Finagle आपकी अधिकांश बैकएंड सामान का ख्याल रख सकता है। यह एक बहुत ही लचीली वास्तुकला के आसपास desinged है जो फिल्टर का उपयोग कर चतुरता से चिंताओं को अलग करता है।

+0

कूल, धन्यवाद, बहुत रोचक। मैंने पहले इसमें भाग लिया है, लेकिन कभी गोता नहीं किया। ब्लूएयस के समान लगता है (वे दोनों नेटटी के शीर्ष पर बने हैं), लेकिन ब्लूइयस केवल HTTP है, इसलिए फिनगेल अब भी अमूर्त पेड़ को आगे बढ़ा रहा है। [HTTP सर्वर उदाहरण] (https://github.com/twitter/finagle/blob/master/finagle-example/src/main/scala/com/twitter/finagle/example/http/HttpServer.scala) अविश्वसनीय रूप से समान लगता है ब्लूएयस के लिए। – andyczerwonka

0

मैंने अपाचे क्लिक, विकेट, थोड़ी सी लिफ्ट (विकेट की तरह थोड़ा महसूस किया) देखा है, और फिर 1.2.4 खेलते हैं। Play के साथ अब तक इतना अच्छा है। वेब विकास के लिए वास्तव में सुंदर दृष्टिकोण। अच्छा काम जारी रखें, खेलें! टीम।