"Program ke antarmuka" berarti tidak bergantung pada tipe konkret untuk melakukan pekerjaan Anda , tetapi itu tidak menentukan bagaimana Anda harus mendapatkan ketergantungan Anda.
"Prinsip Inversi Ketergantungan" mengatakan bahwa suatu objek tidak boleh mengendalikan penciptaan ketergantungannya, itu hanya harus mengiklankan ketergantungan apa yang dibutuhkannya dan membiarkan penelepon menyediakannya . Tapi itu tidak menentukan apakah ketergantungan harus berupa tipe konkret atau antarmuka.
Saya akan menggambarkan perbedaan dengan beberapa kode C #.
Contoh berikut ini tergantung pada jenis beton, dan itu mengontrol penciptaan ketergantungan itu sendiri. Ini tidak mengikuti "program ke antarmuka" atau "inversi ketergantungan":
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor()
{
_myThing = new MyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
Contoh berikut bergantung pada antarmuka, tetapi ia mengontrol kreasi ketergantungannya sendiri. Ini mengikuti "program ke antarmuka", tetapi bukan "inversi ketergantungan":
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor()
{
_myThing = ThingFactory.GiveMeANewMyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
Contoh berikut tergantung pada jenis beton, tetapi meminta ketergantungannya untuk dibuat dan diteruskan ke sana. Ini mengikuti "inversi ketergantungan", tetapi bukan "program ke antarmuka":
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor(MyThing myThing)
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}
Contoh berikut bergantung pada antarmuka, dan ia meminta ketergantungannya untuk dibuat dan diteruskan ke sana. Ini mengikuti "inversi ketergantungan" dan "program ke antarmuka":
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor(IMyThing myThing) // using an interface
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}