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.