แม้ว่านี่จะเป็นคำถามทั่วไป แต่ก็เป็นปัญหาเฉพาะที่ฉันกำลังประสบอยู่ ขณะนี้ฉันมีส่วนต่อประสานที่ระบุในโซลูชันของฉันที่เรียกว่า
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
อินเทอร์เฟซนี้มักใช้ตลอดโปรแกรมและด้วยเหตุนี้ฉันจึงเข้าถึงวัตถุที่ต้องการได้ง่าย อย่างไรก็ตามในส่วนของโปรแกรมของฉันค่อนข้างต่ำฉันต้องการเข้าถึงคลาสอื่นที่จะใช้IAreaContextและดำเนินการบางอย่างกับมัน ดังนั้นฉันจึงสร้างส่วนต่อประสานจากโรงงานอีกอันเพื่อสร้างสิ่งนี้ที่เรียกว่า:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
ฉันมีคลาสที่ใช้IContextProviderและฉีดโดยใช้ NinJect ปัญหาที่ฉันมีคือพื้นที่ที่ฉันต้องการใช้IEventContextFactoryนี้มีการเข้าถึงIContextProviderเท่านั้นและตัวเองใช้คลาสอื่นซึ่งจะต้องใช้อินเทอร์เฟซใหม่นี้ ฉันไม่ต้องการให้อินสแตนซ์ของการใช้งานIEventContextFactoryในระดับต่ำและต้องการทำงานกับอินเตอร์เฟสIEventContextFactoryตลอด อย่างไรก็ตามฉันยังไม่ต้องการที่จะฉีดพารามิเตอร์อื่นผ่านตัวสร้างเพียงเพื่อให้มันผ่านไปยังชั้นเรียนที่ต้องการมันคือ
// 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
หรือฉันควรพิจารณาทางเลือกที่ดีกว่าเพื่อให้บรรลุสิ่งที่ฉันต้องการ หากฉันไม่ได้ให้ข้อมูลเพียงพอที่จะให้คำแนะนำแจ้งให้ฉันทราบและฉันสามารถให้ข้อมูลเพิ่มเติมได้