Asılılığın inversiyası prinsipi (SOLID-də D hərfi) iki hissədən ibarətdir: yuxarı səviyyəli modullar (biznes qaydaları) aşağı səviyyəli modullardan (SMTP, verilənlər bazası, fayllar, saat) asılı olmamalıdır; hər ikisi abstraksiyalardan asılı olmalıdır. Abstraksiyalar isə detallardan asılı olmamalıdır: detallar abstraksiyalardan asılıdır.
EmailSender-dən asılıdır, sağda servis və bildiricilər Notifier protokolundan asılıdırPozuntu: sərt yazılmış detal
OrderService konstruktorda EmailSender() yaradır. Biznes qaydası indi çatdırılma kanalını bilir. SMS göndərmək üçün servisi dəyişmək lazımdır, testi isə yalnız real məktub göndərməklə işlətmək olar.
class EmailSender:
def send(self, to, text):
print(f"EMAIL to {to}: {text}")
class OrderService:
def __init__(self):
self.sender = EmailSender() # hard-wired detail
def place(self, user, item):
self.sender.send(user, f"order {item} accepted")
OrderService().place("ann@x.io", "book")EMAIL to ann@x.io: order book accepted