এওপি বনাম ফাংশন

দিক-ভিত্তিক প্রোগ্রামিং (এওপি) বেশ জনপ্রিয়। সম্পর্কিত অনুপ্রেরণা সম্পর্কিত উইকিপিডিয়া নিবন্ধে ভালভাবে ব্যাখ্যা করা হয়েছে।

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

@RequireRole (ভূমিকা.Admin) // স্পষ্টভাবে দৃশ্যমান দিক
মজা আপডেট ইউজারপেরিমেশনস (…) {
    // যুক্তি এখানে
}

যাইহোক, পাঠযোগ্যতার দিক থেকে এটি @RequireRole টীকাটির পরিবর্তে প্রয়োজনীয় রোল ফাংশনটি ব্যবহার করে একই সমস্যার সাথে কার্যকরী পদ্ধতির থেকে খুব বেশি আলাদা নয়:

মজা আপডেট ইউজারপেরিমেশন (…)
    রোল (রোল। অ্যাডমিন) // সিকিউরিটি এক্সসেপশন নিক্ষেপ করে
    // যুক্তি এখানে
}

তদুপরি, কার্যকরী পদ্ধতির সুবিধা রয়েছে যে এটি আরও জটিল অনুমতি চেকগুলি পর্যন্ত স্কেল করে, যেমন কোন ব্যবহারকারীর ভূমিকা প্রয়োজনীয় তা সিদ্ধান্ত নেওয়ার আগে পদ্ধতি পরামিতি বিশ্লেষণ করার মতো।

লেনদেনের মতো অন্যান্য দিকগুলির ক্ষেত্রেও এটি একই। দুর্ভাগ্যক্রমে, জাভাতে আরও জটিল ধারণাগুলি কার্যকরীভাবে উপস্থাপন করা জটিল এবং অসুবিধাজনক, যা জাভা বাস্তুতন্ত্রের এওপি ফ্রেমওয়ার্কগুলির জন্য একটি কৃত্রিম জনপ্রিয়তা তৈরি করে।

যদিও কোটলিনের ক্ষেত্রে এটি হয় না। কোটলিনে, এওপি-র সাথে লেনদেনের জন্য জাভা-জাতীয় পদ্ধতির পরিবর্তে এবং এর মতো টিকা:

@Transactional
মজা আপডেট ইউজারপেরিমেশনস (…) {
    // যুক্তি এখানে
}

কার্যকরী উপায়ে আবার লেখার সময় এটি যেমন পাঠযোগ্য এবং পরিষ্কার-দৃষ্টিকোণ:

মজা আপডেট ইউজারপেরিমেশনস (…) = লেনদেনের {
    // যুক্তি এখানে
}

এই কার্যকরী পদ্ধতির সুবিধাটি হ'ল আপনি সর্বদা Ctrl / Cmd + আপনার আইডিইতে লেনদেনের ক্রিয়াকলাপের ঘোষণার উপর ক্লিক করতে পারেন এবং তাত্ক্ষণিকভাবে এটি কী করে তা দেখুন যা সাধারণভাবে ব্যবহৃত এওপি ফ্রেমওয়ার্কগুলির সাথে সাধারণত সম্ভব হয় না। এমনকি আইডিই প্লাগইন দ্বারা দিক উত্স কোডে নেভিগেশন সরবরাহ করার সময়ও, এর যুক্তিটি বোঝার জন্য পৃথক সমৃদ্ধ এপিআই এবং / বা কনভেনশনগুলির জ্ঞান প্রয়োজন।

দুর্ভাগ্যক্রমে, কোটলিনে টিকা-ভিত্তিক এওপি-র জন্য এই কার্যকরী প্রতিস্থাপনটি তাত্ক্ষণিকভাবে স্কেল করে না যখন কোঁকড়ানো ধনুর্বন্ধনী এবং ইন্ডেন্টেশন গাদা শুরু করার মতো একই ফাংশনে একাধিক দিক প্রয়োগ করা হয়:

মজা আপডেট ইউজারপেরিমেশনস (…) = লগড {
    লেনদেন
        // যুক্তি এখানে
    }
}

কাজের ক্ষেত্রটি হ'ল একাধিক দিকের ব্যবহারের সাইটটিকে পরিষ্কার-দেখায় রাখার জন্য একটি সম্মিলিত উচ্চ-অর্ডার ফাংশন তৈরি করা:

মজা আপডেট ইউজারপ্রেমিশন (…) = লগড ট্রান্সএকশনাল {
    // যুক্তি এখানে
}

কার্যকরী পদ্ধতির আরেকটি অসুবিধা হ'ল লগিংয়ের মতো দিকগুলির পদ্ধতির পরামিতিগুলিতে অ্যাক্সেস প্রয়োজন। এগুলি সাধারণত বিশেষ এপিআইয়ের মাধ্যমে সাধারণত traditionalতিহ্যবাহী এওপি ফ্রেমওয়ার্কগুলিতে পাওয়া যায় তবে স্টক কোটলিন ফাংশনগুলি সহজেই এগুলিতে অ্যাক্সেস করতে পারে না। সুতরাং, প্রকৃতপক্ষে বাস্তব জীবনের লগিংয়ের দিকটি খাঁটি কার্যকরী উপায়ে উপস্থাপন করতে, এখনও একটি যথেষ্ট পরিমাণে বয়লার-প্লেট কোড লিখতে হবে:

মজাদার আপডেট ইউজারপিরমিশন (প্যারাম: প্যারাম) =
    লগড ("updateUserPerifications ($ প্যারাম)") {
        // যুক্তি এখানে
    }

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

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