首页 文章

自定义Swift类中的CRUD方法

提问于
浏览
0

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

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

  • 1

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

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

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

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

    该实体也知道"Persistent Store",因此您的 User 类也可能符合协议"Storable",该协议暴露类和实例方法,如 savecreateupdatedeletequery 等 .

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

    • 使用从JSON填充的Core Data对象

    • 实施Active Record Pattern

    • 查看一些对象关系映射器(有很多实现和库) . 即使你需要从JSON映射到Objects,这些也提供了一些提示 .

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

    利用“Active Record”方法,您可以从以下内容开始:

    public final class User {
        public init(firstName: String, lastName: String) {
            self.firstName = firstName
            self.lastName = lastName
        }
        public var firstName: String
        public var lastName: String
        public internal(set) var id: Int
    }
    
    
    protocol ActiveRecord {
        static func create(object: Self) throws -> Self
        static func fetch(id: Int) throws -> Self
        static func update(object: Self) throws -> Self
        static func delete(id: Int) throws 
    }
    
    extension User: ActiveRecord {
        static func create(object: User) throws -> User {
            ...
        }
        static func fetch(id: Int) throws -> User {
            ...
        }
        static func update(object: User) throws -> User {
            ...
        }
        static func delete(id: Int) throws {
            ...
        } 
    }
    

相关问题