自定义Swift类中的CRUD方法

时间:2016-06-30 09:32:07

标签: ios swift oop swift2 crud

我想知道在自定义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 个答案:

答案 0 :(得分:1)

我认为在一些ApiHelper / Router单机类中更好地声明这样的方法,并且它们必须工作异步,使用一些解析系统(可能是RestKit)并通过闭包返回提取的对象有一些延迟

答案 1 :(得分:0)

关于正确方法的不同意见经常引起激烈的讨论。这也延伸到我们是否应该在模型类(User)或控制器中执行验证,我们应该如何处理版本,序列化,错误,撤消/重做,锁定,异步等等的问题。

结果代码应该仍然是干净的,易于理解的,可扩展的,可测试的并放入库中,以便我们可以在其他项目中重用它!

恕我直言,没有正确的方法。恕我直言,我将从以下原则开始:

您的User课程在您的解决方案中被视为Entity。实体具有属性ID以及可能的其他主要方法,例如,它公开了init,它接受​​了可以初始化类/结构实例的属性字典。

该实体也知道"持久存储",因此您的User类也可能符合协议" Storable",它暴露类和实例方法,如{ {1}},savecreateupdatedelete等。

这只是一个完整解决方案的冰山一角。你可能会看看其他人是如何解决这个问题的。有关想法,请参阅

  • 使用从JSON

  • 填充的核心数据对象
  • 实施Active Record Pattern

  • 查看一些Object Relational Mappers(有很多实现和库)。即使你需要从JSON映射到Objects,这些也会提供一些提示。

  • 如果您仍然不满意,请查看ASP.NET

利用" Active Record"你可以从这样的方法开始:

query