Sobes.tech
Junior — Middle

Kas saaksite selgitada sõltuvuste pööramise põhimõtte olemust ja selle rolli tarkvarasüsteemide kujundamisel?

sobes.tech AI

Vastus AI-lt

Dependency Inversion Principle (DIP) on üks SOLID põhimõtetest ja ütleb, et:

  • Kõrgema taseme moodulid ei tohi sõltuda madalama taseme moodulitest. Mõlemad peavad sõltuma abstraktsioonidest.
  • Abstraktsioonid ei tohi sõltuda üksikdetailidest. Detailid peavad sõltuma abstraktsioonidest.

See tähendab, et klass ei tohiks otse luua või kasutada konkreetseid sõltuvuste realiseeringuid, vaid peaks töötama abstraktsioonide kaudu (näiteks liidesed või abstraktsed klassid). See suurendab paindlikkust ja lihtsustab testimist, kuna sõltuvusi saab hõlpsasti asendada teiste implementatsioonide või mock-idega.

Python näide:

from abc import ABC, abstractmethod

class Database(ABC):
    @abstractmethod
    def save(self, data):
        pass

class MySQLDatabase(Database):
    def save(self, data):
        print(f"Salvestamine {data} andmebaasi MySQL")

class UserService:
    def __init__(self, db: Database):
        self.db = db

    def create_user(self, user_data):
        # Kasutaja loomise loogika
        self.db.save(user_data)

# Kasutamine
mysql_db = MySQLDatabase()
service = UserService(mysql_db)
service.create_user({'name': 'Alice'})

Siin sõltub UserService abstraktsioonist Database, mitte konkreetse MySQLDatabase implementatsioonist. See võimaldab andmebaasi hõlpsasti vahetada ilma UserService muutmata.