"Bir arayüze program" , işinizi yapmak için somut bir türe bağlı olmadığı anlamına gelir , ancak bağımlılığınızı nasıl elde etmeniz gerektiğini belirtmez .
"Bağımlılık Ters Çevirme İlkesi", bir nesnenin bağımlılıklarının yaratılmasını kontrol etmemesi gerektiğini, sadece ihtiyaç duyduğu bağımlılığın reklamını yapması ve arayanın bunu sağlamasına izin vermesi gerektiğini söyler . Ancak, bağımlılığın somut bir tip mi yoksa bir arayüz mi olacağını belirtmez.
Bazı C # kodlarıyla farklılıkları göstereceğim.
Aşağıdaki örnek somut bir türe bağlıdır ve kendi bağımlılığının yaratılmasını kontrol eder. Ne "bir arabirime program" ne de "bağımlılık tersini" izler :
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor()
{
_myThing = new MyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
Aşağıdaki örnek bir arabirime bağlıdır, ancak kendi bağımlılığının oluşturulmasını kontrol eder. "Bir arabirime program" ı izler, ancak "bağımlılık tersini" izlemez:
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor()
{
_myThing = ThingFactory.GiveMeANewMyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
Aşağıdaki örnek somut bir türe bağlıdır, ancak bağımlılığının yaratılmasını ve kendisine aktarılmasını ister. "Bağımlılığı tersine çevirme" izler, ancak "arabirime program" izlemez:
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor(MyThing myThing)
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}
Aşağıdaki örnek bir arabirime bağlıdır ve bağımlılığının oluşturulmasını ve ona aktarılmasını ister. Hem "bağımlılık inversiyon" izler ve "bir arayüz programı":
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor(IMyThing myThing) // using an interface
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}