Mis vahe on sõltuvuste pööramisel ja sõltuvuste sisestamisel?
sobes.tech AI
Vastus AI-lt
Sõltuvuse inversioon (Dependency Inversion Principle) on üks SOLID põhimõtetest, mis ütleb:
- Kõrgema taseme moodulid ei tohi sõltuda madalama taseme moodulitest. Mõlemad peaksid sõltuma abstraktsioonidest.
- Abstraktsioonid ei tohi sõltuda üksikdetailidest, üksikud detailid peavad sõltuma abstraktsioonidest.
Sõltuvuse sisestamine (Dependency Injection, DI) on disainimuster, üks viis sõltuvuse inversiooni teostamiseks. See eeldab sõltuvuste (objektide, millest see klass sõltub) edastamist väljastpoolt, selle asemel, et klass neid ise loob.
Peamised erinevused:
- DIC - disainiprintsiip, DI - disainimuster.
- DIC - määrab, millised peaksid olema suhted kõrge ja madala taseme moodulite vahel (sõltuvus abstraktsioonidest).
- DI - meetod, mis võimaldab neid suhteid teostada. See on konkreetne tehnika sõltuvuste tarnimiseks objekti.
Sõltuvuse sisestamise näited:
-
Constructor Injection: sõltuvused edastatakse konstruktoriga.
class UserFetcher { private let apiService: APIServiceProtocol // Abstraktsioonist sõltuvus init(apiService: APIServiceProtocol) { // Sisestus konstruktoriga self.apiService = apiService } func fetchUsers() { // kasutab apiService } } protocol APIServiceProtocol { // ... } -
Property Injection: sõltuvused määratakse avalike omaduste kaudu (tihti kasutades
@IBOutletvõi kui on vaja valikulist sõltuvust).class UserController: UIViewController { var userFetcher: UserFetcherProtocol? // Sõltuvus võib olla määratud väljastpoolt override func viewDidLoad() { super.viewDidLoad() userFetcher?.fetchUsers() } } protocol UserFetcherProtocol { func fetchUsers() } -
Method Injection: sõltuvused edastatakse meetodite parameetritena.
class DataProcessor { func process(data: Data, using parser: DataParserProtocol) { // Sõltuvus edastatakse meetodile parser.parse(data) } } protocol DataParserProtocol { func parse(_ data: Data) }
Seega, sõltuvuse invertsioon — see on eesmärk (耦合 vähendamine abstraktsioonide kaudu), ja sõltuvuse sisestamine — see on vahend (üks viis selle eesmärgi saavutamiseks).