我想知道在自定义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对象,所以想知道是否只使用属性保持它是干净的 .
2 回答
我认为在一些ApiHelper / Router单机类中更好地声明这样的方法,并且它们必须工作异步,使用一些解析系统(可能是RestKit)并通过闭包返回获取的对象有一些延迟
关于正确方法的不同意见经常引起激烈的讨论 . 这也延伸到我们是否应该在模型类(
User
)或控制器中执行验证,我们应该如何处理版本,序列化,错误,撤消/重做,锁定,异步等等的问题 .结果代码应该仍然是干净的,可理解的,可扩展的,可测试的并放入库中,以便我们可以在其他项目中重用它!
恕我直言,没有正确的方法 . 恕我直言,我将从以下原则开始:
您的
User
类在您的解决方案中被视为Entity
. 实体具有属性ID
以及可能的其他主要方法,例如,它公开init
,它接受可以初始化类/结构实例的属性字典 .该实体也知道"Persistent Store",因此您的
User
类也可能符合协议"Storable",该协议暴露类和实例方法,如save
,create
,update
,delete
,query
等 .这只是一个完整解决方案的冰山一角 . 你可能会看看其他人是如何解决这个问题的 . 有关想法,请参阅
使用从JSON填充的Core Data对象
实施Active Record Pattern
查看一些对象关系映射器(有很多实现和库) . 即使你需要从JSON映射到Objects,这些也提供了一些提示 .
如果您仍然不满意,请查看ASP.NET
利用“Active Record”方法,您可以从以下内容开始: