"โปรแกรมไปยังอินเทอร์เฟซ" หมายถึงไม่ได้ขึ้นอยู่กับประเภทที่เป็นรูปธรรมในการทำงานของคุณแต่ไม่ได้ระบุวิธีที่คุณควรได้รับการพึ่งพา
"การพึ่งพาผกผันหลักการ" กล่าวว่าวัตถุที่ไม่ควรควบคุมการสร้าง dependencies มันก็แค่สิ่งที่ควรโฆษณาจะต้องพึ่งพาและให้โทรให้มัน แต่ไม่ได้ระบุว่าการพึ่งพาควรเป็นรูปธรรมหรืออินเทอร์เฟซ
ฉันจะอธิบายความแตกต่างด้วยรหัส C #
ตัวอย่างต่อไปนี้ขึ้นอยู่กับประเภทที่เป็นรูปธรรมและควบคุมการสร้างของการพึ่งพาของตัวเอง มันไม่เป็นไปตาม"โปรแกรมไปยังอินเตอร์เฟส" หรือ "การพึ่งพาการกลับกัน":
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor()
{
_myThing = new MyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
ตัวอย่างต่อไปนี้ขึ้นอยู่กับอินเตอร์เฟส แต่มันควบคุมการสร้างของการพึ่งพาของตัวเอง มันตาม "โปรแกรมไปยังอินเตอร์เฟส" แต่ไม่ใช่ "การพึ่งพาการกลับกัน":
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor()
{
_myThing = ThingFactory.GiveMeANewMyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
ตัวอย่างต่อไปนี้ขึ้นอยู่กับประเภทที่เป็นรูปธรรม แต่จะขอให้สร้างและส่งผ่านการพึ่งพา มันเป็นไปตาม "การพึ่งพาการกลับกัน" แต่ไม่ใช่ "โปรแกรมไปยังอินเทอร์เฟซ":
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor(MyThing myThing)
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}
ตัวอย่างต่อไปนี้ขึ้นอยู่กับอินเทอร์เฟซและจะขอให้สร้างและส่งผ่านการพึ่งพา มันเป็นไปตามทั้ง "การพึ่งพาการกลับรายการ" และ "โปรแกรมไปยังอินเทอร์เฟซ":
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor(IMyThing myThing) // using an interface
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}