যদিও এটি একটি সাধারণ প্রশ্ন তবে এটি বর্তমানে যে সমস্যার মুখোমুখি হচ্ছি তাও এটি নির্দিষ্ট। আমার কাছে বর্তমানে আমার সমাধানে একটি ইন্টারফেস নির্দিষ্ট করা আছে called
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
এই ইন্টারফেসটি প্রায়শই পুরো প্রোগ্রাম জুড়ে ব্যবহৃত হয় এবং তাই আমার প্রয়োজনীয় জিনিসগুলিতে আমার কাছে সহজে অ্যাক্সেস রয়েছে। তবে আমার প্রোগ্রামের একটি অংশের মোটামুটি নিম্ন স্তরে আমার অন্য ক্লাসে অ্যাক্সেস দরকার যা IAreaContext ব্যবহার করবে এবং এটি বন্ধ করে কিছু অপারেশন করবে। সুতরাং এই সৃষ্টিটি করার জন্য আমি আর একটি ফ্যাক্টরি ইন্টারফেস তৈরি করেছি:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
আমার একটি ক্লাস রয়েছে যা আইকনটেক্সটপ্রোভাইডার প্রয়োগ করে এবং নিনজেক্ট ব্যবহার করে ইনজেকশন দেওয়া হয়। আমার সমস্যাটি হ'ল আমার এই আইভেন্টকন্টেক্সটফ্যাক্টির যে অঞ্চলটি ব্যবহার করতে হবে তা কেবলমাত্র আইকনটেক্সটপ্রোভাইডারে অ্যাক্সেস করতে পারে এবং নিজেই অন্য শ্রেণি ব্যবহার করে যা এই নতুন ইন্টারফেসের প্রয়োজন হবে। আমি নিম্ন স্তরে আইভেন্টকন্টেক্সট্যাক্টরির এই বাস্তবায়নটি তাত্পর্যপূর্ণ করতে চাই না এবং বরং আইভেন্টকন্টেক্সটফ্যাক্টরি ইন্টারফেসের সাথে কাজ করব । তবে আমি এটির প্রয়োজন বোধ করে না এমনটি নির্মাণের মাধ্যমে অন্য একটি প্যারামিটারও ইনজেকশন করতে চাই না।
// example of problem
public class MyClass
{
public MyClass(IContextProvider context, IEventContextFactory event)
{
_context = context;
_event = event;
}
public void DoSomething()
{
// the only place _event is used in the class is to pass it through
var myClass = new MyChildClass(_event);
myClass.PerformCalculation();
}
}
সুতরাং আমার মূল প্রশ্নটি হ'ল এটি কি গ্রহণযোগ্য হবে বা এ জাতীয় কিছু করা এমনকি সাধারণ বা ভাল অনুশীলন (ইন্টারফেসটি অন্য একটি ইন্টারফেসকে প্রসারিত করে):
public interface IContextProvider : IEventContextFactory
বা আমার যা প্রয়োজন তা অর্জন করার জন্য আমার আরও ভাল বিকল্পগুলি বিবেচনা করা উচিত। আমি পরামর্শ দেওয়ার জন্য পর্যাপ্ত তথ্য না দিলে আমাকে জানান এবং আমি আরও সরবরাহ করতে পারি।