Inversão de Dependência IOS

Apr 15 2023
O que é inversão de dependência: a inversão de dependência é um princípio de design que pode ser aplicado ao desenvolvimento do iOS (bem como a outros desenvolvimentos de software). O princípio sugere que módulos ou componentes de alto nível não devem depender diretamente de módulos ou componentes de baixo nível.

O que é Inversão de Dependência:

A inversão de dependência é um princípio de design que pode ser aplicado ao desenvolvimento do iOS (assim como a outros desenvolvimentos de software). O princípio sugere que módulos ou componentes de alto nível não devem depender diretamente de módulos ou componentes de baixo nível. Em vez disso, os componentes de alto e baixo nível devem depender de abstrações ou protocolos.

Por que abstrações e protocolos:

Em termos práticos, isso significa que, ao criar um aplicativo iOS, os desenvolvedores devem criar protocolos ou interfaces que definam o comportamento de determinados recursos ou componentes do aplicativo. Esses protocolos devem ser implementados por classes ou módulos específicos que fornecem a funcionalidade para esses recursos.

ao usar abstrações e protocolos, o código é mais fácil de manter e testar e permite maior flexibilidade na alteração ou substituição de componentes sem afetar a arquitetura geral do aplicativo. Por exemplo, se um determinado componente precisar ser substituído, o aplicativo pode continuar funcionando desde que a substituição esteja em conformidade com o mesmo protocolo ou interface.

Exemplo Prático:

Digamos que você esteja criando um aplicativo iOS que recupera dados de uma API da Web e os exibe em uma exibição de tabela. Uma maneira de implementar isso seria fazer com que o controlador de visualização que gerencia a visualização da tabela fizesse chamadas diretas para uma classe de cliente da API da Web para buscar os dados.

No entanto, isso cria um acoplamento rígido entre o controlador de exibição e o cliente da API da Web, o que pode dificultar o teste e a manutenção do código. Se você quiser alterar a forma como os dados são buscados ou exibidos, você terá que modificar o controlador de visualização, o que viola o princípio aberto/fechado.

Para aplicar o princípio de Inversão de Dependência, você pode criar uma abstração na forma de um protocolo ou interface que defina o comportamento do cliente da API da web. Por exemplo, você pode definir um protocolo chamado APIClientcom um método chamado fetchData, que retorna uma matriz de objetos de dados.

protocol APIClient {
    func fetchData(completion: @escaping ([DataObject]) -> Void)
}

class WebAPIClient: APIClient {
    func fetchData(completion: @escaping ([DataObject]) -> Void) {
        // Make HTTP request to fetch data and call completion block
    }
}

class TableViewController: UIViewController {
    let apiClient: APIClient
    
    init(apiClient: APIClient) {
        self.apiClient = apiClient
        super.init(nibName: nil, bundle: nil)
    }
    
    // ...
}

Por exemplo, você pode criar uma implementação simulada APIClientque retorne dados falsos para fins de teste.

class MockAPIClient: APIClient {
    func fetchData(completion: @escaping ([DataObject]) -> Void) {
        let dataObjects = [DataObject(id: 1, name: "Object 1"), 
                           DataObject(id: 2, name: "Object 2")]
        completion(dataObjects)
    }
}

let mockAPIClient = MockAPIClient()
let tableViewController = TableViewController(apiClient: mockAPIClient)