Bağımlılıkların tersine çevrilmesi ile bağımlılık enjeksiyonu arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bağımlılık Ters Çevirme (Dependency Inversion Principle), SOLID ilkelerinden biridir ve şu şekilde der:
- Üst düzey modüller, alt düzey modüllere bağlı olmamalıdır. Her ikisi de soyutlamalara bağlı olmalıdır.
- Soyutlamalar, detaylara bağlı olmamalıdır; detaylar, soyutlamalara bağlı olmalıdır.
Bağımlılık Enjeksiyonu (Dependency Injection, DI), bir tasarım desenidir ve bağımlılık ters çevirmenin uygulanmasının bir yoludur. Bu, bağımlılıkların (bir sınıfın bağımlı olduğu nesneler) dışarıdan geçirilmesini, sınıfın bunları kendisinin oluşturması yerine sağlar.
Ana farklar:
- DIC - tasarım ilkesi, DI - tasarım deseni.
- DIC - yüksek ve düşük seviyeli modüller arasındaki ilişkilerin nasıl olması gerektiğini tanımlar (soyutlamalara bağımlılık).
- DI - bu ilişkileri uygulamaya koyan yöntemdir. Nesneye bağımlılıkları sağlamak için kullanılan somut bir tekniktir.
Bağımlılık enjeksiyonu örnekleri:
-
Yapıcı Enjeksiyonu: Bağımlılıklar yapıcı aracılığıyla geçirilir.
// Swift class UserFetcher { private let apiService: APIServiceProtocol // Soyutlamadan bağımlılık init(apiService: APIServiceProtocol) { // Yapıcı aracılığıyla enjeksiyon self.apiService = apiService } func fetchUsers() { // apiService kullanımı } } protocol APIServiceProtocol { // ... } -
Özellik Enjeksiyonu: Bağımlılıklar, public özellikler aracılığıyla ayarlanır (genellikle
@IBOutletkullanılır veya bağımlılık opsiyonel ise).// Swift class UserController: UIViewController { var userFetcher: UserFetcherProtocol? // Dışarıdan ayarlanabilen bağımlılık override func viewDidLoad() { super.viewDidLoad() userFetcher?.fetchUsers() } } protocol UserFetcherProtocol { func fetchUsers() } -
Yöntem Enjeksiyonu: Bağımlılıklar, yöntem parametreleri olarak geçirilir.
// Swift class DataProcessor { func process(data: Data, using parser: DataParserProtocol) { // Yönteme bağımlılık geçirilir parser.parse(data) } } protocol DataParserProtocol { func parse(_ data: Data) }
Bu şekilde, bağımlılıkların ters çevrilmesi (düşük bağlılık ve soyutlamalar aracılığıyla) hedeflenir ve bağımlılık enjeksiyonu, bu hedefe ulaşmanın bir yoludur.