Sobes.tech
Junior — Middle

Կարող եք տալ կախվածության հակադարձման սկզբունքի կիրառման օրինակ իրական զարգացման մեջ?

sobes.tech AI

Պատասխան AI-ից

Անհրաժեշտ է, որ բարձր մակարդակի մոդուլները չպետք է ուղղակիորեն կախված լինեն ցածր մակարդակի մոդուլներից, այլ երկուսն էլ պետք է կախված լինեն աբստրակցիաներից:

Java-ում օրինակ:

// Աբստրակցիա
public interface MessageService {
    void sendMessage(String message);
}

// կոնկրետ իրագործում
public class EmailService implements MessageService {
    public void sendMessage(String message) {
        System.out.println("Ուղարկում էլ.փոստ: " + message);
    }
}

// Կլաս, որը կախված է աբստրակցիայից, ոչ թե կոնկրետ իրագործումից
public class Notification {
    private MessageService service;

    public Notification(MessageService service) {
        this.service = service;
    }

    public void notifyUser(String message) {
        service.sendMessage(message);
    }
}

// Օգտագործում
public class Main {
    public static void main(String[] args) {
        MessageService emailService = new EmailService();
        Notification notification = new Notification(emailService);
        notification.notifyUser("Բարև!");
    }
}

Այստեղ, Notification դասը կախված է MessageService ինտերֆեյսից, ոչ թե կոնկրետ EmailService-ից։ Սա թույլ է տալիս հեշտությամբ փոխել իրագործումը (օրինակ՝ SMS ծառայության), առանց Notification կոդը փոխելու։ Այս մոտեցումը բարելավում է կոդի թեստավորելիությունը և ընդլայնելիությունը։