Фарқи байни ислоҳи вобастагиҳо ва ворид кардани вобастагиҳо чист?
sobes.tech AI
Ҷавоб аз AI
Инверсияи вобастагӣ (Принсипи иҳотаи вобастагӣ) яке аз принсипҳои SOLID мебошад, ки мегӯяд:
- Модулҳои сатҳи боло набояд аз модулҳои сатҳи поён вобаста бошанд. Ҳарду бояд аз абстраксияҳо вобаста бошанд.
- Абстраксияҳо набояд аз тафсилот вобаста бошанд, тафсилотҳо бояд аз абстраксияҳо вобаста бошанд.
Вуруд кардани вобастагӣ (Dependency Injection, DI) намунаи тарҳрезӣ аст, яке аз роҳҳои амалӣ кардани иҳотаи вобастагӣ. Он пешгӯӣ мекунад, ки вобастагиҳо (объектҳое, ки ба онҳо ин синф вобаста аст) аз берун интиқол дода шаванд, ба ҷои он ки синф онҳоро худ созад.
Фарқиятҳои асосӣ:
- DIC - принсипи тарҳрезӣ, DI - намунаи тарҳрезӣ.
- DIC - муайян мекунад, ки муносибатҳо байни модулҳои сатҳи баланд ва паст чӣ гуна бояд бошанд (вобастагӣ аз абстраксияҳо).
- DI - усулест барои амалӣ кардани ин муносибатҳо. Ин техникаи мушаххас барои таъминоти вобастагиҳо ба объект аст.
Маслиҳатҳои даромад кардани вобастагӣ:
-
Constructor Injection: Вобастагиҳо тавассути конструктор интиқол дода мешаванд.
class UserFetcher { private let apiService: APIServiceProtocol // Вобастагӣ аз абстраксия init(apiService: APIServiceProtocol) { // Вуруд тавассути конструктор self.apiService = apiService } func fetchUsers() { // истифодаи apiService } } protocol APIServiceProtocol { // ... } -
Property Injection: Вобастагиҳо тавассути хосиятҳои умумӣ (бештар бо истифода аз
@IBOutletё агар вобастагии опционалӣ лозим бошад) насб карда мешаванд.class UserController: UIViewController { var userFetcher: UserFetcherProtocol? // Вобастагӣ метавонад аз берун насб карда шавад override func viewDidLoad() { super.viewDidLoad() userFetcher?.fetchUsers() } } protocol UserFetcherProtocol { func fetchUsers() } -
Method Injection: Вобастагиҳо ҳамчун параметрҳои методҳо интиқол дода мешаванд.
class DataProcessor { func process(data: Data, using parser: DataParserProtocol) { // Вобастагӣ ҳамчун параметр дода мешавад parser.parse(data) } } protocol DataParserProtocol { func parse(_ data: Data) }
Ҳамин тавр, иҳотаи вобастагӣ — ин ҳадаф (кам кардани耦合 бо абстраксияҳо), ва ворид кардани вобастагӣ — ин восита (як аз роҳҳои расидан ба ин ҳадаф).