আমি যদি এটিকে প্রশ্নের আর একটি পুনরাবৃত্তি বলে মনে হয় তবে আমি ক্ষমা চাইছি, তবে প্রতিবারই আমি বিষয়টি সম্পর্কিত কোনও নিবন্ধ পেয়েছি, এটি বেশিরভাগ ক্ষেত্রে কেবল ডিআই কী তা নিয়েই কথা বলে। সুতরাং, আমি ডিআই পাই, তবে আমি একটি আইওসি পাত্রে প্রয়োজনীয়তা বোঝার চেষ্টা করছি, যা প্রত্যেকে মনে হচ্ছে। আইওসি ধারকটির অবস্থানটি কি নির্ভরশীলতার কংক্রিট বাস্তবায়নটিকে কেবল "স্ব-সমাধান" করতে পারে? হতে পারে আমার ক্লাসগুলির বেশ কয়েকটি নির্ভরতা নেই এবং সম্ভবত সে কারণেই আমি বড় চুক্তিটি দেখছি না, তবে আমি নিশ্চিত করতে চাই যে আমি ধারকটির ইউটিলিটিটি সঠিকভাবে বুঝতে পারছি।
আমি সাধারণত আমার ব্যবসায়িক যুক্তিটি এমন কোনও শ্রেণিতে বিভক্ত করি যা দেখতে এরকম কিছু দেখায়:
public class SomeBusinessOperation
{
private readonly IDataRepository _repository;
public SomeBusinessOperation(IDataRespository repository = null)
{
_repository = repository ?? new ConcreteRepository();
}
public SomeType Run(SomeRequestType request)
{
// do work...
var results = _repository.GetThings(request);
return results;
}
}
সুতরাং এটির কেবলমাত্র একটি নির্ভরতা রয়েছে এবং কিছু ক্ষেত্রে এটিতে দ্বিতীয় বা তৃতীয় হতে পারে, তবে প্রায়শই এটি হয় না। সুতরাং যাকে এটিকে ডাকে এটি নিজস্ব রেপো পাস করতে পারে বা এটি ডিফল্ট রেপো ব্যবহারের অনুমতি দেয় allow
আইওসি ধারক সম্পর্কে আমার বর্তমান উপলব্ধি যতদূর যায়, সমস্ত কন্টেইনারটি হ'ল IDataRepository সমাধান করুন। তবে যদি এটি সমস্ত কিছু করে তবে আমি এর মধ্যে এক টন মূল্য দেখছি না যেহেতু আমার অপারেশনাল ক্লাসগুলি ইতিমধ্যে কোনও ফ্যালব্যাক সংজ্ঞায়িত করে যখন কোনও নির্ভরতা পাস হয় না So সুতরাং আমি কেবলমাত্র অন্যান্য সুবিধাটিই ভাবতে পারি যে যদি আমার বেশ কয়েকটি অপারেশন থাকে তবে এটি একই ফ্যালব্যাক রেপো ব্যবহার করে, আমি সেই রেপোটিকে এক জায়গায় পরিবর্তন করতে পারি যা রেজিস্ট্রি / কারখানা / ধারক। এবং এটি দুর্দান্ত, তবে এটি কি?
ConcreteRepository
এবং (২) আপনি অতিরিক্ত নির্ভরতা সরবরাহ করতে পারেন ( উদাহরণস্বরূপ, ConcreteRepository
একটি ডাটাবেস সংযোগটি সাধারণ হবে)।