গেমটি দেরিতে আসছে, তবে আমি এটি পরবর্তী বিকাশকারীদের জন্য সরবরাহ করি যারা এই প্রশ্নটি পেরিয়ে যেতে পারে।
আপনার অ্যাপ্লিকেশন যদি এটি সঠিকভাবে পরিচালনার জন্য নির্ভর করে তবে আমি এওপির বিরুদ্ধে দৃ strongly়ভাবে পরামর্শ দেব would দিকগুলি এর মতো কাজ করে:
- পরামর্শ (অতিরিক্ত আচরণ) প্রয়োগ করা হয়
- পয়েন্টগুলিতে যোগদান করুন (যে জায়গাগুলিতে অতিরিক্ত কোড সংযুক্ত করা যেতে পারে, এই জাতীয় পদ্ধতি শুরু বা শেষ হতে পারে বা কোনও প্রদত্ত ইভেন্ট ট্রিগার হয়ে থাকে)
- ... যেখানে পয়েন্টকুট (একটি প্যাটার্ন যা একটি প্রদত্ত জোড় পয়েন্ট মিলছে কিনা তা সনাক্ত করে) প্যাটার্নগুলি মেলে
যে কেউ দীর্ঘকাল ধরে কম্পিউটার করছে, তার জন্য যে নিদর্শনগুলি ব্যবহৃত হয় তা নিবিড়ভাবে দেখার জন্য হতে পারে। সুতরাং এখানে পয়েন্টকাটের একটি উদাহরণ set
যা যুক্তি নির্বিশেষে নামের যে কোনও পদ্ধতির সাথে মেলে :
call(* set(..))
সুতরাং এটি মোটামুটি ঝাপটানো পয়েন্টকুট এবং এটি পরিষ্কার হওয়া উচিত যে যত্ন সহকারে এটি পরিচালনা করার পরামর্শ দেওয়া হয় (কোনও পাং উদ্দেশ্য নয়) কারণ আপনি অনেকগুলি বিষয়ে পরামর্শ প্রয়োগ করছেন।
বা হ্যাক, আসুন নাম বা স্বাক্ষর নির্বিশেষে সমস্ত কিছুতে পরামর্শ প্রয়োগ করুন !
execution(* *(..))
সুতরাং স্পষ্টত আমাদের সাবধান হওয়া উচিত কারণ এখানে প্রচুর শক্তি রয়েছে তবে এটি দিকগুলির বিরুদ্ধে কোন যুক্তি নয় - এটি সাবধানতার পক্ষে যুক্তি কারণ এখানে প্রচুর শক্তি রয়েছে এবং প্যাটার্ন মিলটি সহজেই উদ্ভট হতে পারে (কেবল আপনার পছন্দসই অনুসন্ধান ইঞ্জিনে আঘাত করুন) অ্যাওপ বাগ এবং মজা করুন)।
তুলনামূলকভাবে নিরাপদ পয়েন্টকাটের মতো দেখতে এখানে দেখুন:
pointcut setter(): target(Point) &&
( call(void setX(int)) ||
call(void setY(int)) );
নাম setX
বা setY
কোনও Point
বস্তুর নাম পাওয়া যায় এমন পদ্ধতিগুলি স্পষ্টভাবে পরামর্শ দেয় । পদ্ধতিগুলি কেবলমাত্র গ্রহণ করতে পারে int
এবং সেগুলি অবশ্যই হবে void
। দেখতে বেশ নিরাপদ, তাই না? ঠিক আছে, যদি সেই পদ্ধতিগুলি বিদ্যমান থাকে এবং আপনি সঠিক পরামর্শটি প্রয়োগ করেন তবে এটি নিরাপদ। যদি না হয়, খুব খারাপ; এটি নিঃশব্দে ব্যর্থ হয়।
একটি উদাহরণ দেওয়ার জন্য, একটি বন্ধু একটি জাভা অ্যাপ্লিকেশনটি ডিবাগ করার চেষ্টা করছিল যেখানে প্রত্যেকেরই একবারে দুর্দান্ত ফলাফল আসবে। এটি একটি অকালীন ব্যর্থতা এবং বিশেষত কোনও বিশেষ ঘটনা বা ডেটার সাথে সম্পর্কযুক্ত বলে মনে হয় নি। এটি একটি থ্রেডিং বাগ ছিল, যা পরীক্ষা বা সনাক্ত করা কুখ্যাতভাবে কঠিন। দেখা যাচ্ছে যে, তারা পদ্ধতিগুলিকে তালাবদ্ধ করার জন্য এবং তাদের "থ্রেড নিরাপদ" করার জন্য দিকগুলি ব্যবহার করছিল, তবে একজন প্রোগ্রামার একটি পদ্ধতির নাম পরিবর্তন করে এবং একটি পয়েন্টকুট এটির সাথে মেলে না, ফলে অ্যাপ্লিকেশনটি চুপ করে যায়।
সুতরাং, আমি লোকদের বলছি যে তাদের অবশ্যই ব্যতিক্রমগুলির মতো দিকগুলি চিকিত্সার জন্য এওপি ব্যবহার করতে হবে: একটি সু-নকশিত সিস্টেমে এবং যদি কিছু ভুল না হয় তবে সেগুলি সরানো যেতে পারে এবং সফ্টওয়্যারটি এখনও সঠিকভাবে কাজ করে। যাইহোক, যদি প্রোগ্রামটির কার্যকারিতাটি এওপি-র উপর নির্ভর করে, আপনি আপনার প্রোগ্রামটির একটি অনর্থক যা অযাচিত তা প্রবর্তন করেন।
সুতরাং, লগিং, ডিবাগিং এবং ট্রেসিং এমন আচরণগুলির দুর্দান্ত উদাহরণ যা দিকগুলির জন্য উপযুক্ত, তবে সুরক্ষা? নাঃ। থ্রেড সুরক্ষা? নাঃ।
এওপি-র শক্তিশালী বিকল্পের জন্য, বৈশিষ্ট্যগুলি দেখুন । ভাষায় বল্টু হওয়ার পরিবর্তে এগুলি সরাসরি এতে সংহত করা হয়, "বৈশিষ্ট্য সচেতন" আইডিই প্রয়োজন হয় না (যদিও এটি সাহায্য করতে পারে) এবং আপনার প্রয়োজনীয় পদ্ধতিগুলি উপস্থিত না থাকলে সংকলন-সময় ব্যর্থতা থাকতে হবে। উদ্বেগ পৃথকীকরণ পরিচালনা করার জন্য বৈশিষ্ট্যগুলি বেশ পরিচ্ছন্ন কাজ করে কারণ সমস্যাটি শুরু থেকেই আরও ভালভাবে সংজ্ঞায়িত করা হয়েছিল। আমি এগুলি ব্যাপকভাবে ব্যবহার করি এবং তারা দুর্দান্ত।