在服务器上创建模型的正确方法
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
}
}
请考虑该应用不会在模型中存储图像。相反,它存储用于从图像缓存中检索图像的 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
}
}