Ios Swift 3中简单网络层策略模式的正确使用
以下代码是否演示了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中,我可
- 违反单一责任原则。每个策略类(如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{
}
}