Ios Swift 3中简单网络层策略模式的正确使用

Ios Swift 3中简单网络层策略模式的正确使用,ios,swift,networking,solid-principles,strategy-pattern,Ios,Swift,Networking,Solid Principles,Strategy Pattern,以下代码是否演示了swift 3中简单网络层策略设计模式的正确使用 一些我不确定的代码气味: 违反单一责任原则。每个策略类(如Find)都有一种不同类型实现的方法。这是因为我可能想要找到一张图片,或者一个用户,或者一个聊天室。存储在Firebase的不同节点上。所有这些不同的find方法都聚集在find类中 在调用一个请求时,如果我需要发出多个异步请求,我会将下一个请求调用嵌套在回调的闭包中。这样行吗 request对象允许访问每种类型的insert和find方法。因此,在我的注册VC中,我可

以下代码是否演示了swift 3中简单网络层策略设计模式的正确使用

一些我不确定的代码气味:

  • 违反单一责任原则。每个策略类(如Find)都有一种不同类型实现的方法。这是因为我可能想要找到一张图片,或者一个用户,或者一个聊天室。存储在Firebase的不同节点上。所有这些不同的find方法都聚集在find类中

  • 在调用一个请求时,如果我需要发出多个异步请求,我会将下一个请求调用嵌套在回调的闭包中。这样行吗

  • request对象允许访问每种类型的insert和find方法。因此,在我的注册VC中,我可以选择下载聊天室。甚至连访问这种实现都不好吗

我在下面发布了代码,为了简洁起见,省略了所有实际实现

非常感谢任何提示或指导

// USE CASE: Would go in viewDidLoad of ViewController
func testMyRequest () {

    let myRequest = Request(insert: Insert(), find: Find())

    myRequest.find?.user(with: "id", handler: { (user) in

        myRequest.find?.nearbyUsers(user: user, handler: { (users) in

            // update collectionView datasource
        })
    })
}

// Is this protocol necessary?
protocol RequestProtocol {
    // - Family of algorithms, related actions.
    var insert: Insert? { get set }
    var find: Find? { get set }
}


// ---------------------------

class Request: RequestProtocol {

    var insert: Insert?
    var find: Find?

    init(insert: Insert?, find: Find?) {
        self.insert = insert
        self.find = find
    }
}


// Use a singleton maybe for the classes below? Why wouldn't I?  

class Insert {

    init() { }

    func user(_ user: User) {
        // insert user to firebase implementation
    }

    func message(_ message: Message) -> Void  {
        // insert message to firebase impelmentation
    }

    func image(data: Data, user: User)  {
        // insert image to firebase impelmentation
    }
}


class Find {

    init() { }

    func user(with id: String, handler: @escaping (_ user: User) -> Void ) {
        // find user implementation
    }

    func allChatrooms(handler: @escaping ([Chatroom]) -> Void) {
        // find all chatrooms implementation
    }

    func nearbyUsers(user: User, handler: @escaping ([User]) -> Void ) {
        // find nearby Users relative to current User location implementation
    }

    // Private helper method
    private func findChatPartners (currentUser: User, chatrooms: [Chatroom] ) -> Set<String> {
    }

}
//用例:将进入ViewController的viewDidLoad
func testMyRequest(){
让myRequest=Request(insert:insert(),find:find())
myRequest.find?.user(带:“id”,处理程序:{(用户)在
myRequest.find?.nearbyUsers(用户:用户,处理程序:{(用户)在中)
//更新collectionView数据源
})
})
}
//这个协议有必要吗?
协议请求协议{
//-算法系列,相关操作。
var insert:insert?{get set}
var find:find?{get set}
}
// ---------------------------
类请求:RequestProtocol{
插入变量:插入?
var-find:find?
初始化(插入:插入?,查找:查找?){
self.insert=insert
self.find=find
}
}
//在下面的类中可能使用单例?我为什么不呢?
类插入{
init(){}
func user(uuser:user){
//将用户插入firebase实现
}
func message(message:message)->Void{
//将消息插入firebase推进
}
func图像(数据:数据,用户:用户){
//将图像插入firebase推进
}
}
类查找{
init(){}
func user(id:String,handler:@escaping(u-user:user)->Void){
//查找用户实现
}
func所有聊天室(处理程序:@escaping([Chatroom])->Void){
//查找所有聊天室实现
}
func nearbyUsers(用户:用户,处理程序:@escaping([user])->Void){
//查找相对于当前用户位置实现的附近用户
}
//私人助手法
private func findChatPartners(当前用户:用户,聊天室:[聊天室])->Set{
}
}