在服务器上创建模型的正确方法

Proper way to create models on the server

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

考虑这个模型:

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

假设用户创建了一个新的 post(输入 title 并选择了一个 image)并且应用将其发送到服务器。

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

我想写这样的东西:

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

但问题是应用程序还不知道imageUrl

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

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

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

此外,这种方法不允许我们使用模型 ,因为它还没有保存到后端,强制显示 activity 指标。

有什么处理方法的建议吗?

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

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
    }
}