我想知道在自定义Swift类中包含CRUD方法是否是个好主意,还是在单独的类中更好?
例如,我有一个名为User.swift的类:
class User {
var firstName: String
var lastName: String
var id: int
}
现在,可以在这里包含get和create方法吗?这些方法将通过Alamofire进行API调用:
class User {
var firstName: String
var lastName: String
var id: int
static func add(user: User) -> User {
let parameters = ["firstName": user.FirstName , "lastName": user.LastName]
return sendRequest(.POST, url: "example.com/users", parameters: parameters)
}
static func getById(userId: Int) -> User {
return sendRequest(.GET, url: "example.com/users/\(userId)")
}
}
这些方法应该在一个单独的类中,比如在ApiHelper类中吗?
我的应用程序在几个地方传递数组和字典中的User对象,所以想知道是否只使用属性来保持它是干净的。
答案 0 :(得分:1)
我认为在一些ApiHelper / Router单机类中更好地声明这样的方法,并且它们必须工作异步,使用一些解析系统(可能是RestKit)并通过闭包返回提取的对象有一些延迟
答案 1 :(得分:0)
关于正确方法的不同意见经常引起激烈的讨论。这也延伸到我们是否应该在模型类(User
)或控制器中执行验证,我们应该如何处理版本,序列化,错误,撤消/重做,锁定,异步等等的问题。
结果代码应该仍然是干净的,易于理解的,可扩展的,可测试的并放入库中,以便我们可以在其他项目中重用它!
恕我直言,没有正确的方法。恕我直言,我将从以下原则开始:您的User
课程在您的解决方案中被视为Entity
。实体具有属性ID
以及可能的其他主要方法,例如,它公开了init
,它接受了可以初始化类/结构实例的属性字典。
该实体也知道"持久存储",因此您的User
类也可能符合协议" Storable",它暴露类和实例方法,如{ {1}},save
,create
,update
,delete
等。
这只是一个完整解决方案的冰山一角。你可能会看看其他人是如何解决这个问题的。有关想法,请参阅
使用从JSON
查看一些Object Relational Mappers(有很多实现和库)。即使你需要从JSON映射到Objects,这些也会提供一些提示。
如果您仍然不满意,请查看ASP.NET
利用" Active Record"你可以从这样的方法开始:
query