আমি বলতে চাই যে আমি ড্যান লরোকের উত্তরটির সাথে দৃ strongly়ভাবে একমত নই।
লিফট একতরফা হয় না। এটি বিযুক্ত উপাদানগুলির উপর রচিত। এটি জে / ই ই উপাদানগুলিকে অগ্রাহ্য করে না, এটি জেএনডিআই, জেটিএ, জেপিএ ইত্যাদির পছন্দকে সমর্থন করে The আপনি জে / ইই এর এই উপাদানগুলি ব্যবহার করতে বাধ্য হন না এই বিষয়টি লিফটের মডুলার ডিজাইনের একটি দৃ strong় ইঙ্গিত।
- লিফ্টের দর্শন দর্শনটি "বিকাশকারীকে সিদ্ধান্ত নিতে দিন।" লিফ্ট এমন একটি টেম্প্লেটিং মেকানিজম সরবরাহ করে যা ভিউতে কোনও লজিক কোড মঞ্জুরি দেয় না, স্কাল কোড এবং স্কালার এক্সএমএল লিটারালগুলি নির্বাহের উপর ভিত্তি করে একটি ভিউ মেকানিজম এবং স্কালেটের উপর ভিত্তি করে একটি দৃশ্য প্রক্রিয়া সরবরাহ করে । আপনি যদি এক্সএমএল টেম্প্লেটিং মেকানিজমটি চয়ন করেন, তবে আপনি চয়ন করেন যে আপনার ব্যবসায়িক যুক্তিতে মার্কস আপ কতটা, যদি কোনও হয়। লিফ্টের ভিউ বিচ্ছেদটি স্প্রিংয়ের যে কোনও কিছুর চেয়ে শক্তিশালী কারণ আপনি লিফ্টের এক্সএমএল টেম্পলেটগুলিতে কোনও ব্যবসায়িক যুক্তি প্রকাশ করতে পারবেন না।
- লিফটের অবজেক্ট ↔ অধ্যবসায় দর্শনটি "বিকাশকারীকে সিদ্ধান্ত নিতে দিন।" লিফ্টে ম্যাপার রয়েছে যা একটি অ্যাক্টিভেকর্ড স্টাইল অবজেক্ট রিলেশনাল ম্যাপার। এটি ছোট প্রকল্পগুলির জন্য কাজ সম্পন্ন করে। লিফট সমর্থন জেপিএ। লিফ্টের একটি রেকর্ড বিমূর্ততা রয়েছে যা নোএসকিউএল স্টোরগুলিতে এবং বাইরে রিলেশনাল ডাটাবেসগুলিতে এবং বাইরে শাটলিং অবজেক্টগুলিকে সমর্থন করে (লিফ্টটি কাউচডিবি এবং মঙ্গোডিবি-র জন্য স্থানীয় সমর্থন অন্তর্ভুক্ত করে, তবে অ্যাডাপ্টার স্তরগুলি কয়েকশ লাইন কোডের হয়, তাই আপনি যদি ক্যাসান্দ্রা চান বা অন্য কিছু, এটি পাওয়ার জন্য খুব বেশি কাজ নয়)) মূলত, কীভাবে একটি সেশনে বস্তুগুলিকে বাস্তবায়ন করা যায় তার উপর ওয়েব ফ্রেমওয়ার্কের কোনও নির্ভরতা নেই। অধিকন্তু, সেশন এবং অনুরোধ চক্রগুলি যেমন অনুরোধ / প্রতিক্রিয়া চক্রের মধ্যে লেনদেন হুক সন্নিবেশ করা সহজ open
- লিফ্টের দর্শন "সার্ভার টিমের একাধিক ভাষা নয়, একটি ভাষা জানা দরকার।" এর অর্থ হল স্কালার মাধ্যমে কনফিগারেশন সম্পন্ন হয়েছে। এর অর্থ হল যে নমনীয় কনফিগারেশন বিকল্পগুলি তৈরি করতে আমাদের জাভির 40% ভাষা নির্মান এক্সএমএল সিনট্যাক্সে প্রয়োগ করতে হয়নি। এর অর্থ হ'ল সংকলক সিনট্যাক্স এবং কনফিগারেশন ডেটা টাইপ-পরীক্ষা করে যাতে রানটাইমের সময় আপনি কোনও অদ্ভুত এক্সএমএল পার্সিং বা ভুল ডেটা না পান। এর অর্থ এই যে আপনি যে লাইব্রেরিটি ব্যবহার করছেন তার উপর ভিত্তি করে আপনার যে আইডিইগুলি ব্যবহার করছেন তা বোঝার দরকার নেই।
- হ্যাঁ, লিফ্টের ডকুমেন্টেশনগুলি এর দৃ strong় বিষয় নয়।
উপরের কথাটি বলা হচ্ছে, আমি লিফটের ডিজাইনের দর্শন সম্পর্কে কিছু কথা বলি।
লিফট লেখা শুরু করার আগে আমি ওয়েব ফ্রেমওয়ার্ক ম্যানিফেস্টো লিখেছিলাম । আমি জানি যে অন্য কোনও ওয়েব ফ্রেমওয়ার্কের জন্য দুর্দান্ত ডিগ্রি এবং বৃহত্তর ডিগ্রি পর্যন্ত সত্য, লিফ্ট এই লক্ষ্যগুলি পূরণ করে।
এর মূল লিফ্টটি HTTP অনুরোধের চারপাশে অবজেক্টের মোড়ক রাখার পরিবর্তে HTTP অনুরোধ / প্রতিক্রিয়া চক্রটিকে বিমূর্ত করতে চায়। ব্যবহারিক স্তরে এর অর্থ হ'ল ব্যবহারকারী যে কোনও পদক্ষেপ নিতে পারেন (ফর্ম উপাদানগুলি জমা দিতে, অ্যাজাক্স করা ইত্যাদি) ব্রাউজারে একটি জিইউডি এবং সার্ভারে একটি ফাংশন দ্বারা প্রতিনিধিত্ব করা হয়। যখন জিইউডিটি এইচটিটিপি অনুরোধের অংশ হিসাবে উপস্থাপিত হয়, সরবরাহিত পরামিতিগুলির সাথে ফাংশনটি প্রয়োগ করা হয় (ডাকা হয়)। কারণ জিইউইডিগুলি ভবিষ্যদ্বাণী করা এবং সেশন-সুনির্দিষ্ট, রিপ্লে আক্রমণ এবং অনেকগুলি পরামিতি টেম্পারিং আক্রমণগুলি স্প্রিং সহ বেশিরভাগ ওয়েব ফ্রেমওয়ার্কের তুলনায় লিফটের সাথে অনেক বেশি কঠিন। এর অর্থ হ'ল বিকাশকারীরা বেশি উত্পাদনশীল কারণ তারা এইচটিটিপি অনুরোধটিকে প্যাকিং এবং আনপ্যাক করার পরিবর্তে ব্যবহারকারীর ক্রিয়া এবং ব্যবসায়িক যুক্তির সাথে যুক্ত ব্যবসায়িক যুক্তিতে মনোনিবেশ করছেন।
ajaxButton("Accept", () => {request.accept.save;
SetHtml("acceptrejectspan", <span/>}) ++
ajaxButton("Reject", () => {request.reject.save;
SetHtml("acceptrejectspan", <span/>})
এটা খুব সহজ। কারণ ফাংশনটি তৈরি হওয়ার সময় ফ্রেন্ড রিকোয়েস্ট সুযোগের মধ্যে রয়েছে, ফাংশনটি স্কোপটি বন্ধ করে দেয় ... বন্ধুর অনুরোধের প্রাথমিক কীটি প্রকাশ করার বা অন্য কিছু করার দরকার নেই ... কেবল বোতামটির পাঠ্য সংজ্ঞায়িত করুন (এটি স্থানীয়করণ করা যেতে পারে বা এটি কোনও এক্সএইচটিএমএল টেমপ্লেট থেকে টানা যায় বা এটি স্থানীয়কৃত টেমপ্লেট থেকে টানতে পারে) এবং বোতামটি চাপ দেওয়া হলে কার্য সম্পাদন করতে হবে। লিফটটি জিইউডি বরাদ্দকরণ, অ্যাজাক্স কল সেটআপ (jQuery বা YUI এর মাধ্যমে এবং হ্যাঁ, আপনি আপনার নিজের পছন্দসই জাভাস্ক্রিপ্ট লাইব্রেরি যুক্ত করতে পারেন), ব্যাক-অফগুলির সাথে স্বয়ংক্রিয় পুনরায় চেষ্টা করা, অ্যাজাক্স অনুরোধগুলি সন্ধান করে সংযোগ অনাহার এড়ানো ইত্যাদির যত্ন নেন etc.
সুতরাং, লিফট এবং স্প্রিংয়ের মধ্যে একটি বড় পার্থক্য হ'ল লিফটের ফাংশনের সাথে সম্পর্কিত জিইউইডির দর্শনের অনেক ভাল সুরক্ষা এবং আরও ভাল বিকাশকারী উত্পাদনশীলতার দ্বৈত সুবিধা রয়েছে। জিইউইডি -> ফাংশন অ্যাসোসিয়েশন খুব টেকসই প্রমাণিত হয়েছে ... একই কনস্ট্রাক্টটি সাধারণ ফর্ম, এজাক্স, ধূমকেতু, মাল্টি-পেজ উইজার্ড ইত্যাদির জন্য কাজ করে etc.
লিফ্টের পরবর্তী মূল অংশটি যতক্ষণ সম্ভব উচ্চ স্তরের বিমূর্তিগুলি প্রায় রাখে। পৃষ্ঠা জেনারেশনের দিকে, এর অর্থ পৃষ্ঠাটি এক্সএইচটিএমএল উপাদান হিসাবে তৈরি করা এবং প্রতিক্রিয়াটি স্ট্রিম করার ঠিক আগে পর্যন্ত পৃষ্ঠাটিকে এক্সএইচটিএমএল হিসাবে রাখা। সুবিধাগুলি হ'ল ক্রস সাইট স্ক্রিপ্টিং ত্রুটিগুলি প্রতিরোধ করা, সিএসএস ট্যাগগুলি মাথার দিকে সরিয়ে নিয়ে যাওয়া এবং পৃষ্ঠাটি তৈরি হওয়ার পরে পৃষ্ঠার নীচে স্ক্রিপ্টগুলি এবং লক্ষ্য ব্রাউজারের ভিত্তিতে পৃষ্ঠাটি পুনরায় লেখার ক্ষমতা। ইনপুট দিকে, ইউআরএলগুলি টাইপ-নিরাপদ পদ্ধতিতে প্যারামিটারগুলি (কোয়েরি এবং পাথ উভয় পরামিতি) বের করার জন্য পুনরায় লেখা যেতে পারে, উচ্চ স্তরের, অনুরোধ চক্রের প্রারম্ভিক প্রক্রিয়াজাতকরণের জন্য সুরক্ষা পরীক্ষা করা ডেটা পাওয়া যায়। উদাহরণস্বরূপ, একটি আরএসটি অনুরোধের পরিষেবাটি কীভাবে সংজ্ঞায়িত করা যায় তা এখানে:
serve {
case "api" :: "user" :: AsUser(user) :: _ XmlGet _ => <b>{user.name}</b>
case "api" :: "user" :: AsUser(user) :: _ JsonGet _ => JStr(user.name)
}
স্কালার অন্তর্নির্মিত প্যাটার্ন ম্যাচটি ব্যবহার করে আমরা একটি আগত অনুরোধের সাথে মেলে, পাথের তৃতীয় অংশটি সন্ধান করি এবং সেই মানটির সাথে সম্পর্কিত ব্যবহারকারীকে পাই এবং এমনকি অ্যাক্সেস কন্ট্রোল চেকগুলি প্রয়োগ করি (বর্তমান অধিবেশন বা অনুরোধের প্রদত্ত অ্যাক্সেসের অনুমতি রয়েছে কি? ব্যবহারকারীর রেকর্ড)। সুতরাং, ব্যবহারকারীর উদাহরণটি অ্যাপ্লিকেশনটির যুক্তিকে হিট করার পরে এটি পরীক্ষা করা হয়েছে।
এই দুটি মূল টুকরো দিয়ে, লিফটটির সুরক্ষার দিক থেকে অসাধারণ সুবিধা রয়েছে। আপনাকে লিফ্টের সুরক্ষার যে পরিমাণটি বৈশিষ্ট্যের দিক থেকে পাওয়া যায় না তার ধারণা দেওয়ার জন্য, রাসমাস লেয়ার্ডর্গ যিনি ইয়াহুয়ের সুরক্ষা করেছিলেন! ফোরস্কয়ার (লিফট পোস্টার-চাইল্ড সাইটগুলির মধ্যে একটি) সম্পর্কে এটি বলতে হবে:
@ ফোরস্কোয়ার-এ চার তারা - কিছুক্ষণের মধ্যে 1 ম সাইটটিতে আমি খুব ভাল নজর দিয়েছি যে কোনও একক সুরক্ষার সমস্যা নেই (যা আমি খুঁজে পেতে পারি) - http://twitter.com/rasmus/status/5929904263
সেই সময়ে, ফোরস্কোয়ারের কোডে একজন ইঞ্জিনিয়ার কাজ করছিলেন (এটি নয় যে @ হারিহ কোনও সুপার-প্রতিভা নয়) এবং সাপ্তাহিক ট্র্যাফিক দ্বিগুণ হওয়ার সাথে মোকাবিলা করার সময় তার মূল ফোকাস ফোরস্কয়ারের পিএইচপি সংস্করণটি পুনরায় লেখার ছিল।
লিফটের সুরক্ষার ফোকাসের শেষ অংশটি সাইটম্যাপ। এটি একটি ইউনিফাইড অ্যাক্সেস নিয়ন্ত্রণ, সাইট নেভিগেশন এবং মেনু সিস্টেম। বিকাশকারী স্কাল কোড (যেমন If(User.loggedIn _)
বা If(User.superUser _)
) ব্যবহার করে প্রতিটি পৃষ্ঠার অ্যাক্সেস নিয়ন্ত্রণের নিয়মগুলি সংজ্ঞায়িত করে এবং যে কোনও পৃষ্ঠা রেন্ডারিং শুরু হওয়ার আগে সেগুলি অ্যাক্সেস নিয়ন্ত্রণের নিয়ম প্রয়োগ করা হয়। এটি অনেকটা স্প্রিং সিকিউরিটির মতো, প্রজেক্টের শুরু থেকেই এটিকে বেক করা এবং অ্যাক্সেস নিয়ন্ত্রণের নিয়মগুলি বাকি অ্যাপ্লিকেশনটির সাথে একীভূত করা হয় যাতে ইউআরএলগুলি যখন আপনি এক্সএমএলে সুরক্ষা বিধিগুলি আপডেট করার প্রক্রিয়া করতে না চান পরিবর্তন বা অ্যাক্সেস নিয়ন্ত্রণ পরিবর্তনের গণনা করে এমন পদ্ধতিগুলি।
এতক্ষণ সংক্ষেপে বলার জন্য, লিফ্টের ডিজাইনের দর্শন আপনাকে অ্যাক্সেস নিয়ন্ত্রণে বেকড, ওডাব্লুএএসপি শীর্ষ 10 সুরক্ষিত দুর্বলতার প্রতিরোধের সুবিধা, আরও ভাল অ্যাজাক্স সমর্থন এবং স্প্রিংয়ের চেয়ে অনেক বেশি বিকাশকারী উত্পাদনশীলতা দেয়।
তবে লিফ্ট আপনাকে আশেপাশের যে কোনও ওয়েব ফ্রেমওয়ার্কের সেরা ধূমকেতু সমর্থন দেয়। এই কারণেই নভেল তাদের পালস পণ্যটি পাওয়ার জন্য লিফটটিকে বেছে নিয়েছিল এবং নভেল লিফ্ট সম্পর্কে যা বলেছিল তা এখানে:
লিফ্ট এমন এক ধরণের ওয়েব ফ্রেমওয়ার্ক যা আপনাকে বিকাশকারী হিসাবে বড় ছবিতে মনোনিবেশ করতে সক্ষম করে। দৃ ,়, অভিব্যক্তিপূর্ণ টাইপিং এবং বিল্ট-ইন ধূমকেত সহায়তার মতো উচ্চ স্তরের বৈশিষ্ট্যগুলি আপনাকে নদীর গভীরতানির্ণয়ের পরিবর্তে উদ্ভাবনের দিকে মনোনিবেশ করতে দেয়। নভেল পালসের মতো সমৃদ্ধ, রিয়েল-টাইম ওয়েব অ্যাপ্লিকেশন তৈরির জন্য কভারগুলির নীচে লিফ্টের শক্তি সহ একটি কাঠামো প্রয়োজন।
সুতরাং, লিফটটি কেবলমাত্র আমার খুব বেশি এমভিসি কাঠামো নয়। এটি এমন একটি কাঠামো যা এর পিছনে কিছু মূল নকশার নীতি পেয়েছে যা খুব ভাল পরিপক্ক হয়েছে। এটি এমন একটি কাঠামো যা সুরক্ষা এবং বিকাশকারী উত্পাদনশীলতার দ্বৈত সুবিধা দেয়। লিফ্ট এমন একটি কাঠামো যা স্তরগুলিতে নির্মিত হয় এবং বিকাশকারীকে তাদের প্রয়োজনের ভিত্তিতে সঠিক পছন্দ দেয় ... ভিউ জেনারেশনের পছন্দ, অধ্যবসায়ের জন্য পছন্দ ইত্যাদি gives
স্কেলা এবং লিফট বিকাশকারীদের এক্সএমএল, টীকাগুলি এবং অন্যান্য আইডিয়ামগুলির তুলনায় আরও ভাল অভিজ্ঞতা দেয় যা স্প্রিং তৈরি করে।