অ্যাসপেক্ট ওরিয়েন্টেড প্রোগ্রামিং ক্রস কাটনের উদ্বেগের সাথে মোকাবিলা করার প্রতিশ্রুতি দেয়, তবে আমি এখনও এটিতে পুরোপুরি বিক্রি করি নি। এই সমস্যাটি মোকাবিলার জন্য কি অন্য কোনও প্রচেষ্টা হয়েছে?
অ্যাসপেক্ট ওরিয়েন্টেড প্রোগ্রামিং ক্রস কাটনের উদ্বেগের সাথে মোকাবিলা করার প্রতিশ্রুতি দেয়, তবে আমি এখনও এটিতে পুরোপুরি বিক্রি করি নি। এই সমস্যাটি মোকাবিলার জন্য কি অন্য কোনও প্রচেষ্টা হয়েছে?
উত্তর:
যখন সম্ভব হয়, আপনি নির্ভরশীলতা ইঞ্জেকশনের মাধ্যমে অ্যাপ্লিকেশন জুড়ে ব্যবহৃত আলাদা আলাদা মডিউলগুলিতে ক্রস কাটিয়া উদ্বেগকে আবদ্ধ করতে পারেন। এটি আপনাকে কোড জুড়ে এর ব্যবহার থেকে ক্রস কাটিয়া উদ্বেগের বাস্তবায়ন কিছুটা দ্বিগুণ করতে দেয়।
যদিও এটি সর্বদা মার্জিতভাবে কাজ করে না। এ কারণেই লোকেরা এওপি-র মতো জিনিস দিয়ে বিষয়টি সমাধান করার চেষ্টা করছে।
অন্য দুটি বিকল্প যা আমি এখনও অন্বেষণ করতে দেখিনি:
মনডস এবং তীরগুলি সহ ফাংশনাল প্রোগ্রামিং
এফপিতে আপনি যে কোনও কিছুর মতো ক্রস কাটিং উদ্বেগকে প্রতিনিধিত্ব করেন: কিছু হিসাবে আপনি কোনও ফাংশন কলটিতে পাস করেন। যেহেতু এটি স্পষ্টভাবে ক্লান্তিকর হয়ে ওঠে, আপনি অতিরিক্ত তথ্য প্রেরণ করে লুকিয়ে রাখতে Monads (বা সম্ভবত তীরগুলি) ব্যবহার করতে পারেন।
সর্বাধিক সাধারণ এওপি উদাহরণ হ'ল লগিং। মোনাডসের সাহায্যে আপনি একটি "লগার" মোনাদ তৈরি করবেন যা বার্তাগুলির একটি তালিকা রাখে। লগারমোনাদের মাধ্যমে আপনি যে কোনও কার্য সম্পাদন করেন তা লগ বার্তা পোস্ট করার ক্ষমতা রাখে। তীরগুলির সাহায্যে, আপনি অ্যাপ্লিকেশনটির পুরো ডেটা প্রবাহকে মডেল করবেন এবং উপযুক্ত যেখানে মডেলটিতে লগিং রুটিন কাজ করবেন। আমি মনে করি. তীরগুলি বেশ জটিল।
সত্তা / উপাদান-ভিত্তিক প্রোগ্রামিং
গেম ইঞ্জিনের জন্য আমি যে কিছু নিয়ে গবেষণা এবং পরীক্ষা করছি। ওওপি-র মতো "অবজেক্টস" এর পরিবর্তে, আপনি সমস্ত ধরণের ডেটা (উপাদান) এবং পরিষেবাদির প্যাকেটে বিভক্ত করে থাকেন যা এক ধরণের উপাদানকে পরিচালনা করে। রিলেশনাল ডাটাবেসের মতো উপাদানগুলি সাধারণ আইডি দ্বারা একত্রে শ্রেণিবদ্ধ করা হয় এবং সংযুক্ত উপাদানগুলির গ্রুপ হ'ল সত্তা। এই জাতীয় সিস্টেমে লগিং যোগ করার জন্য, আপনি কোনও নতুন লগিং পরিষেবা যুক্ত করবেন যার উপর ভিত্তি করে কোন উপাদানগুলি এর মধ্য দিয়ে চলেছে তার উপর ভিত্তি করে ট্রিগারগুলি।
উভয় পদ্ধতিই একজনকে খুব সহজেই একটি ক্রস কাটিয়া পরিবর্তন সহজেই কাজ করতে দেয় তবে উভয়ই উচ্চ স্তরের স্থাপত্যের মডেল। সুতরাং আপনার সম্ভবত প্রথম থেকেই এগুলি ব্যবহার করা দরকার। উপাদান উপাদানটি তাত্ত্বিকভাবে একটি বিদ্যমান ওওপি সিস্টেমে কাজ করা যেতে পারে। আমি অনুমান করি যে আপনার ভাষা যথেষ্ট শক্তিশালী হলে মনাদগুলি খুব বেশি হতে পারে।
ক্রসকাটটিং উদ্বেগের সমস্যাগুলি মোকাবেলায় বিভিন্ন উপায় রয়েছে:
উন্নততর নকশার প্যাটার্ন, আইডিয়ামস বা অ্যাবস্ট্রাকশন মেকানিজম ব্যবহার করুন : কোডটি সংশোধন করা সত্ত্বেও কোড ক্রসকাটিং হতে পারে। কোডটি বজায় রাখার জন্য, আপনাকে ডিজাইনের কৌশলটি ব্যবহার করতে রেফ্যাক্টর লাগবে যা এটির সংশোধন করতে পারে। এই ধরনের রিফ্যাক্টরিং একটি ভিন্ন ধরণের ক্রসকাটিং প্রবর্তন করতে পারে তবে আশা করি ক্রসকাটগুলি স্থিতিশীল এবং পরিবর্তনের সম্ভাবনা নেই।
রিচার ল্যাঙ্গুয়েজের বৈশিষ্ট্যগুলি বিকাশ করুন : ক্রসকাটিংয়ের অনেকগুলি প্রকাশ আরও ভাল বিমূর্তকরণ ব্যবস্থার মাধ্যমে সমাধান করা যেতে পারে এবং কখনও কখনও নতুন ভাষার বৈশিষ্ট্যগুলি প্রয়োজন। উদাহরণস্বরূপ, আরও উন্নত ভাষাগুলিতে যা কার্যকরী এবং অবজেক্ট-ভিত্তিক বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে প্রায়শই অনেকগুলি নকশার নিদর্শন হিসাবে নিয়োগ করে না কারণ এগুলি প্রয়োজনীয় নয়। নোট করুন যে নকশার ধরণগুলি এগুলি প্রকৃতির ক্রসকাটিং হতে পারে , কারণ তারা বিভিন্ন বিভিন্ন বস্তু এবং শ্রেণীর ভূমিকা বর্ণনা করে। জাভাতে প্রায়শই প্রতিস্থাপনের পরিবর্তে প্রায়শই ব্যবহার করা যায়, যদিও বেশি রানটাইম ব্যয়ে। উদাহরণস্বরূপ, প্রতিবিম্ব ব্যবহার করে, আপনি কয়েক দফা কোডের সাথে কয়েকশ শ্রেণিতে দর্শকের প্যাটার্নটিকে সমর্থন করতে পারেন। ডিজে গ্রন্থাগারউত্তর-পূর্ব থেকে একটি প্রতিফলিত সমাধান যা কেবল এটি করে। মিক্সিনগুলি সি ++ এ উপলব্ধ একটি শক্তিশালী কৌশল (তবে জাভা নয়) এবং আপনাকে একই দিক হিসাবে ব্যবহারের কয়েকটি ক্ষেত্রে দিতে পারে।
উন্নততর সরঞ্জাম সহায়তা সরবরাহ করুন : grep
রিফ্যাক্টরিং অপারেশন ব্যবহার ও সম্পাদনের মতো কৌশলগুলি ক্রসকাটিং কোড সম্পর্কিত সমস্যাগুলি মোকাবেলা করতে পারে। উদাহরণস্বরূপ, একটি ইন্টারফেসে ঘোষিত একটি পদ্ধতির নাম প্রোগ্রাম জুড়ে কাটা যেতে পারে। (এখানে প্রযুক্তিগত পার্থক্যটি নোট করুন: এটি পদ্ধতির নাম, পদ্ধতির প্রয়োগ নয়, ক্রসকাটস) আপনার কোডের যে জায়গাগুলি নাম ব্যবহার করে এইভাবে, যখন প্রোগ্রামিং পরিবেশটি আপনার পক্ষে যথেষ্ট পরিমাণে অভিব্যক্তিপূর্ণ হয় তখন ভাষার বৈশিষ্ট্যগুলির প্রয়োজন না হয়।
ডোমেন-সুনির্দিষ্ট ভাষাগুলি ব্যবহার করুন : প্রাথমিক দিকের ভাষাগুলি, যা এসপেক্টজে-এর আগে এসেছিল, সেগুলি ডোমেন-নির্দিষ্ট ছিল এবং কেবলমাত্র কিছু সমস্যা যেমন থ্রেড সিঙ্ক্রোনাইজেশন বা ফাংশন রচনাগুলি দক্ষতার সাথে সংযুক্ত করার জন্য ডেটা-প্রবাহ বিশ্লেষণ হিসাবে প্রয়োগ করা হয়েছিল। এই ভাষাগুলি পরীক্ষামূলক ছিল, তবে উদ্বেগগুলি মডুলারাইজিংয়ে অত্যন্ত সফল বলে মনে হয়েছিল যে অন্যথায় ক্রসকাটিং ছিল।
জেনেরেটিভ প্রোগ্রামিং কৌশলগুলি ব্যবহার করুন : মেটা স্তর পর্যন্ত পদক্ষেপটি দৃষ্টিভঙ্গি প্রোগ্রামিংয়ের জন্য একটি বাস্তবায়ন কৌশল হিসাবে বিবেচিত হতে পারে, তবে এটি একটি সহজ যথেষ্ট ক্ষেত্র যা এটি সাধারণ দিকগুলি ছাড়িয়ে যায়। উত্পাদনের কৌশল (যেখানে কোনও প্রোগ্রাম অন্য প্রোগ্রামের উত্স কোড উত্পন্ন করে) এছাড়াও ডোমেন-নির্দিষ্ট ভাষার সাথে সম্পর্কিত।
এই সমস্তগুলির জন্য, আমি মনে করি এওপি অধ্যয়ন করা উপযুক্ত। আপনি কোনও এওপি ভাষা ব্যবহার না করেও এওপি আপনাকে কোড সম্পর্কে আপনার ধারণাগুলি প্রসারিত করতে সহায়তা করতে পারে।
সাধারণভাবে একটি ঘোষিত বৈশিষ্ট্যযুক্ত কোড উপাদানগুলিতে, তবে বিশেষত সি # /। নেট / মনো বিশ্বের অ্যাট্রিবিউট সিস্টেম।
আমি এওপি-তে কোনও বিশেষজ্ঞ নই, তবে বছরের পর বছর ধরে এটি পড়া থেকে, এটি সবসময়ই লিস্পের দ্বারা প্রদত্ত রূপক রূপকটির দুর্বল রূপের মতো বলে মনে হয়েছে , বিশেষত এর মেটাওবজেক্ট প্রোটোকলের মতো অংশগুলি।
এটি কোনও আশ্চর্য হিসাবে দেখা উচিত নয়, আমার ধারণা: গ্রেগর কিকজালেস এএমওপির অন্যতম লেখক এবং পরে জাভা-র জন্য এসপেক্টজে লিখেছিলেন!