আমি কেন জাভা / বসন্তের উপরে স্কালা / লিফ্ট ব্যবহার করব? [বন্ধ]


151

আমি জানি এই প্রশ্নটি খানিকটা উন্মুক্ত তবে আমি জাভা / স্প্রিংয়ের বিকল্প হিসাবে স্কালা / লিফ্টের দিকে চেয়েছি এবং আমি আশ্চর্য হয়েছি যে স্ক্যালা / লিফ্টের এটির কী কী প্রকৃত সুবিধা রয়েছে? আমার দৃষ্টিকোণ এবং অভিজ্ঞতা থেকে, জাভা টিকা এবং স্প্রিং সত্যিই আপনাকে কোনও অ্যাপ্লিকেশনটির জন্য কোডিংয়ের পরিমাণটি হ্রাস করতে পারে। স্ক্যালা / লিফট কি এর উপর উন্নতি করে?


প্রশ্ন খুব পুরানো। তবে এখন প্রশ্নটি হবে "কেন আমি স্কায়াল / এক্স ওওয়াইএক্স ওভার প্লে করব" এবং এর অনেকগুলি ভাল কারণ রয়েছে। আমি প্লেতে চলে এসেছি আর কখনই পিছন ফিরে তাকাতে পারি নি।
Jus12

উত্তর:


113

আসুন ধরে নেওয়া যাক আমরা স্কেলা এবং জাভাতে সমানভাবে স্বাচ্ছন্দ্য বোধ করছি এবং স্প্রিং বা লিফ্টের সাথে সম্পর্কিত ভাষার (বিশাল) পার্থক্যগুলিকে উপেক্ষা করুন।

পরিপক্কতা এবং লক্ষ্যগুলির ক্ষেত্রে স্প্রিং এবং লিফ্ট প্রায় রূপকভাবে বিরোধী।

  • লিফ্টের চেয়ে বসন্ত প্রায় পাঁচ বছর বড়
  • লিফট একচেটিয়া এবং শুধুমাত্র ওয়েবকে লক্ষ্য করে; বসন্তটি মডুলার এবং উভয় ওয়েব এবং "নিয়মিত" অ্যাপ্লিকেশনকে লক্ষ্য করে
  • বসন্ত জাভা EE বৈশিষ্ট্যগুলির আধিক্য সমর্থন করে; লিফট সেই জিনিসটিকে উপেক্ষা করে

একটি বাক্যে, বসন্তটি ভারী ওজন এবং লিফট হালকা ওজনের। পর্যাপ্ত সংকল্প এবং সংস্থান দিয়ে আপনি এটিকে তার মাথা ঘুরিয়ে দিতে পারেন তবে আপনার প্রচুর প্রয়োজন হবে উভয়ের

এখানে উভয় ফ্রেমওয়ার্কের সাথে কাজ করার পরে আমার মনের মধ্যে আটকে থাকা বিভিন্ন পার্থক্য রয়েছে। এটি একটি সম্পূর্ণ তালিকা নয়, যা আমি কোনওভাবেই সংকলন করতে পারি না। আমার কাছে যা সবচেয়ে আকর্ষণীয় মনে হয়েছিল ...

  1. দর্শন দেখুন

    লিফট স্নিপেট / অ্যাকশন পদ্ধতিতে কিছু দেখার উপাদান রাখার জন্য উত্সাহ দেয়। স্নিপেট কোডটি বিশেষত প্রোগ্রামগতভাবে উত্পন্ন ফর্ম উপাদানগুলির সাথে ছিটিয়ে দেওয়া হবে,<div> গুলি,<p> গুলি, ইত্যাদি

    এটি শক্তিশালী এবং দরকারী, বিশেষত যেহেতু স্কালার একটি ভাষা-স্তরের এক্সএমএল মোড রয়েছে। ব্রেসেসে ভেরিয়েবল বাইন্ডিং সহ স্কালার পদ্ধতিগুলির মধ্যে একটি এক্সএমএল ইনলাইন লিখতে পারে। এটি খুব সাধারণ এক্সএমএল পরিষেবাদি বা পরিষেবাদির মকআপগুলির জন্য আনন্দদায়ক হতে পারে - আপনি এইচটিটিপি রেসপন্স ক্রিয়াকলাপের স্যুটকে টেমপ্লেট বা খুব বেশি পরিবেশনকারী কনফিগারেশন ছাড়াই এক দুর্দান্তভাবে বিচ্ছুরিত ফাইলে আউট করতে পারেন। অবক্ষয়টি জটিলতা। আপনি কতদূর যান তার উপর নির্ভর করে, হয় দৃষ্টিভঙ্গি এবং যুক্তিগুলির মধ্যে উদ্বেগের একটি अस्पष्ट বিচ্ছেদ বা কোনও বিচ্ছেদ নয়।

    বিপরীতে, ওয়েব অ্যাপসের জন্য স্প্রিংয়ের নিয়মিত ব্যবহার ভিউ এবং অন্যান্য কিছুর মধ্যে দৃ a় পৃথককরণকে কার্যকর করে। আমি মনে করি স্প্রিং বেশ কয়েকটি টেম্প্লেটিং ইঞ্জিনকে সমর্থন করে তবে আমি কেবল গুরুতর কিছুতে জেএসপি ব্যবহার করেছি। জেএসপির সাথে একটি লিফট-অনুপ্রেরণিত "ফাজি এমভিসি" ডিজাইন করা পাগলামি হবে। এটি বৃহত্তর প্রকল্পগুলির একটি ভাল জিনিস, যেখানে কেবল পড়তে এবং বোঝার সময়টি অপ্রতিরোধ্য হতে পারে।

  2. অবজেক্ট-রিলেশনাল ম্যাপার পছন্দসমূহ

    লিফটের বিল্টিন ওআরএম হ'ল "ম্যাপার"। "রেকর্ড" নামে একটি আসন্ন বিকল্প রয়েছে, তবে আমি মনে করি এটি এখনও প্রাক-আলফা হিসাবে বিবেচিত। লিফটওয়েব বুকের ম্যাপার এবং জেপিএ উভয়ই ব্যবহারের বিভাগ রয়েছে।

    লিফটের সিআরইউডিফাই বৈশিষ্ট্যটি যেমনটি শীতল, কেবল ম্যাপারের সাথে কাজ করে (এবং জেপিএ নয়)।

    অবশ্যই, স্প্রিং স্ট্যান্ডার্ড এবং / অথবা পরিপক্ক ডাটাবেস প্রযুক্তির একটি প্যানপ্লি সমর্থন করে । অপারেটিভ শব্দটি সেখানে "সমর্থন" করে। তাত্ত্বিকভাবে, আপনি লিফটের সাথে যে কোনও জাভা ওআরএম ব্যবহার করতে পারেন, যেহেতু আপনি স্কালা থেকে যথেচ্ছ জাভা কোড কল করতে পারেন। তবে লিফট কেবল ম্যাপার এবং (অনেক কম পরিমাণে) জেপিএ সমর্থন করে। এছাড়াও, স্কালায় অযৌক্তিক জাভা কোডের সাথে কাজ করা বর্তমানে কোনওরকম পছন্দ মতো বিরামবিহীন নয়; একটি জাভা ওআরএম ব্যবহার করে, আপনি সম্ভবত নিজেকে সর্বত্র জাভা এবং স্কালা উভয় সংগ্রহই ব্যবহার করতে বা জাভা উপাদানগুলিতে এবং বাইরে সমস্ত সংগ্রহকে রূপান্তর করতে দেখতে পাবেন।

  3. কনফিগারেশন

    লিফট অ্যাপ্লিকেশনগুলি একটি অ্যাপ্লিকেশন-প্রশস্ত "বুট" শ্রেণীর মাধ্যমে একটি পদ্ধতিতে পুরোপুরি পুরোপুরি কনফিগার করা হয়। অন্য কথায়, কনফিগারেশন স্কালা কোডের মাধ্যমে সম্পন্ন হয়। সংক্ষিপ্ত কনফিগারেশনযুক্ত প্রকল্পগুলির জন্য এটি উপযুক্ত এবং যখন কনফিগারেশনটি করা ব্যক্তিটি স্কাল সম্পাদনা করতে স্বাচ্ছন্দ্য বোধ করেন।

    কনফিগারেশনের ক্ষেত্রে বসন্তটি বেশ নমনীয়। প্রচুর কনফারেন্স বিকল্পগুলি এক্সএমএল কনফিগারেশন বা টীকাগুলির মাধ্যমে চালিত হতে পারে।

  4. নথিপত্র

    লিফ্টের ডকুমেন্টেশন তরুণ। স্প্রিংয়ের ডক্সগুলি বেশ পরিপক্ক। কোন প্রতিযোগিতা নেই।

    যেহেতু স্প্রিংয়ের ডক্সটি ইতিমধ্যে সুন্দরভাবে সংগঠিত এবং সন্ধান করা সহজ, তাই আমি লিফ্টের জন্য যে ডক্সগুলি পেয়েছি তা পর্যালোচনা করব। লিফ্ট ডকুমেন্টেশনের মূলত 4 টি উত্স রয়েছে: লিফটওব বুক , এপিআই ডক্স , লিফট ওয়েবের গুগল গ্রুপ এবং " শুরু করা "। কোড উদাহরণগুলির একটি দুর্দান্ত স্যুট রয়েছে, তবে আমি সেগুলিতে সেগুলিকে "ডকুমেন্টেশন" বলব না।

    এপিআই ডক্স অসম্পূর্ণ। লিফটওয়েব বইটি গাছে প্রকাশিত হয়েছে তবে এটি অনলাইনে নিখরচায় পাওয়া যায়। এটি সত্যই কার্যকর, যদিও এর সিদ্ধান্তগতভাবে যুক্তিযুক্ত শৈলীটি আমাকে মাঝে মাঝে বিরক্ত করে। এটি টিউটোরিয়ালে কিছুটা দীর্ঘ এবং চুক্তিতে সংক্ষিপ্ত। বসন্তের একটি সঠিক ম্যানুয়াল রয়েছে, যা লিফ্টের অভাব রয়েছে।

    তবে লিফ্টের উদাহরণগুলির একটি দুর্দান্ত সেট রয়েছে। আপনি যদি লিফট কোড এবং উদাহরণ কোডটি পড়তে স্বাচ্ছন্দ্য বোধ করেন (এবং আপনি স্ক্যালাকে ইতিমধ্যে ভাল জানেন) তবে আপনি জিনিসগুলিকে মোটামুটি সংক্ষেপে কাজ করতে পারেন।

উভয় ফ্রেমওয়ার্ক বাধ্যতামূলক। অ্যাপসের বিস্তৃত পরিসর রয়েছে যেখানে আপনি যে কোনওটি বেছে নিতে পারেন এবং ভাল করতে পারেন।


10
একটি উত্তম উত্তর, একটি বিষয়টির সাথে আমি দ্বিমত পোষণ করছি: বসন্তটি ভারী ওজনযুক্ত। এটি ভাল এপিআইএসের একটি বিস্তৃত পরিসীমা পেয়েছে এবং এর ভাল ফল পাওয়ার জন্য প্রয়োজনীয় কিছু কাঠামোগত পদ্ধতি চাপিয়ে দেয় তবে জে 2 ই ই স্টাফের তুলনায় এটি মূলত প্রতিস্থাপন করেছে এটি আরও অনেক বেশি হালকা ওজনের সমাধান। অবশ্যই "লাইটওয়েটনেস" দর্শকের চোখে থাকে, সুতরাং এটি অবশ্যই একটি বিষয়গত যুক্তি। ঠিক তখন আমার 2 সেন্ট।
ব্রায়ান

3
ভাল উত্তর, খুব উদ্দেশ্যমূলক। লিফ্টটি আপাতদৃষ্টিতে স্মার্ট জিনিসগুলি করে যা খুব বোকা। পৃষ্ঠার যুক্তিটিকে ব্যাকএন্ডে সরানো, স্কেল কোডটিতে এইচটিএমএল মিশ্রণ যা পৃষ্ঠা টেমপ্লেটের অভ্যন্তরে নিয়ন্ত্রণ ট্যাগগুলির চেয়ে খারাপ। তারা কেন এটি করেছে আমি জানি না, সম্ভবত তারা মনে করে স্কালাকে অবশ্যই এক্সএমএলকে দ্রুত প্রসেস করতে হবে। "লিফটকে সংজ্ঞা প্রদান" হ'ল আমার মধ্যে সবচেয়ে খারাপ প্রযুক্তিগত বই।
সোয়েয়ার

আমি যতটা হতে চাই লিফ্টের সাথে তেমন পরিচিত নই। আপনার মতে কোনও এক্সএমএল ফাইল থেকে সেটিংস পড়ার পরিবর্তে বুট অবজেক্টের মোড়ক তৈরি করা কতটা কঠিন? আমার প্রথম ধারণাটি যেহেতু স্কালা XML কে বক্সের বাইরে খুব ভালভাবে পরিচালনা করে, তাই এটি ব্যতিক্রমীভাবে কঠিন হবে না।
এপি-ইনাগো

সাওয়ার, আপনি স্কেল কোডের সাথে এইচটিএমএল মিশ্রিত করতে পারবেন তা আপনার কাছে আছে তা বলে না। স্মার্ট উপায়ে স্নিপেটগুলি ব্যবহার করা এইচটিএমএল এবং স্কাল কোডকে আলাদা করবে। তবে ওহে, আপনার কন্ট্রোল ট্যাগগুলি ব্যবহার করে চালিয়ে যান;)
অ্যালেবোন

1
@ ড্যান, এখন কোনও আপডেট আছে যে লিফ্টটি তার আগে দ্বিগুণ হয়ে গেছে যখন আপনি এটি প্রথম লিখেছিলেন?
পেসারিয়ার

229

আমি বলতে চাই যে আমি ড্যান লরোকের উত্তরটির সাথে দৃ 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

স্কেলা এবং লিফট বিকাশকারীদের এক্সএমএল, টীকাগুলি এবং অন্যান্য আইডিয়ামগুলির তুলনায় আরও ভাল অভিজ্ঞতা দেয় যা স্প্রিং তৈরি করে।


2
Blog.lostlake.org/index.php?/archives/16-Web-Framework-Manifesto.html একটি সংরক্ষণাগারভুক্ত সংস্করণ এ উপলব্ধ replay.web.archive.org/20070220231839/http://blog.lostlake.org/...
অ্যালান হেচট

1
আপনি আমাকে মোঙ্গোডিবি নেটিভ সাপোর্টে পেয়েছিলেন ... আমি আছি
ইরান মেডান

8
আমি 90 এর দশকের মাঝামাঝি থেকে ওয়েব অ্যাপস লিখছি। আমি পার্ল, জাভা, সিয়াম, জেএসপি এবং অন্যদের বিশাল ব্যাচ ব্যবহার করেছি। আমি জানি যে কে বসন্ত ব্যবহার করে সেগুলি কনফিগারেশন এবং নির্ভরতা সঠিক, মভেন দুঃস্বপ্ন ইত্যাদিতে অসুবিধা সম্পর্কে অভিযোগ করে আমি কয়েক সপ্তাহ আগে একটি প্রকল্পে লিফট ব্যবহার শুরু করেছি এবং একেবারে অবাক হয়েছি। এটি আমি প্রথম কাঠামো (এবং ভাষা) ব্যবহার করেছি যেখানে জিনিসগুলি প্রায়শই প্রচেষ্টা ছাড়াই কাজ করে। আমি এখন পর্যন্ত আমার অ্যাপ্লিকেশনটিতে কয়েক ডজন বৈশিষ্ট্য লিখেছি এবং আমি কীভাবে এটি সঠিকভাবে পেলাম তা অব্যাহতভাবে অবাক করে দিয়েছি ... এমনকি স্তন্যপায়ী দস্তাবেজগুলি এবং স্কালার একটি সীমাবদ্ধ বোঝার সাথেও। দেখাই বিশ্বাস.
টনি কে।

@ টনিক .: নিশ্চয়ই বসন্ত ভারী, তবে স্প্রিংয়ের সাথে রিফ্যাক্টর / প্রসারিত করা আরও সহজ, যেহেতু ওয়েব-অ্যাপটি অনেক পরে পরিবর্তিত হয় তবে তা প্রদান বন্ধ হয়ে যাবে। আইএমএইচও, এটি নির্ভর করে। আমি ছোট প্রকল্পগুলিতে গ্রিলের মতো আরও কিছু ফ্রেমওয়ার্ক ব্যবহার করেছি এবং আমি মনে করি এটি এর জন্য পুরোপুরি - তবে কিছু পরে অনেক পরিবর্তন হবে, আমি স্প্রিংয়ের সাথে যাব go
হোং লং

7
@ হোওংলং সফ্টওয়্যার বিবর্তনের অসুবিধা সম্পর্কে অনেকগুলি পন্থা রয়েছে। আমি কেবল আমার অভিজ্ঞতার কথা বলছি: জাভা এটির বয়সকে ভাষা হিসাবে দেখায়, যেমন এর ফ্রেমওয়ার্কগুলি নির্মিত হয়। সমস্ত বয়লারপ্লেট এবং কনফিগারেশন পাগল ছাড়াই এমন জিনিসগুলিতে বিকশিত হওয়ার সময় যা আরও বেশি প্রকাশযোগ্য এবং শক্তিশালী।
টনি কে।

11

আমি আপনাকে খেলার কাঠামো যাচাই করার জন্য সুপারিশ করব, এটিতে খুব আকর্ষণীয় ধারণা রয়েছে এবং এটি জাভা এবং স্কালায় উন্নয়নের সমর্থন করে


2
আমি প্লে চেক আউট। এর প্রস্তাব দেওয়ার জন্য বিল্ট-ইন ক্লাসটি পুনরায় লোড করা ছাড়া আমি আর কিছুই দেখতে পেলাম না এবং নিখরচায় স্কালাল জেআরবেল লাইসেন্সের সাথে আপনি এটি লিফ্টের সাথে পেয়ে যাবেন।
টনি কে।

10

শুধুই মজার জন্য. এবং নতুন প্রোগ্রামিং পদ্ধতির শেখার স্বার্থে।


10

আমি লিফটকে সাম্প্রতিক ওয়েব প্রকল্পের জন্য স্প্রিং এমভিসির কোনও বড় অনুরাগী হিসাবে ব্যবহার করার জন্য দৃ strongly়তার সাথে লক্ষ্য করেছি। আমি সর্বশেষতম সংস্করণগুলি ব্যবহার করি নি, তবে স্প্রিং এমভিসির পূর্ববর্তী সংস্করণগুলি আপনাকে ওয়েব অ্যাপ্লিকেশনটি চালানোর জন্য প্রচুর হুপের মধ্য দিয়ে ঝাঁপিয়ে পড়েছিল। লিফ্টটি বেশিরভাগ সেশন নির্ভর হতে পারে এবং সঠিকভাবে কাজ করার জন্য 'স্টিকি সেশনগুলি' লাগবে না যতক্ষণ না আমি লিফ্টে প্রায় বিক্রি হয়ে গিয়েছিলাম। থেকে উদ্ধৃতাংশ http://exploring.liftweb.net/master/index-9.html#sec:Session-Management

কোনও স্ট্যান্ডার্ড সেশন রেপ্লিকেশন প্রযুক্তি না পাওয়া পর্যন্ত আপনি "স্টিকি সেশন" ব্যবহার করে আপনার অ্যাপ্লিকেশনটিকে ক্লাস্টার করতে পারেন। এই পরিমাপ যে এইচটিটিপি অধিবেশন সম্পর্কিত সমস্ত অনুরোধগুলি একই ক্লাস্টার নোড দ্বারা প্রক্রিয়া করা উচিত

সুতরাং একবার সেশনটির প্রয়োজন পরে, ব্যবহারকারীকে সেই নোডে পিন করতে হবে। এটি বুদ্ধিমান লোড ভারসাম্যের প্রয়োজন তৈরি করে এবং স্কেলিংকে প্রভাবিত করে, যা লিফটকে আমার ক্ষেত্রে সমাধান হতে বাধা দেয়। আমি http://www.playframework.org/ নির্বাচন করে শেষ করেছি এবং খুব খুশি হয়েছে। খেলা এতদূর স্থিতিশীল এবং নির্ভরযোগ্য এবং এর সাথে কাজ করা খুব সহজ।


7

আমি না , উত্তোলন এবং একটি জাভা পটভূমি থেকে Scala আসা তাই এই ব্যক্তিগত অভিজ্ঞতা থেকে নয়, কিন্তু আমি অনেক উত্তোলন ডেভেলপারদের Scala অনেক সংক্ষিপ্ত এবং জাভা তুলনায় দক্ষ ভাষা হতে যে জানি।


3

আপনার জ্ঞান প্রসারিত করা সর্বদা একটি সার্থক প্রচেষ্টা :) আমি সবেমাত্র স্কেলা শিখতে শুরু করেছি, এটি আমি সাধারণ জাভা কীভাবে লিখি তা প্রভাবিত করে এবং আমি বলতে পারি এটি এখন পর্যন্ত খুব উপকারী হয়েছে।


3

আমি আপনার লুপের জন্য সম্পূর্ণরূপে ছুড়ে দিতে ঘৃণা করি। তবে আপনি এক অ্যাপ্লিকেশনটিতে স্কালা, জাভা, লিফ্ট, স্প্রিং ব্যবহার করতে পারেন এবং এটি কোনও সমস্যা না হওয়ার কথা।


0

আমার নম্র মতামত, কল্পনা যা গুরুত্বপূর্ণ।

আসুন আপনি বিবেচনা করুন একটি অ্যাপ লিখতে চান। আপনি যদি কোনও শালীন বিকাশকারী হন তবে অ্যাপটি ইতিমধ্যে আপনার মনে তৈরি করা উচিত। পরবর্তী পদক্ষেপটি কোডের মাধ্যমে কীভাবে কাজ করে তা আবিষ্কার করা। এটি করার জন্য, আপনাকে কল্পনাযুক্ত অ্যাপ্লিকেশনটি এমন কোনও ফাংশনটির মাধ্যমে পাস করতে হবে যা এটি একটি বাস্তব বিশ্বের অ্যাপ্লিকেশনে অনুবাদ করে। এই ফাংশন একটি প্রোগ্রামিং ভাষা। সুতরাং

Real app = programming language (imagined app)

সুতরাং ভাষা পছন্দ গুরুত্বপূর্ণ। ফ্রেমওয়ার্কটিও তাই। এখানে প্রচুর স্মার্ট লোক রয়েছে যারা আপনাকে কী বেছে নেবেন সে সম্পর্কে পরামর্শ দেবে, তবে শেষ পর্যন্ত, যে ভাষা / কাঠামোটি আপনার কল্পনাকে সর্বোত্তম অনুবাদ করে তা আপনার পছন্দ হওয়া উচিত। সুতরাং উভয়ের সাথে প্রোটোটাইপ করুন এবং আপনার পছন্দটি করুন।

আমার হিসাবে, আমি আস্তে আস্তে স্কালা এবং লিফট শিখছি এবং এটি ভালবাসি।


0

তবে প্রধান সমস্যা হ'ল আমরা লিফটের সাথে বসন্তের তুলনা করতে পারি না। লিফটটি মূলত ইউআই কাঠামো হিসাবে ব্যবহৃত হয় এবং স্প্রিং ডিআই ফ্রেমওয়ার্ক হিসাবে ব্যবহৃত হয়।
আপনি যদি ওয়েব অ্যাপ্লিকেশন বিকাশ করছেন তবে যে ব্যাকএন্ডের অনেক বেশি রয়েছে তা নিশ্চিত আপনি লিফটটি ব্যবহার করতে পারেন।
তবে যদি আপনার বিকাশকারী ওয়েব অ্যাপ্লিকেশনটিতে কিছু সিরিজ ব্যাকএন্ড থাকে এবং আপনার অবশ্যই স্প্রিংয়ের দরকার হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.