কীভাবে একটি নমনীয় প্লাগ-ইন আর্কিটেকচার তৈরি করবেন?


154

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

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

আমি যে বিভিন্ন আর্কিটেকচারের সাথে কাজ করেছি সেগুলি শিখতে চাইলে আমি সম্প্রদায়ের কাছে পরামর্শের জন্যও খুঁজছি। আপনি কীভাবে একটি সলিড প্লাগ-ইন আর্কিটেকচার বাস্তবায়ন করেছেন? আপনার সবচেয়ে খারাপ ব্যর্থতা (বা আপনি দেখেছেন সবচেয়ে খারাপ ব্যর্থতা) কী ছিল? আপনি যদি একটি নতুন প্লাগ-ইন আর্কিটেকচার বাস্তবায়ন করতে যাচ্ছেন তবে আপনি কী করবেন? আপনি কোন SDK বা ওপেন সোর্স প্রকল্প নিয়ে কাজ করেছেন যে কোনও ভাল স্থাপত্যের সর্বোত্তম উদাহরণ রয়েছে?

কয়েকটি উদাহরণ আমি নিজেই খুঁজে পেয়েছি:

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


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

@ এমডিএমএ - এটি একটি দুর্দান্ত প্রশ্ন। আমি বলব এক্সটেনসিবল সিস্টেমে কিছু সাধারণ লক্ষ্য রয়েছে। লক্ষ্যগুলি সাধারণ যেগুলি সাধারণ, এবং সিস্টেমটি কতটা প্রসারিত হওয়া দরকার, সিস্টেমটি কোন ভাষায় লিখিত আছে এবং এর উপর নির্ভর করে সর্বোত্তম সমাধানটি পরিবর্তিত হয়। তবে, আমি দেখতে পাই যে অনেকগুলি ল্যাঙ্গাগুলিতে আইওসি প্রয়োগ করা হচ্ছে এবং বারবার একই ধরণের প্লাগিনগুলি করতে (একই কার্যকারিতা অনুরোধের প্রতিক্রিয়ায় টুকরো টুকরো টুকরো করার জন্য) করতে বলা হয়েছে been আমি মনে করি বিভিন্ন ধরণের প্লাগইনগুলির জন্য সেরা অনুশীলনের একটি সাধারণ ধারণা পাওয়া ভাল।
justkt

উত্তর:


89

এটি সম্ভাব্য উপকারী মন্তব্য / উদাহরণগুলির একগুচ্ছ হিসাবে কোনও উত্তর নয় ।

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

  • একটি অ্যাপ্লিকেশন যা আমি একটু বাড়িয়েছি তা ট্র্যাক । এটির একটি উপাদান আর্কিটেকচার রয়েছে যা এই পরিস্থিতিতে মানে কাজগুলি মডিউলগুলিতে প্রেরণ করা হয় যা এক্সটেনশন পয়েন্টগুলি বিজ্ঞাপন করে advertise এরপরে আপনি অন্যান্য উপাদানগুলি প্রয়োগ করতে পারেন যা এই পয়েন্টগুলির সাথে খাপ খায় এবং প্রবাহ পরিবর্তন করে। এটি উপরে কাল্কির পরামর্শ মতো কিছুটা।

  • আর একটি যা ভাল তা হ'ল পাইস্টেস্ট । এটি "সেরা এপিআই হ'ল কোনও এপিআই নয়" দর্শনের অনুসরণ করে এবং প্রতিটি স্তরে ডাকা হুকের উপর পুরোপুরি নির্ভর করে। আপনি এই হুকগুলি ফাইল বা ফাংশনগুলিতে একটি কনভেনশন অনুসারে ওভাররাইড করতে পারেন এবং আচরণটি পরিবর্তন করতে পারেন। তারা কত দ্রুত / সহজে প্রয়োগ করা যায় তা দেখতে আপনি সাইটে প্লাগইনগুলির তালিকা দেখতে পারেন।

কয়েকটি সাধারণ বিষয়।

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

1
স্ক্রিপ্টিং ভাষার বিন্দুটি আমি প্রসারিত করব যে পাইথন বা পার্লের মতো বিদ্যমান ভাষা এম্বেড করার জন্য বিবেচনা করা ভাল
রুডি

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

24

আমার অভিজ্ঞতায় আমি খুঁজে পেয়েছি যে সত্যিই দুটি ধরণের প্লাগইন আর্কিটেকচার রয়েছে।

  1. এক Eclipse modelস্বাধীনতার অনুমতি দেওয়ার জন্য বোঝানো এবং এটি উন্মুক্ত রয়েছে।
  2. অন্যটিকে সাধারণত অনুসরণ করতে প্লাগইন প্রয়োজন narrow APIকারণ প্লাগইন একটি নির্দিষ্ট ফাংশন পূরণ করবে fill

এটিকে অন্যভাবে বর্ণনা করতে , একটি প্লাগইন আপনার অ্যাপ্লিকেশন অ্যাক্সেস করতে দেয় অন্যদিকে আপনার অ্যাপ্লিকেশনটিকে প্লাগইন অ্যাক্সেস করতে দেয়

পার্থক্যটি সূক্ষ্ম, এবং কখনও কখনও কোনও বিভেদ থাকে না ... আপনি উভয়ই আপনার আবেদনের জন্য চান।

প্লাগইন মডেলটিতে আপনার অ্যাপ্লিকেশনটি খোলার / খোলার বিষয়ে আমার কাছে এক টন অভিজ্ঞতা নেই (কালকের পোস্টের নিবন্ধটি দুর্দান্ত)। গ্রহণের কাজগুলি করার পথে আমি কিছুটা পড়েছি, তবে এর চেয়ে বেশি কিছুই নেই।

ইয়েজের বৈশিষ্ট্য ব্লগটি কীভাবে বৈশিষ্ট্য প্যাটার্নের ব্যবহার প্লাগিন এবং এক্সটেনসিবিলিটির জন্য অনুমতি দেয় সে সম্পর্কে কিছুটা কথা বলে।

আমার বেশিরভাগ কাজ আমার অ্যাপ্লিকেশনটিকে প্লাগইনগুলি, সময় / প্রদর্শন / মানচিত্রের ডেটা ইত্যাদির অ্যাক্সেসের অনুমতি দেওয়ার জন্য একটি প্লাগইন আর্কিটেকচার ব্যবহার করেছে

বছরগুলি আগে আমি এগুলি পরিচালনা করার জন্য কারখানা, প্লাগইন পরিচালক এবং কনফিগার ফাইল তৈরি করতাম এবং রানটাইমে কোন প্লাগইন ব্যবহার করতে হবে তা নির্ধারণ করতাম।

  • এখন আমি সাধারণত DI frameworkসেই কাজটির বেশিরভাগ কাজ করি।

তৃতীয় পক্ষের গ্রন্থাগারগুলি ব্যবহার করার জন্য আমাকে এখনও অ্যাডাপ্টারগুলি লিখতে হবে, তবে তারা সাধারণত খারাপ হয় না।


@ জাস্টিন হ্যাঁ, ডিআই = নির্ভরতা ইনজেকশন।
ডেরিভেশন

14

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

http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html


অবশ্যই একটি ভাল উদাহরণ, তবে এটি অনেক বেশি অ্যাপ্লিকেশনগুলির চেয়ে বড় এবং আরও জটিল?
justkt

হ্যাঁ এটি হতে পারে, নমনীয়তা বৃদ্ধি ব্যয় সঙ্গে আসে। তবে আমি মনে করি এটি একটি ভিন্ন দৃষ্টিভঙ্গি দেখায়। আপনার অ্যাপ্লিকেশনটির মেনুটি প্লাগ-ইন বা মূল দর্শন হতে পারে না কেন?
প্যাট্রিক

6
সিমফনি ফ্রেমওয়ার্কের নতুন সংস্করণে একই পদ্ধতির (সবকিছুই একটি প্লাগইন) ব্যবহৃত হয়। এগুলিকে বান্ডিল বলা হয় তবে নীতিটি একই। এটি আর্কিটেকচারটি মোটামুটি সহজ, সম্ভবত আপনার এটি দেখতে হবে: symfony-reloaded.org/quick-tour-part-4
মারিজন হুইজেন্ডভেल्ड

@ মারজিন হুইজেন্ডভেল্ড - আপনার আলাদা উত্তর হিসাবে এটি যুক্ত করা উচিত যাতে আমি উত্তরটিকে উচ্চতর করতে পারি। দেখতে আকর্ষণীয় কাঠামোর মতো!
justkt

11

আমি অতীতে আমার ব্যবহার করা মোটামুটি সহজ কৌশলটি বর্ণনা করব। প্লাগইন লোডিং পদ্ধতিতে সহায়তা করার জন্য এই পদ্ধতির C # প্রতিবিম্ব ব্যবহার করা হয়। এই কৌশলটি সংশোধন করা যায় তাই এটি সি ++ এর জন্য প্রযোজ্য তবে আপনি প্রতিবিম্বটি ব্যবহার করতে সক্ষম হবেন এমন সুবিধাটি হারাবেন।

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

প্লাগইনগুলি সন্ধানের জন্য অ্যাপ্লিকেশন। নেট অ্যাসেমব্লিশগুলির জন্য একটি প্লাগইন ফোল্ডার স্ক্যান করে। প্রতিটি সমাবেশ বোঝাই করা হয়। প্রতিচ্ছবি প্রয়োগ করে এমন ক্লাসগুলির জন্য স্ক্যান করতে ব্যবহৃত হয় IPlugin। প্রতিটি প্লাগইন ক্লাসের একটি উদাহরণ তৈরি করা হয়।

(বিকল্পভাবে, একটি এক্সএমএল ফাইল অ্যাসেম্বলি এবং ক্লাসগুলি লোডের জন্য তালিকাবদ্ধ করতে পারে This এটি পারফরম্যান্সে সহায়তা করতে পারে তবে আমি কার্য সম্পাদন নিয়ে কোনও সমস্যা পাইনি)।

Initপদ্ধতি প্রতিটি প্লাগইন বস্তুর জন্য বলা হয়। এটি অ্যাপ্লিকেশন ইন্টারফেস প্রয়োগ করে IApplicationএমন কোনও সামগ্রীর একটি রেফারেন্স পাশ করা হয়েছে: (বা আপনার অ্যাপ্লিকেশনটির নির্দিষ্ট নামযুক্ত, যেমন আইটিেক্সটএডিটর অ্যাপ্লিকেশন)।

IApplicationপ্লাগইনটিকে অ্যাপ্লিকেশনটির সাথে যোগাযোগ করতে দেয় এমন পদ্ধতি রয়েছে। উদাহরণস্বরূপ আপনি যদি কোনও পাঠ্য সম্পাদক লিখছেন তবে এই ইন্টারফেসটির এমন একটি OpenDocumentsসম্পত্তি থাকবে যা প্লাগইনগুলিকে বর্তমানে খোলার দস্তাবেজগুলির সংকলন গণনা করতে দেয়।

এই প্লাগইন সিস্টেমটি স্ক্রিপ্টিং ভাষাগুলিতে বাড়ানো যেতে পারে, উদাহরণস্বরূপ লুয়া, একটি উত্পন্ন প্লাগইন ক্লাস তৈরি করে, যেমন ফাংশন এবং অ্যাপ্লিকেশন ইন্টারফেসটিকে লুয়া স্ক্রিপ্টে LuaPluginফরোয়ার্ড IPluginকরে।

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


7

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

আপনি যদি আগ্রহী হন তবে আরও পড়ুন ...


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

আসলে এমইএফটি কেবল নেট নেট ফ্রেমওয়ার্কের জন্যই আমি অন্যান্য ফ্রেমওয়ার্কগুলি সম্পর্কে কিছুই জানতে পারি না
বালক্যাংগ্রাফ

7

আমি একবার এমন একটি প্রকল্পে কাজ করেছি যেটি প্রতিটি গ্রাহককে সিস্টেম সেটআপ করতে পারে এমনভাবে নমনীয় হতে হয়েছিল, যা আমরা পেয়েছি কেবলমাত্র ভাল নকশা গ্রাহককে একটি সি # সংকলক পাঠানো!

যদি স্পেকটি এই শব্দগুলিতে পূর্ণ হয়:

  • নমনীয়
  • প্লাগ লাগানো
  • স্বনির্ধারিত

আপনি কীভাবে এই সিস্টেমটিকে সমর্থন করবেন (এবং কীভাবে সহায়তার জন্য চার্জ নেওয়া হবে, সেহেতু প্রতিটি গ্রাহকই মনে করবেন যে তাদের কেসটি স্বাভাবিক ক্ষেত্রে এবং কোনও প্লাগ-ইনগুলির প্রয়োজন হবে না) এই সম্পর্কে প্রচুর প্রশ্ন জিজ্ঞাসা করুন,

প্লাগ-ইনগুলি লেখার জন্য গ্রাহকদের সমর্থন (বা ফাউন্ট-লাইন সমর্থনকারী লোক) আর্কিটেকচারের চেয়ে অনেক বেশি শক্ত


5

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

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

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

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


3

আমি মনে করি আপনাকে প্রথমে এই প্রশ্নের উত্তর দেওয়া দরকার: "কোন উপাদানগুলি প্লাগইন হিসাবে প্রত্যাশিত?" আপনি এই সংখ্যাটিকে নিখুঁত ন্যূনতম বা সংমিশ্রণের সংখ্যায় রাখতে চান যা আপনাকে বিস্ফোরণে পরীক্ষা করতে হবে। আপনার মূল পণ্যটি (যা খুব বেশি নমনীয়তা থাকা উচিত নয়) প্লাগইন কার্যকারিতা থেকে আলাদা করার চেষ্টা করুন।

আমি খুঁজে পেয়েছি যে আইওসি (নিয়ন্ত্রণের বিপরীতমুখী) প্রিন্সিপাল (স্প্রিংফ্রেমে ওয়ার্ক পড়ুন) একটি নমনীয় বেস সরবরাহের জন্য ভাল কাজ করে, যা আপনি প্লাগইন বিকাশকে আরও সহজ করার জন্য বিশেষীকরণ যুক্ত করতে পারেন।

  • আপনি "প্লাগইন ধরণের বিজ্ঞাপন হিসাবে" ইন্টারফেসের জন্য ধারকটি স্ক্যান করতে পারেন।
  • প্লাগিনগুলির প্রয়োজন হতে পারে এমন সাধারণ নির্ভরতা ইনজেকশন করতে আপনি ধারকটি ব্যবহার করতে পারেন (যেমন রিসোর্সলোডারআওয়ার বা মেসেজসোর্সেসওয়্যার)।

1

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

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