मुझे यह कहना चाहिए कि मैं डैन लारोक के जवाब से बहुत असहमत हूं।
लिफ्ट अखंड नहीं है। यह असतत तत्वों पर बना है। यह J / EE तत्वों की उपेक्षा नहीं करता है, यह JNDI, JTA, JPA, आदि की पसंद का समर्थन करता है। यह तथ्य कि आप J / EE के इन तत्वों का उपयोग करने के लिए मजबूर नहीं हैं, लिफ्ट के मॉड्यूलर डिजाइन का एक मजबूत संकेत है।
- लिफ्ट का दर्शन दर्शन "डेवलपर को निर्णय लेने दें।" लिफ्ट एक टेम्प्लेटिंग तंत्र प्रदान करता है जो दृश्य में किसी भी तर्क कोड, स्कैला कोड को निष्पादित करने के आधार पर एक दृश्य तंत्र और स्काला के XML शाब्दिक और स्कैलेट पर आधारित एक दृश्य तंत्र की अनुमति नहीं देता है । यदि आप XML टेम्प्लेटिंग तंत्र चुनते हैं, तो आप चुनते हैं कि आपके व्यवसाय तर्क में कितना, यदि कोई है, तो मार्क-अप होता है। लिफ्ट के दृश्य पृथक्करण को स्प्रिंग की पेशकश की तुलना में कुछ भी मजबूत नहीं है क्योंकि आप लिफ्ट के XML टेम्प्लेट में किसी भी व्यावसायिक तर्क को व्यक्त नहीं कर सकते हैं।
- लिफ्ट की वस्तु Object दृढ़ता दर्शन "डेवलपर को निर्णय लेने दें।" लिफ़्ट में मैपर है जो एक ActiveRecord स्टाइल ऑब्जेक्ट रिलेशनल मैपर है। इसे छोटे प्रोजेक्ट्स के लिए काम मिलता है। लिफ्ट का समर्थन जेपीए। Lift में एक रिकॉर्ड एब्स्ट्रैक्शन होता है, जो NoSQL स्टोर्स में और बाहर रिलेशनल डेटाबेस में वस्तुओं को बंद करने का समर्थन करता है, (Lift में CouchDB और MongoDB के लिए मूल समर्थन शामिल है, लेकिन एडेप्टर लेयर्स कोड की कुछ सौ लाइनें हैं, इसलिए यदि आप कैसेंड्रा चाहते हैं या कुछ और, इसे पाने के लिए बहुत काम नहीं है।) मूल रूप से, वेब फ्रेमवर्क को लिफ्ट करना इस बात पर निर्भर नहीं है कि वस्तुओं को एक सत्र में कैसे व्यवस्थित किया जाता है। इसके अलावा, सत्र और अनुरोध चक्र ऐसे खुले हैं जो अनुरोध / प्रतिक्रिया चक्र में लेनदेन हुक सम्मिलित करना सरल है।
- लिफ्ट का दर्शन है "सर्वर टीम को एक भाषा को जानने की जरूरत है, न कि कई भाषाओं को।" इसका अर्थ है कि विन्यास स्काला के माध्यम से किया जाता है। इसका मतलब है कि हमें लचीले विन्यास विकल्प बनाने के लिए 40% जावा भाषा के निर्माणों को XML सिंटैक्स में लागू नहीं करना था। इसका मतलब है कि कंपाइलर सिंटैक्स और कॉन्फ़िगरेशन डेटा टाइप करता है ताकि आपको रनटाइम के दौरान कोई अजीब XML पार्सिंग या गलत डेटा न मिले। इसका मतलब यह है कि आपके पास आईडीई नहीं है जो उस एनोटेशन के विवरण को समझते हैं जो आप उस लाइब्रेरी के आधार पर उपयोग कर रहे हैं जिसका आप उपयोग कर रहे हैं।
- हां, लिफ्ट का प्रलेखन इसका मजबूत बिंदु नहीं है।
ऊपर कहा जा रहा है, मुझे लिफ्ट के डिजाइन दर्शन के बारे में कुछ बात करने दें।
मैंने Lift लिखना शुरू करने से पहले वेब फ्रेमवर्क मेनिफेस्टो लिखा । एक महान डिग्री के लिए, और इससे भी बड़ी डिग्री के लिए किसी भी अन्य वेब फ्रेमवर्क के लिए सही है जो मुझे पता है, लिफ्ट इन लक्ष्यों को पूरा करती है।
इसके मूल में लिफ्ट HTTP अनुरोध के आसपास ऑब्जेक्ट रैपर रखने के बजाय HTTP अनुरोध / प्रतिक्रिया चक्र को दूर करने का प्रयास करता है। व्यावहारिक स्तर पर, इसका मतलब है कि उपयोगकर्ता द्वारा किसी भी कार्रवाई (फॉर्म तत्वों को प्रस्तुत करना, अजाक्स, आदि को प्रस्तुत करना) को ब्राउज़र में एक GUID और सर्वर पर एक फ़ंक्शन द्वारा दर्शाया जा सकता है। जब GUID को HTTP अनुरोध के एक भाग के रूप में प्रस्तुत किया जाता है, तो फ़ंक्शन को आपूर्ति किए गए मापदंडों के साथ लागू किया जाता है (कहा जाता है)। क्योंकि GUID का पूर्वानुमान लगाना और सत्र-विशेष, रिप्ले हमलों और कई पैरामीटर से छेड़छाड़ करना मुश्किल है, क्योंकि स्प्रिंग सहित अधिकांश अन्य वेब फ्रेमवर्क की तुलना में लिफ्ट के साथ कहीं अधिक कठिन है। इसका यह भी अर्थ है कि डेवलपर्स अधिक उत्पादक हैं क्योंकि वे एक HTTP अनुरोध को पैक करने और अनपैक करने के बजाय उपयोगकर्ता कार्यों और उपयोगकर्ता कार्यों से जुड़े व्यावसायिक तर्क पर ध्यान केंद्रित कर रहे हैं।
ajaxButton("Accept", () => {request.accept.save;
SetHtml("acceptrejectspan", <span/>}) ++
ajaxButton("Reject", () => {request.reject.save;
SetHtml("acceptrejectspan", <span/>})
यह इत्ना आसान है। क्योंकि फंक्शन क्रिएट होने पर FriendRequest स्कोप में होता है, फंक्शन स्कोप के ऊपर बंद हो जाता है ... फ्रेंड रिक्वेस्ट की प्राइमरी की को एक्सपोज करने या कुछ और करने की जरूरत नहीं है ... बस बटन के टेक्स्ट को डिफाइन करें (यह स्थानीयकृत किया जा सकता है या इसे XHTML टेम्पलेट से खींचा जा सकता है या इसे स्थानीय टेम्पलेट से खींचा जा सकता है) और बटन को धकेलने पर कार्य करने के लिए फ़ंक्शन। लिफ्ट ने GUID को असाइन करने, अजाक्स कॉल (jQuery या YUI के माध्यम से स्थापित करने, और हाँ, आप अपने पसंदीदा जावास्क्रिप्ट पुस्तकालय जोड़ सकते हैं) का ध्यान रखते हैं, बैक-ऑफ़ के साथ स्वचालित रिट्रीज़ कर रहे हैं, अजाक्स अनुरोधों की कतार से कनेक्शन भुखमरी से बचते हैं, आदि।
तो, लिफ़्ट और स्प्रिंग के बीच एक बड़ा अंतर यह है कि फ़ंक्शन के साथ जुड़े GUID के लिफ़्ट के दर्शन से बहुत बेहतर सुरक्षा और बेहतर डेवलपर उत्पादकता का दोहरा लाभ होता है। GUID -> फंक्शन एसोसिएशन बहुत टिकाऊ साबित हुआ है ... वही निर्माण सामान्य रूपों, अजाक्स, धूमकेतु, मल्टी-पेज विजार्ड, आदि के लिए काम करता है।
लिफ्ट का अगला मुख्य टुकड़ा उच्च स्तर के सार को यथासंभव लंबे समय तक बनाए रखना है। पेज जनरेशन साइड पर, इसका मतलब है कि पेज को एक्सएचटीएमएल एलिमेंट्स के रूप में बनाना और रिस्पॉन्स स्ट्रीमिंग से ठीक पहले पेज को एक्सएचटीएमएल के रूप में रखना। लाभ साइट स्क्रिप्टिंग त्रुटियों को पार करने के लिए प्रतिरोध कर रहे हैं, पृष्ठ बनाने के बाद पृष्ठ के नीचे सीएसएस टैग और सिर के लिए लिपियों को स्थानांतरित करने की क्षमता, और लक्ष्य ब्राउज़र के आधार पर पृष्ठ को फिर से लिखने की क्षमता है। इनपुट साइड पर, एक सुरक्षित तरीके से उच्च-स्तरीय तरीके से पैरामीटर (क्वेरी और पथ पैरामीटर दोनों) निकालने के लिए URL को फिर से लिखा जा सकता है, अनुरोध चक्र में बहुत पहले प्रसंस्करण के लिए सुरक्षा जाँच डेटा उपलब्ध है। उदाहरण के लिए, यहाँ REST अनुरोध की सर्विसिंग को कैसे परिभाषित किया जाए:
serve {
case "api" :: "user" :: AsUser(user) :: _ XmlGet _ => <b>{user.name}</b>
case "api" :: "user" :: AsUser(user) :: _ JsonGet _ => JStr(user.name)
}
स्काला के अंतर्निहित पैटर्न मिलान का उपयोग करते हुए, हम आने वाले अनुरोध से मेल खाते हैं, पथ के तीसरे भाग को निकालते हैं और उस मूल्य से मेल खाने वाले उपयोगकर्ता को प्राप्त करते हैं, और एक्सेस कंट्रोल चेक भी लगाते हैं (क्या वर्तमान सत्र या अनुरोध में दिए गए उपयोग की अनुमति है उपयोगकर्ता रिकॉर्ड)। इसलिए, जब तक उपयोगकर्ता उदाहरण एप्लिकेशन लॉजिक को हिट करता है, तब तक इसे वीट कर दिया जाता है।
इन दो मुख्य टुकड़ों के साथ, सुरक्षा के लिहाज से लिफ्ट का जबरदस्त फायदा है। आपको लिफ्ट की सुरक्षा के परिमाण का अंदाजा लगाने के लिए जो सुविधाओं के रास्ते में नहीं मिलता है, रासमस लेर्डॉर्ग जिन्होंने याहू के लिए सुरक्षा का काम किया! फोरसक्वेयर (लिफ्ट पोस्टर-चाइल्ड साइट्स में से एक) के बारे में यह कहना था:
@Foursquare के लिए चार सितारे - थोड़ी देर में पहली साइट पर मैंने एक अच्छी तरह से देखा है कि एक भी सुरक्षा मुद्दा नहीं है (जो मुझे मिल सकता है) - http://twitter.com/rasmus/status/5929904263
उस समय, FourSquare में एक इंजीनियर था जो कोड पर काम कर रहा था (यह नहीं कि @harryh एक सुपर-जीनियस नहीं है) और उसका मुख्य ध्यान साप्ताहिक ट्रैफ़िक दोहरीकरण के साथ मुकाबला करते हुए FourSquare के PHP संस्करण को फिर से लिखना था।
Lift के सुरक्षा फ़ोकस का अंतिम भाग SiteMap है। यह एक एकीकृत अभिगम नियंत्रण, साइट नेविगेशन और मेनू प्रणाली है। डेवलपर Scala कोड (जैसे If(User.loggedIn _)
या If(User.superUser _)
) का उपयोग करके प्रत्येक पृष्ठ के लिए एक्सेस कंट्रोल नियमों को परिभाषित करता है और किसी भी पेज रेंडरिंग शुरू होने से पहले उन एक्सेस कंट्रोल नियमों को लागू किया जाता है। यह स्प्रिंग सिक्योरिटी की तरह है, सिवाय इसके कि यह प्रोजेक्ट की शुरुआत से बेक किया गया है और एक्सेस कंट्रोल रूल्स बाकी एप्लिकेशन के साथ एकीकृत हैं, इसलिए URL के समय आपको एक्सएमएल में सुरक्षा नियमों को अपडेट करने की प्रक्रिया नहीं करनी होगी। परिवर्तन या पहुंच नियंत्रण की गणना करने वाले तरीके।
अब तक संक्षेप में, लिफ्ट के डिजाइन दर्शन आपको एक्सेस कंट्रोल में पके हुए, OWASP शीर्ष 10 सुरक्षा कमजोरियों के प्रतिरोध, बहुत बेहतर अजाक्स समर्थन और स्प्रिंग की तुलना में बहुत अधिक डेवलपर उत्पादकता का लाभ देता है।
लेकिन लिफ्ट आपको आसपास किसी भी वेब फ्रेमवर्क का सबसे अच्छा धूमकेतु समर्थन भी देती है। इसीलिए नोवेल ने अपने पल्स प्रोडक्ट को पावर देने के लिए लिफ्ट को चुना और यहाँ पर नोवेल का क्या कहना है लिफ्ट के बारे में:
लिफ्ट एक तरह का वेब फ्रेमवर्क है जो आपको एक डेवलपर के रूप में बड़ी तस्वीर पर ध्यान केंद्रित करने में सक्षम बनाता है। अंतर्निहित धूमकेतु समर्थन जैसी मजबूत, अभिव्यंजक टाइपिंग और उच्च-स्तरीय विशेषताएं आपको प्लंबिंग के बजाय नवाचार पर ध्यान केंद्रित करने की अनुमति देती हैं। नोवेल पल्स जैसे समृद्ध, वास्तविक समय के वेब एप्लिकेशन के निर्माण के लिए कवर के तहत लिफ्ट की शक्ति के साथ एक रूपरेखा की आवश्यकता होती है।
इसलिए, लिफ्ट केवल एक और भी एमवीसी ढांचा नहीं है। यह एक ऐसा ढांचा है जिसके पीछे कुछ मुख्य डिजाइन सिद्धांत मिले हैं जो बहुत अच्छी तरह से परिपक्व हुए हैं। यह एक ढांचा है जो सुरक्षा और डेवलपर उत्पादकता के दोहरे लाभ देता है। लिफ्ट एक ढांचा है जो परतों में बनाया गया है और डेवलपर को उनकी जरूरतों के आधार पर सही विकल्प देता है ... दृश्य पीढ़ी के लिए विकल्प, दृढ़ता के लिए विकल्प आदि।
स्काला और लिफ्ट डेवलपर्स को एक्सएमएल, एनोटेशन, और अन्य मुहावरों की तुलना में बहुत बेहतर अनुभव देती है जो स्प्रिंग बनाते हैं।