প্রধান সি # ডিআই / আইওসি ফ্রেমওয়ার্কগুলি কীভাবে তুলনা করবেন? [বন্ধ]


308

পবিত্র যুদ্ধের অঞ্চলে পা রাখার ঝুঁকিতে, এই জনপ্রিয় ডিআই / আইওসি ফ্রেমওয়ার্কগুলির শক্তি এবং দুর্বলতাগুলি কী কী এবং সহজেই কী সেরাটিকে বিবেচনা করা যেতে পারে? ..:

  • Ninject
  • ঐক্য
  • Castle.Windsor
  • Autofac
  • StructureMap

আমি এখানে তালিকাভুক্ত না করে সি # এর জন্য কি অন্য কোনও ডিআই / আইওসি ফ্রেমওয়ার্ক রয়েছে?

আমার ব্যবহারের ক্ষেত্রে, আমি একটি ক্লায়েন্ট ডাব্লুপিএফ অ্যাপ্লিকেশন এবং একটি ডাব্লুসিএফ / এসকিউএল পরিষেবা অবকাঠামো তৈরি করছি, ব্যবহারের সহজতা (বিশেষত পরিষ্কার এবং সংক্ষিপ্ত বাক্য গঠন হিসাবে), ধারাবাহিক ডকুমেন্টেশন, ভাল সম্প্রদায় সমর্থন এবং কার্য সম্পাদন সব গুরুত্বপূর্ণ বিষয় আমার পছন্দ অনুসারে

হালনাগাদ:

উদ্ধৃত সংস্থান এবং সদৃশ প্রশ্নগুলি পুরানো বলে মনে হচ্ছে, এই সমস্ত কাঠামোর জ্ঞান সহকারে কেউ কি এগিয়ে এসে সত্যিকারের অন্তর্দৃষ্টি দিতে পারে?

আমি বুঝতে পারি যে এই বিষয়ে সর্বাধিক মতামত পক্ষপাতদুষ্ট হতে পারে তবে আমি আশা করছি যে কেউ এই সমস্ত কাঠামো অধ্যয়ন করার জন্য সময় নিয়েছে এবং কমপক্ষে একটি সাধারণ উদ্দেশ্যগত তুলনা রয়েছে।

এটি আগে না করা হলে আমি নিজের তদন্ত করতে বেশ আগ্রহী, তবে আমি ধরে নিয়েছিলাম যে এটি ইতিমধ্যে কিছু লোক ইতিমধ্যে করেছিল।

দ্বিতীয় আপডেট:

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


1
[Ninject বনাম দ্বি জন্য ঐক্য] (যেমন একই প্রশ্ন stackoverflow.com/questions/1054801/ninject-vs-unity-for-di ), কিন্তু এটি একটি ফলো-আপ জন্য সময় হতে পারে।
ম্যাথু ফ্ল্যাশেন

2
[ক্যাসল উইন্ডসর, ityক্য এবং স্ট্রাকচারম্যাপের তুলনা] এর সম্ভাব্য সদৃশ ( স্ট্যাকওভারফ্লো.com / প্রশ্নগুলি / ২২২668684/২ )
মরিসিও শেফার

@ স্লোমোজো: সম্ভাব্য সদৃশ। stackoverflow.com/questions/4509458/ioc-comparisions-clossed । এছাড়াও লিঙ্কটি রয়েছে যা উত্তরে আইওসির জনপ্রিয়তা দেখায়। এটির দিকে একবার তাকাও।
ধীনেশ

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

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

উত্তর:


225

যদিও এই প্রশ্নের একটি বিস্তৃত উত্তর আমার বইয়ের শত শত পৃষ্ঠা গ্রহণ করে , এখানে একটি দ্রুত তুলনা চার্ট রয়েছে যা আমি এখনও কাজ করছি:

বেশ কয়েকটি ডিআইসির মধ্যে পার্থক্য বর্ণনা করার একটি সারণী


40
আমি আপনার বইয়ের এমইএপি পড়েছি এবং ভাবছিলাম যে আপনি কেন নিিনজেক্টটি বাদ দিয়েছেন?
মার্টিন ওভেন

2
আংশিক উত্তর এখানে পাওয়া যাবে: manning-sandbox.com/thread.jspa?threadID=38943
মার্ক

25
@ মার্ক, এর জন্য ধন্যবাদ, আশা করি আপনার উত্তরটিতে নিনজেক্ট (গুরুত্বপূর্ণ, কেবল এটির চারপাশে থাকা নতুন হাইপগুলির কারণে নয়, এটির জন্য নতুন ভাষার বৈশিষ্ট্য ব্যবহারের কারণেও অন্তর্ভুক্ত থাকতে পারে))
ocকোডো

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

2
ইউনিটি 3.5 ইতিমধ্যে কনভেনশন ভিত্তিক নিবন্ধকরণকে সমর্থন করে: nuget.org/packages/Unity/3.5.1404 । একটি অসুবিধা দূর করুন ;-)
ভ্লাদিমির দোরোখভ

116

আমি আরেকটি পারফরম্যান্স তুলনা দেখতে পেয়েছি (সর্বশেষ আপডেট 10 এপ্রিল 2014)। এটি নিম্নলিখিত তুলনা করে:

পোস্ট থেকে একটি দ্রুত সংক্ষিপ্তসার এখানে:

উপসংহার

নিনজেক স্পষ্টভাবে ধীর ধারক।

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

সিম্পলইনজেক্টর, হিরো, ফুনক, মুনক এবং ডায়নামো সেরা পারফরম্যান্সের প্রস্তাব দেয়, তারা অত্যন্ত দ্রুত। তাদের চেষ্টা করে দেখুন!

বিশেষত সিম্পল ইনজেক্টর ভাল পছন্দ বলে মনে হচ্ছে। এটি খুব দ্রুত, একটি ভাল ডকুমেন্টেশন রয়েছে এবং বাধা এবং জেনেরিক সজ্জকারের মতো উন্নত পরিস্থিতিতে সমর্থন করে।

আপনি কমন সার্ভিস সিলেক্টর লাইব্রেরিটিও ব্যবহার করে দেখতে পারেন এবং আশা করি একাধিক বিকল্প ব্যবহার করে দেখুন এবং আপনার জন্য কী সেরা কাজ করে তা দেখুন।

সাইট থেকে সাধারণ পরিষেবা নির্বাচনকারী গ্রন্থাগার সম্পর্কে কিছু তথ্য:

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

হালনাগাদ

13.09.2011: ফানক এবং মুনক প্রতিযোগীদের তালিকায় যুক্ত হয়েছিল। চার্টগুলিও আপডেট হয়েছিল এবং স্প্রিং.নেট এটির খারাপ কার্য সম্পাদনের কারণে সরানো হয়েছিল।

04.11.2011: " সরল ইনজেক্টর যুক্ত হয়েছে , পারফরম্যান্স সকল প্রতিযোগীদের মধ্যে সেরা"।


(তুলনা লিঙ্কটি অনুসরণ করে) সম্প্রতি আপডেট হয়েছে, গতির পার্থক্যগুলি (প্লাস বেসিক বৈশিষ্ট্যগুলি ম্যাট্রিক্স) দেখতে আকর্ষণীয়। ধন্যবাদ।
lko

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

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

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


49

ফিলিপ ম্যাট দ্বারা কেবল এই দুর্দান্ত। নেট ডিআই কনটেইনার তুলনা ব্লগটি পড়ুন

তিনি কিছু নিখুঁত পারফরম্যান্স তুলনা পরীক্ষা করেন;

তিনি অটোফ্যাকের পরামর্শ দিয়েছেন কারণ এটি ছোট, দ্রুত এবং সহজেই ব্যবহারযোগ্য ... আমি সম্মত। দেখা যাচ্ছে যে ঐক্য এবং Ninject তার পরীক্ষায় ধীরতম হয়।


5
পোস্টটিতে একটি আপডেট রয়েছে et নেট ডিআই কনটেইনার স্পিড রেডাক্স : নীচের লাইনে, ইউনিটির পক্ষে প্রথম স্থানে একটি ভুল পদ্ধতি নেওয়া হয়েছিল। নতুন পরিমাপের সাথে ইউনিটি আরও ভাল দেখায়।
ভোলকার ভন আইনেম

33

দাবি পরিত্যাগী: গোড়ার দিকে 2015 এর হিসাবে, সেখানে আইওসি কনটেইনার একটি মহান তুলনা হয় অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে থেকে জিমি Bogard , এখানে একটি সারসংক্ষেপ হল:

ধারক পাত্রে:

  • Autofac
  • Ninject
  • সাধারণ ইনজেক্টর
  • StructureMap
  • ঐক্য
  • উইন্ডসর

দৃশ্যটি হ'ল: আমার একটি ইন্টারফেস রয়েছে, আইএমডিআইএটার, যাতে আমি একক অনুরোধ / প্রতিক্রিয়া বা একাধিক প্রাপকদের কাছে একটি বিজ্ঞপ্তি পাঠাতে পারি:

public interface IMediator 
{ 
    TResponse Send<TResponse>(IRequest<TResponse> request);

    Task<TResponse> SendAsync<TResponse>(IAsyncRequest<TResponse> request);

    void Publish<TNotification>(TNotification notification)
        where TNotification : INotification;

    Task PublishAsync<TNotification>(TNotification notification)
        where TNotification : IAsyncNotification; 
}

আমি তখন অনুরোধ / প্রতিক্রিয়া / বিজ্ঞপ্তিগুলির একটি বেস সেট তৈরি করেছি:

public class Ping : IRequest<Pong>
{
    public string Message { get; set; }
}
public class Pong
{
    public string Message { get; set; }
}
public class PingAsync : IAsyncRequest<Pong>
{
    public string Message { get; set; }
}
public class Pinged : INotification { }
public class PingedAsync : IAsyncNotification { }

জেনেরিকের জন্য ধারক সহায়তার জন্য আমি কয়েকটি জিনিস দেখার আগ্রহী ছিলাম:

  • উন্মুক্ত জেনেরিকের জন্য সেটআপ (সহজেই IRequestHandler <,> নিবন্ধন করা)
  • উন্মুক্ত জেনেরিকের একাধিক নিবন্ধকরণের জন্য সেটআপ (দুই বা ততোধিক INotificationsHandlers)

জেনেরিক ভেরিয়েন্সের জন্য সেটআপ (বেস ইনোটিফিকেশন / অনুরোধ পাইপলাইন তৈরির জন্য হ্যান্ডলারের নিবন্ধকরণ) আমার হ্যান্ডলারগুলি বেশ সোজা, তারা কেবল কনসোল আউটপুট দেয়:

public class PingHandler : IRequestHandler<Ping, Pong> { /* Impl */ }
public class PingAsyncHandler : IAsyncRequestHandler<PingAsync, Pong> { /* Impl */ }

public class PingedHandler : INotificationHandler<Pinged> { /* Impl */ }
public class PingedAlsoHandler : INotificationHandler<Pinged> { /* Impl */ }
public class GenericHandler : INotificationHandler<INotification> { /* Impl */ }

public class PingedAsyncHandler : IAsyncNotificationHandler<PingedAsync> { /* Impl */ }
public class PingedAlsoAsyncHandler : IAsyncNotificationHandler<PingedAsync> { /* Impl */ }

Autofac

var builder = new ContainerBuilder();
builder.RegisterSource(new ContravariantRegistrationSource());
builder.RegisterAssemblyTypes(typeof (IMediator).Assembly).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof (Ping).Assembly).AsImplementedInterfaces();
  • জেনারিকগুলি খুলুন: হ্যাঁ, স্পষ্টভাবে
  • একাধিক উন্মুক্ত জেনেরিকস: হ্যাঁ, স্পষ্টভাবে
  • জেনেরিক বিপরীততা: হ্যাঁ, স্পষ্টতই

Ninject

var kernel = new StandardKernel();
kernel.Components.Add<IBindingResolver, ContravariantBindingResolver>();
kernel.Bind(scan => scan.FromAssemblyContaining<IMediator>()
    .SelectAllClasses()
    .BindDefaultInterface());
kernel.Bind(scan => scan.FromAssemblyContaining<Ping>()
    .SelectAllClasses()
    .BindAllInterfaces());
kernel.Bind<TextWriter>().ToConstant(Console.Out);
  • জেনারিকগুলি খুলুন: হ্যাঁ, স্পষ্টভাবে
  • একাধিক উন্মুক্ত জেনেরিকস: হ্যাঁ, স্পষ্টভাবে
  • জেনেরিক বিপর্যয়: হ্যাঁ, ব্যবহারকারীর দ্বারা নির্মিত এক্সটেনশনগুলি

সাধারণ ইনজেক্টর

var container = new Container();
var assemblies = GetAssemblies().ToArray();
container.Register<IMediator, Mediator>();
container.Register(typeof(IRequestHandler<,>), assemblies);
container.Register(typeof(IAsyncRequestHandler<,>), assemblies);
container.RegisterCollection(typeof(INotificationHandler<>), assemblies);
container.RegisterCollection(typeof(IAsyncNotificationHandler<>), assemblies);
  • জেনারিকগুলি খুলুন: হ্যাঁ, স্পষ্টতই
  • একাধিক উন্মুক্ত জেনেরিকস: হ্যাঁ, স্পষ্টতই
  • জেনেরিক বিপর্যয়: হ্যাঁ, স্পষ্টতই (আপডেট 3.0 সহ)

StructureMap

var container = new Container(cfg =>
{
    cfg.Scan(scanner =>
    {
        scanner.AssemblyContainingType<Ping>();
        scanner.AssemblyContainingType<IMediator>();
        scanner.WithDefaultConventions();
        scanner.AddAllTypesOf(typeof(IRequestHandler<,>));
        scanner.AddAllTypesOf(typeof(IAsyncRequestHandler<,>));
        scanner.AddAllTypesOf(typeof(INotificationHandler<>));
        scanner.AddAllTypesOf(typeof(IAsyncNotificationHandler<>));
    });
});
  • জেনারিকগুলি খুলুন: হ্যাঁ, স্পষ্টতই
  • একাধিক উন্মুক্ত জেনেরিকস: হ্যাঁ, স্পষ্টতই
  • জেনেরিক বিপরীততা: হ্যাঁ, স্পষ্টভাবে

ঐক্য

container.RegisterTypes(AllClasses.FromAssemblies(typeof(Ping).Assembly),
   WithMappings.FromAllInterfaces,
   GetName,
   GetLifetimeManager);

/* later down */

static bool IsNotificationHandler(Type type)
{
    return type.GetInterfaces().Any(x => x.IsGenericType && (x.GetGenericTypeDefinition() == typeof(INotificationHandler<>) || x.GetGenericTypeDefinition() == typeof(IAsyncNotificationHandler<>)));
}

static LifetimeManager GetLifetimeManager(Type type)
{
    return IsNotificationHandler(type) ? new ContainerControlledLifetimeManager() : null;
}

static string GetName(Type type)
{
    return IsNotificationHandler(type) ? string.Format("HandlerFor" + type.Name) : string.Empty;
}
  • জেনারিকগুলি খুলুন: হ্যাঁ, স্পষ্টভাবে
  • একাধিক উন্মুক্ত জেনেরিকস: হ্যাঁ, ব্যবহারকারীর অন্তর্নির্মিত এক্সটেনশান সহ
  • জেনেরিক বিপর্যয়: ডের্প

উইন্ডসর

var container = new WindsorContainer();
container.Register(Classes.FromAssemblyContaining<IMediator>().Pick().WithServiceAllInterfaces());
container.Register(Classes.FromAssemblyContaining<Ping>().Pick().WithServiceAllInterfaces());
container.Kernel.AddHandlersFilter(new ContravariantFilter());
  • জেনারিকগুলি খুলুন: হ্যাঁ, স্পষ্টভাবে
  • একাধিক উন্মুক্ত জেনেরিকস: হ্যাঁ, স্পষ্টভাবে
  • জেনেরিক বিপর্যয়: হ্যাঁ, ব্যবহারকারীর দ্বারা নির্মিত এক্সটেনশন with

অসাধারণ! বিটিডব্লিউ, উপরের সংক্ষিপ্তসারটি উইন্ডসরকে মিস করেছে তবে এটি জিমির মূল নিবন্ধে উপলব্ধ।
লুই

সামনে বাহ কেউ এটা সম্পর্কে সতর্ক (: আমি উইন্ডসর, ধন্যবাদ @Louis যোগ
stratovarius

21

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

আমি ব্যক্তিগতভাবে অটোফ্যাক পছন্দ করি যেহেতু এটি বেশ নমনীয় এবং আমার পক্ষে উপযুক্ত সিনট্যাক্স রয়েছে (যদিও আমি সত্যিই ঘৃণা করি যে সমস্ত রেজিস্টার পদ্ধতিগুলি এক্সটেনশন পদ্ধতি))

কিছু অন্যান্য ফ্রেমওয়ার্ক:


হাই @abatishchev! :) ... আসল ধারণাটি তৃতীয় পক্ষ এবং অন্তর্নির্মিত পদ্ধতিগুলি একই ভিত্তিতে রয়েছে তা নিশ্চিত করা ছিল; অনেক "রেজিস্টার" পদ্ধতি আলাদাভাবে RegisterControllers()শিপিং করতে হয় (যেমন এমভিসির জন্য) তাই আমি ভেবেছিলাম যে এই মামলার আশেপাশে নকশা করা সার্থক ছিল। (এটি 5+ বছর আগে ডিজাইন করা হয়েছিল))
নিকোলাস ব্লুমহার্ট

1
@ নিকোলাস ব্লুমহার্ট: হাই! :) দেরিতে প্রতিক্রিয়া জন্য দুঃখিত, বিজ্ঞপ্তি অন্যদের মধ্যে হারিয়ে গেছে। আসলে এই ধরণের ধারাবাহিকতার জন্য আমার বোধগম্য হয়। আপনি এখন কীভাবে ভাবছেন, আপনি এটি কীভাবে ডিজাইন করবেন?
abatishchev

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

6

ঠিক আছে, আমি এখনও অবধি খুঁজে পাওয়া সেরা তুলনাটি দেখার পরে হ'ল:

এটি 2010 সালের মার্চ মাসে নেওয়া একটি জরিপ ছিল।

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

পোল থেকেও, মনে হচ্ছে ক্যাসল W উইন্ডসর এবং স্ট্রাকচারম্যাপটি সর্বাধিক পক্ষপাতিত বলে মনে হচ্ছে।

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

অবশ্যই এটি (?) ইউনিটি 2.0-তে প্রযোজ্য না যা মে 2010 সালে প্রকাশ হয়েছিল।

আশা করি অন্য কেউ সরাসরি অভিজ্ঞতার ভিত্তিতে একটি তুলনা প্রদান করতে পারেন।


2
Ityক্য বেশ ভাল। এটি বেশিরভাগের যা প্রয়োজন তা কভার করে, যদিও কিছু লোক অভিযোগ করে যে এটি বিজ্ঞপ্তি নির্ভরতাগুলি সমাধান করে না। আমি এটা ভালোবাসি. আমার যা প্রয়োজন তা আমি করি।
দিমিত্রি নেস্টারুক

অনেক বিকাশকারী এমনকি অজান্তেই ক্যাসেল.উইন্ডসর ব্যবহার করছে। এটি এনএইচবারনেটের জন্য ডিফল্ট আইওসি । (কমপক্ষে ফ্লুয়েন্টএন হাইবারনেট নিয়ে গতকাল আমি ডাউনলড হয়েছি)। আমি একটি NHibernate বাস্তবায়ন দেখলেন ব্যবহারসমূহ LinFu nstead
k3b

5

লিন্ফু এবং স্প্রিংটনেট সহ গুগল কোডে নেট- আইওসি -ফ্রেমওয়ার্কগুলির একটি তুলনা দেখুন যা আমি এই লেখাটি লেখার সময় আপনার তালিকায় নেই।

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

আমি এ পর্যন্ত যা পড়েছি তা থেকে: আমি যদি একটি ছোট বা মাঝারি প্রকল্পের জন্য বেছে নিতে পারি তবে আমি নিকজেক্টটি ব্যবহার করব যেহেতু আইওসি-কনফিগারেশনটি সম্পন্ন হয়েছে এবং সি # তে ডিবাজিযোগ্য। তবে আমি এটি নিয়ে এখনও কাজ করতে পারি নি। বৃহত মডুলার সিস্টেমের জন্য আমি বিমূর্ততা-গ্রন্থাগারগুলির কারণে স্প্রিংটনেটের সাথে থাকব।

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