Swift模块化和可测试的网络层

时间:2016-11-14 15:39:49

标签: swift architecture

这个问题更多来自架构的观点。每次出现新的应用程序时,都需要构建某种类型的网络层,它封装了其他层的所有网络逻辑。我解决这个问题的方法包括使用 NetworkProtocol ,其作业是声明API提供的每个可能的功能。

protocol NetworkProtocol {  
    func getExample(completion: @escaping Result<Void> -> Void)
}

此协议使用结果类型:

enum Result<T> {
    case success(T)
    case failure(ErrorType)
}

在此之后,我得到一个 NetworkClient ,需要在初始化期间注入 NetworkProtocol

class NetworkClient {
   let client: NetworkProtocol

   init(client: NetworkProtocol) {
     self.client = client
   }
}

通过这样做,我可以明确区分网络层声明和实现的问题。通过使用模拟网络注入 NetworkClient ,我也可以轻松地轻松测试网络层。

我的问题是,是否有更好的方法来实现所有这一切?此解决方案的一个主要问题是 NetworkProtocol 很容易变得非常大,而 NetworkManager 实现了此协议。

很抱歉,如果这不是这个问题的地方。也许这更像是一个讨论然后问题:)

0 个答案:

没有答案