【问题标题】:Proper way to create models on the server在服务器上创建模型的正确方法
【发布时间】:2017-05-22 10:44:07
【问题描述】:

请考虑应用不要在模型中存储图像。相反,它存储用于从图像缓存中检索图像的 URL。

考虑这个模型:

class Post {
    let id: String
    let title: String
    let imageUrl: URL
}

假设用户创建了一个新帖子(输入title 并选择image),然后应用将其发送到服务器。

问题:编写在服务器上创建新帖子的方法的正确方法是什么?

我想写这样的东西:

func createModel(_ model: Post, completion: () -> Void)

但问题是应用还不知道imageUrl

另一个想法是有一个接受模型所有属性的方法:

func createPost(_ title: String, image: UIImage, completion: () -> Void)

但是这个解决方案是不可重复使用的:不可能有一个通用的方法来创建一个模型。不好。

此外,这种方法不允许我们使用模型尚未保存到后端,从而强制显示活动指示器。

有什么建议可以解决吗?

【问题讨论】:

    标签: swift model architecture client-server immutability


    【解决方案1】:

    如果您确实需要不可变模型(我认为您不需要),那么您可以选择将图像保存在应用程序的临时目录中,并将本地图像用于所有新创建的帖子,将服务器图像用于所有其他帖子。这样,您的模型将保持不变,并且您将摆脱任何活动指示器。

    class Post {
    
        let id: String
        let title: String
        var imageUrl: URL
    
        init(id:String,title:String,imageUrl:URL){
            self.id = id
            self.title = title
            self.imageUrl = imageUrl
        }
    
        init(id:String,title:String,image:UIImage){
    
            self.id = id
            self.title = title
    
            let data = UIImageJPEGRepresentation(image, 0.8)
            let url =  URL(fileURLWithPath: "\(NSTemporaryDirectory())\(UUID().uuidString).jpeg")
            try! data?.write(to: url, options: Data.WritingOptions.atomic)
            self.imageUrl = url
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      相关资源
      最近更新 更多