এমইএফ এবং এমএএফ (System.AddIn) এর মধ্যে নির্বাচন করা হচ্ছে


162

পরিচালিত এক্সটেনসিবিলিটি ফ্রেমওয়ার্ক (এমইএফ) এবং ম্যানেজড অ্যাডইন ফ্রেমওয়ার্ক (এমএএফ, ওরফে সিস্টেম। অ্যাডআইএন) খুব অনুরূপ কাজ সম্পাদন করছে বলে মনে হচ্ছে। এই স্ট্যাক ওভারফ্লো প্রশ্ন অনুসারে, এমইএফ কি সিস্টেম.এডিনের প্রতিস্থাপন? , আপনি এমনকি একইসাথে উভয় ব্যবহার করতে পারেন।

আপনি কখন একটি বনাম অন্যটি ব্যবহার করতে পছন্দ করবেন? কোন পরিস্থিতিতে আপনি উভয়কে একসাথে ব্যবহার করতে পছন্দ করবেন?

উত্তর:


131

আমি এই বিকল্পগুলি মূল্যায়ন করেছি এবং এখানে আমি উপসংহারে পৌঁছেছি।

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

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


5
একটি ছোট জিনিস: দয়া করে মনে রাখবেন যে আপনার অ্যাডন একটি স্থানীয় স্তরে ক্র্যাশ হলে 'স্বতন্ত্র অ্যাপডোমেন' আপনাকে সাহায্য করে না, এর জন্য আপনার এখনও কর্মী প্রক্রিয়াগুলির প্রয়োজন হবে। এমএএফ তাদের তৈরিতে কিছুটা সহায়তা করে, তবে এ জাতীয় ক্র্যাশ থেকে গতিশীলভাবে পুনরুদ্ধার করা এখনও বেশ শক্ত (তবে সম্ভব)
কোয়েটজলকোটল

@ ইয়ান: দয়া করে আমার মন্তব্যটি পুনরায় পড়ুন :) আমি ঠিক এটি লিখেছি, এবং আরও: এমএএফ সত্যিই এটির অনুমতি দেয়, তবে আপনাকে ক্রাশের পরে নিজেই উঠে পড়তে হবে।
কোয়েটজলকোটল

@ ড্যানিয়েলজি> অ্যাপডোমেনগুলি অতিক্রম করার জন্য আপনাকে দিতে হবে এমন একটি ভারী মূল্য নিয়ে আসে <এটি কেন? কত ভারি'?
মার্টিন মিজার

2
@ মার্টিনমিজার অ্যাপ্লিকেশন ডোমেনগুলি অতিক্রম করার সময় আপনাকে অবশ্যই সমস্ত কিছু সিরিয়ালাইজ করতে হবে বা মার্শালবাইরাইফ অবজেক্টটি ব্যবহার করতে হবে। যোগাযোগ একই অ্যাপ্লিকেশন ডোমেনের মধ্যে বস্তুর মধ্যে কথা বলার চেয়ে অনেক শক্ত hard
ড্যানিয়েল

65

ড্যানিয়েল যা বলেছেন তা ভাল। আমি যোগ করব:

আপনি যদি System.Addins সম্পর্কে ভিডিওগুলি দেখেন তবে তারা খুব বড় প্রকল্প সম্পর্কে স্পষ্টভাবে কথা বলছে। সে সম্পর্কে আলোচনা দলের হোস্ট অ্যাপ্লিকেশন, অন্য পরিচালনার দল প্রতিটি AddIn পরিচালনার, এবং একটি তৃতীয় দল চুক্তি এবং পাইপলাইন পরিচালনার। তার উপর ভিত্তি করে, আমি মনে করি System.Addins বৃহত্তর অ্যাপ্লিকেশনগুলির জন্য পরিষ্কারভাবে। আমি স্যাপের মতো ইআরপি সিস্টেমগুলির মতো অ্যাপ্লিকেশনগুলি ভাবছি (সম্ভবত এটি এত বড় নয় তবে আপনি ধারণাটি পাবেন)। আপনি যদি এই ভিডিওগুলি দেখে থাকেন তবে আপনি বলতে পারেন যে System.Addins ব্যবহার করার জন্য কাজের পরিমাণটি খুব বেশি। আপনার সিস্টেমের জন্য 3 য় পক্ষের অ্যাড-ইন প্রোগ্রামিংকারী সংস্থাগুলি প্রচুর পরিমাণে থাকলে এবং মৃত্যুর শাস্তির অধীনে add অ্যাড-ইন চুক্তিগুলির কোনওটি ভেঙে না ফেলতে পারলে এটি বেশ কার্যকর হবে।

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

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


1
"আপনি যদি সিস্টেম.আডদিন সম্পর্কে ভিডিওগুলি দেখেন", কোন ভিডিওগুলি? আপনি দয়া করে লিঙ্ক দিতে পারেন। আপনাকে ধন্যবাদ
জিমজিম

1
@Arjang - সেখানে চ্যানেল 9. চেষ্টা উপর একটি দম্পতি channel9.msdn.com/Blogs/DanielMoth/Managed-AddIn-Framework
ক্রিস স্পিসার

60

একটি এমএএফ অ্যাপ্লিকেশন বিকাশ এবং শিপ করে। এমএএফ সম্পর্কে আমার মতামত কিছুটা জেদ হয়েছে।

এমএএফ হ'ল "ডি-কাপলড" সিস্টেম বা সবচেয়ে খারাপ সময়ে "আলগাভাবে মিলিত" সিস্টেম। এমইএফ হ'ল "কাপলড" সিস্টেম বা সেরা "আলগা-দম্পতি" সিস্টেম।

এমএএফ ব্যবহার করে আমরা বুঝতে পারলাম যে এমএএফ সুবিধাগুলি হ'ল:

  1. অ্যাপ্লিকেশন চলাকালীন নতুন ইনস্টল করা বা বিদ্যমান উপাদানগুলি আপডেট করা। অ্যাপ্লিকেশন চলাকালীন অ্যাডইন আপডেট হতে পারে এবং আপডেটগুলি ব্যবহারকারীর কাছে নির্বিঘ্নে প্রদর্শিত হয়। তার জন্য আপনার অ্যাপডোমেনস থাকতে হবে।

  2. কেনা উপাদানগুলির ভিত্তিতে লাইসেন্সিং আমরা নিয়ন্ত্রণ করতে পারি যে ব্যবহারকারীর ভূমিকা এবং অনুমতিগুলি এবং অ্যাডইন ব্যবহারের জন্য লাইসেন্সপ্রাপ্ত কিনা তা দিয়ে কোন অ্যাডআইএন লোড হয়েছিল।

  3. দ্রুত বিকাশ (দ্রুত সময়ে বাজারে) অ্যাডইন বিকাশটি চটজলদি পদ্ধতির সাথে পুরোপুরি ফিট করে, বিকাশকারী দলটি অন্যান্য অ্যাপ্লিকেশনটির সাথে ইন্টিগ্রেশন টুকরাও বিকাশ না করেই একবারে একটি করে অ্যাডইন তৈরি করে।

  4. উন্নত কিউএ (একসাথে কেবল কিউএর একটি উপাদান)। কিউএ তারপরে একক বিট কার্যকারিতার জন্য ত্রুটিগুলি পরীক্ষা করতে এবং ইস্যু করতে পারে। পরীক্ষার কেসগুলি বিকাশ এবং প্রয়োগ করা সহজ ছিল।

  5. স্থাপনা (উপাদানগুলি বিকাশ ও প্রকাশের সাথে যুক্ত করুন এবং তারা "কেবলমাত্র কাজ করেন")। স্থাপনা কেবল একটি অ্যাডইন তৈরি এবং ফাইল ইনস্টল করার বিষয় a অন্য কোন বিবেচনার প্রয়োজন ছিল না!

  6. নতুন উপাদানগুলি পুরানো উপাদানগুলির সাথে কাজ করেছে। অ্যাডআইনগুলি যা চালিয়ে যাওয়া শুরুতে বিকাশ করা হয়েছিল। নতুন অ্যাডআইনগুলি নির্বিঘ্নে অ্যাপ্লিকেশনটিতে ফিট করে


3
উপরের সবগুলি। নেট 4 এ এমইএফ দিয়ে করেছি এবং আমি মনে করি এটি এমএফ ... এর থেকে সহজ ...
টিম

21
@ জিম: চলমান অবস্থায় আপনি কি বিদ্যমান এমইএফ অ্যাড-ইন আনইনস্টল করতে পারবেন? আমি যতদূর জানি অ্যাড-ইন এসেম্বলিটি একবার লোড হয়ে যায় না, কারণ এটি একই অ্যাপডোমাইনে রয়েছে।
স্কট হিটলক

6
@ স্কট - +১ (আমি কি একের বেশি দিতে পারি?) এখানে আরও একটি সুবিধা দেওয়া হয়নি: আপনি এমএএফ ব্যবহার করে অ্যাডিনের সুরক্ষা অধিকারগুলি স্যান্ডবক্স করতে পারেন, যখন এমইএফ-র একটি উপাদান দ্বারা ব্যবহৃত সুরক্ষা অধিকারগুলি চলমান সমান অধিকারগুলি ভাগ করে দেবে আবেদন।
ডগ

2
@ স্কটউইটলক: আপনি বোঝাচ্ছেন যে একাধিক অ্যাপডোমাইনস যা সত্য নয় তা দিয়ে এমইএফ ব্যবহার করা অসম্ভব।
এম স্ট্রামম

25

আমার দৃষ্টিতে দুটি প্রযুক্তি আসলে ব্যবহারের ক্ষেত্রে খুব আলাদা লক্ষ্য করে target

এমইএফ সাধারণত খাঁটি নির্ভরতা ইনজেকশন দৃশ্যে সবচেয়ে ভাল যেখানে চূড়ান্ত সংহত সমাধান প্রদানকারী ব্যক্তি বা গোষ্ঠী সমস্ত কিছু একত্রিত করে এবং সামগ্রিক অখণ্ডতার জন্য জোর দেওয়া হয় তবে মূল ক্ষমতাগুলির বিভিন্ন বাস্তবায়ন প্রয়োজন have

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

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


18

আমি সবেমাত্র এই দীর্ঘ নিবন্ধটি এমএএফ এবং এমইএফ উভয়ই নিয়ে আলোচনা করেছি। http://emcpadden.wordpress.com/2008/12/07/managed-extensibility-framework-and-others/

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

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


9

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

এমইএফ: এমইএফ অংশ ব্যবহার করে সাধারণ ক্যালকুলেটর উদাহরণ
( এম অ্যানাজেড এক্সটেনসিবিলিটি এফ রামওয়ার্ক)

  • এমইএফ প্রযুক্তি ব্যবহার করে কীভাবে একটি সাধারণ ক্যালকুলেটর তৈরি করা যায় তা দেখায়। বহিরাগত dlls কীভাবে লোড করবেন তা দেখায় না। (কিন্তু আপনি কেবল ব্যবহার করে উদাহরণস্বরূপ পরিবর্তন করতে পারেন catalog.Catalogs.Add(new DirectoryCatalog("Plugins", "*.dll")); পরিবর্তে ব্যবহার catalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly));এবং পৃথক ডিএলএল প্রকল্পে ক্যালকুলেটর কোড এবং চুক্তি নিষ্কর্ষ।)
  • MEF নেই , একটি নির্দিষ্ট ডিরেক্টরির কাঠামো থাকতে হবে এটা সহজ এবং ব্যবহার করা সহজবোধ্য এমনকি ছোট প্রকল্পের জন্য। এটি রফতানি কী, যা পড়া এবং বুঝতে সহজ , তা ঘোষণা করার জন্য বৈশিষ্ট্যগুলির সাথে কাজ করেউদাহরণ: [Export(typeof(IOperation))] [ExportMetadata("Symbol", '+')] class Add: IOperation { public int Operate(int left, int right) { return left + right; } }

  • এমইএফ স্বয়ংক্রিয়ভাবে সংস্করণটির সাথে ডিল করে না

এমএএফ: ভি 1 এবং ভি 2 সংস্করণ এমএএফ প্লাগইন সহ সাধারণ ক্যালকুলেটর
( এম অ্যাজেড ডিডিন এফ রামওয়ার্ক)

  • ভি 1 প্লাগইন ব্যবহার করে কীভাবে ক্যালকুলেটরটি তৈরি করা যায় এবং কীভাবে পশ্চাতে-সামঞ্জস্যতা বজায় রেখে কোনও ভি 2 প্লাগইনে যেতে হবে তা দেখায় ( দ্রষ্টব্য: আপনি এখানে প্লাগইনের ভি 2 সংস্করণটি খুঁজে পেতে পারেন , মূল নিবন্ধের লিঙ্কটি নষ্ট হয়েছে)
  • এমএএফ একটি নির্দিষ্ট ডিরেক্টরি কাঠামো প্রয়োগ করে এবং এটিকে কাজ করার জন্য এটির প্রচুর বয়লারপ্লেট কোড প্রয়োজন, তাই আমি ছোট প্রকল্পগুলির জন্য এটি প্রস্তাব করি না। উদাহরণ:
    Pipeline
      AddIns
        CalcV1
        CalcV2
      AddInSideAdapters
      AddInViews
      Contracts
      HostSideAdapters
    

এমইএফ এবং এমএএফ উভয়ই .NET ফ্রেমওয়ার্ক 4.x এ অন্তর্ভুক্ত রয়েছে। আপনি যদি দুটি উদাহরণ তুলনা করেন তবে খেয়াল করবেন যে এমএএফ প্লাগইনগুলিতে এমইএফ কাঠামোর তুলনায় অনেক বেশি জটিলতা রয়েছে - সুতরাং সেই ফ্রেমওয়ার্কগুলির মধ্যে কোনটি ব্যবহার করবেন সে সম্পর্কে আপনাকে সাবধানে চিন্তা করতে হবে।


3

এমএএফ এবং এমইএফ উভয়ই অ্যাপডোমাইনগুলি ব্যবহার করতে পারে এবং উভয়ই রানটাইমে dll লোড / আনলোড করতে পারে। তবে আমি যে পার্থক্যগুলি পেয়েছি সেগুলি হ'ল: এমএএফ অ্যাডআইনগুলি ডিকপলড হয়, এমইএফ উপাদানগুলি looseিলে ;ালা হয়; এমএএফ "অ্যাক্টিভেটস" (নতুন উদাহরণ) যখন এমইএফ ডিফল্টরূপে দৃষ্টান্তগুলি তৈরি করে।

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

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