আমি আমার আবেদনের জন্য জাভাতে একটি নমনীয় এসিএল কাঠামো তৈরি করার চেষ্টা করছি।
অনেক এসিএল ফ্রেমওয়ার্কগুলি বিধিগুলির একটি শ্বেত তালিকাতে নির্মিত হয়, যেখানে কোনও নিয়ম মালিকের আকারে থাকে : ক্রিয়া: সংস্থান । উদাহরণ স্বরূপ,
- "জন উত্স ফুবার -১ দেখতে পারে"
- "মেরি রিসোর্স FOBAR-1 দেখতে পারে"
- "মেরি রিসোর্স ফুবার -১ সম্পাদনা করতে পারে"
এটি আকর্ষণীয় কারণ নিয়মগুলি সহজেই সিরিয়ালযুক্ত / কোনও ডাটাবেসে স্থির থাকতে পারে। তবে আমার অ্যাপ্লিকেশনটিতে জটিল ব্যবসার যুক্তি রয়েছে। উদাহরণ স্বরূপ,
- "পাঁচ বছরেরও বেশি জ্যেষ্ঠতার সাথে বিভাগের 1 বিভাগের সমস্ত ব্যবহারকারী FOOBAR-1 রিসোর্সটি দেখতে পারবেন, অন্যথায় অনুমোদিত নয়"
- "বিভাগ ২-এর সমস্ত ব্যবহারকারী, তারিখটি যদি 03/15/2016 এর পরে হয় তবে তারা ফুবার -২ রিসোর্সটি দেখতে পারবেন, অন্যথায় অনুমোদিত নয়"
প্রথম ভাবার পরে, এটি এমন কোনও ডেটাবেস স্কিমা তৈরি করা দুঃস্বপ্ন হবে যা এইগুলি মতো অসীম জটিল নিয়মগুলি পরিচালনা করতে পারে। অতএব, দেখে মনে হচ্ছে আমাকে সংকলিত অ্যাপ্লিকেশনটিতে তাদের "বেক" করা দরকার, প্রতিটি ব্যবহারকারীর জন্য তাদের মূল্যায়ন করুন এবং তারপরে মালিক উত্পাদন করুন : ক্রিয়া: মূল্যায়নের ফলাফল হিসাবে সংস্থান সংক্রান্ত নিয়ম। সংকলিত অ্যাপ্লিকেশনটিতে যুক্তি বেক করা এড়াতে চাই।
সুতরাং, আমি শিকারের আকারে কোনও নিয়মকে প্রতিনিধিত্ব করার কথা ভাবছিলাম : ক্রিয়া: সংস্থান , যেখানে প্রিডিকেট এমন একটি বুলিয়ান এক্সপ্রেশন যা কোনও ব্যবহারকারীকে অনুমোদিত কিনা তা নির্ধারণ করে। শিকারী জাভা স্ক্রিপ্ট এক্সপ্রেশন একটি স্ট্রিং যা জাভা এর গণ্ডার ইঞ্জিন দ্বারা মূল্যায়ন করা যেতে পারে। উদাহরণ স্বরূপ,
return user.getDept() == 1 && user.seniority > 5;
এটি করার দ্বারা, পূর্বাভাসগুলি সহজেই ডাটাবেসে স্থির থাকতে পারে।
এই চালাক কি ? এই কি ঝাল ? এটা কি চিকিত্সা ? এটি কি ওভার ইঞ্জিনিয়ারড ? এটি কি নিরাপদ (স্পষ্টতই, জাভা রাইনো ইঞ্জিনটি স্যান্ডবক্স করতে পারে)।