ios swift模型结构与领域数据库

时间:2017-11-24 08:48:08

标签: ios realm swift4 xcode9 pojo

我正在开发我的iOs App并且我正在使用Realm数据库。由于我是ios开发的新手(也是swift和xcode),我对结构化数据有疑问(我已经阅读了一些一般的项目结构指南,但无法找到答案)。我的想法与Java结构相关

对于Realm数据库(RealmSiwft),我创建了一个这样的模型:

@objcMembers class Patient: Object {
    dynamic var patientId:Int = 0
    dynamic var refNumber:String = ""

    convenience init(id:Int, refNumber:String){
       self.init()
       self.patinetID = id
       self.refNumber = refNumber
    }
}

现在,它看起来就像Java中的POJO类。但据我所知,这种模型结构是这样制作的,因此它可以使用Realm。

所以问题是,如果我需要在我的项目中的其他地方使用Patient对象,这个Realm-POJO模型是否适合使用?我的意思是,即使我不需要对它进行数据库操作,我是否应该像普通模型一样使用它?或者我应该使这个Realm模型类似DAO类用于数据库操作,并且只要我想在不使用数据库的情况下与Patient一起玩,就可以制作另一个类似Patient.swift的模型类(我希望不会,因为它的代码重复了很多)< / p>

如果我需要那个不会存储在数据库中的患者模型中的变量怎么办?我可以没有动态吗?初学者怎么样?这让我大吃一惊,据我所知,它看起来很丑陋而且非结构化,或者我只是无法切换到它......

1 个答案:

答案 0 :(得分:1)

  

如果我需要在我的项目中的其他地方使用Patient对象,是这样的   Realm-POJO模型好用吗?   即使我不需要对它进行数据库操作?

您可以使用您的Patient对象而无需节省DB,将它们移动到不同的控制器等等。

  

如果我需要存储的患者模型中的变量怎么办?   在数据库?

查看ignoredProperties()方法。

  

我可以没有动态吗?

不,你不能因为基于Objective-C对象的Realm,所以这是必要的类型。

  

init怎么样?

您可以创建不同的构造函数方法,查看Initialization doc。对于Realm,你应该为注意到的变量设置值(如果你不给它们默认属性值)

你的课应该是这样的:

class Patient: Object {

    // MARK: - Properties
    @objc dynamic var patientId: Int = 0
    @objc dynamic var refNumber: String = ""

    // MARK: - Meta
    // to set the model’s primary key
    override class func primaryKey() -> String? {
        return "patientId"
    }

    //Ignoring properties
    override static func ignoredProperties() -> [String] {
       return ["tmpID"]
    }

    //It's ok
    convenience init(id:Int, refNumber:String){
        self.init()
        self.patientId = id
        self.refNumber = refNumber
    }
}

您可以在realm docs

中找到所有其他详细信息

您也可以使用swift扩展程序扩展基本代码:

extension Patient {
    var info: String {
        return "\(patientId) " + refNumber
    }

    func isAvailableRefNumber() -> Bool {
        return refNumber.length > 6
    }
}