2017-03-05 64 views
0

我正在研究一个钱跟踪器应用程序,我有两个不同的对象。一个是“交易”,其中包含发生的所有交易,第二个是包含所有重复交易的“重复交易”。这是处理领域中两个相似对象的正确方法吗?

我使用循环事务,如模板,其中包含创建事务所需的所有信息。我正在给出一个选项来清除交易,所以一旦用户清除了重复交易,那么只有我创建了一个交易。我在我的应用程序中使用Realm。

这些都是对象:

class Transaction: Object { 

    dynamic var id: String = UUID().uuidString 
    dynamic var title: String = "" 
    dynamic var amount: Double = 0 
    dynamic var createdAt: Date = Date() 
    dynamic var category: Category? 
    dynamic var recurringTransaction: RecurringTransaction? 
    dynamic var type: TransactionType = .Income 
} 

class RecurringTransaction: Object { 

    dynamic var id: String = UUID().uuidString 
    dynamic var title: String = "" 
    dynamic var amount: Double = 0 
    dynamic var createdAt: Date = Date() 
    dynamic var category: Category? 
    dynamic var type: TransactionType = .Income 
    dynamic var frequency: TransactionFrequency = .Monthly 
} 

这是做了正确的方法是什么?正如你所看到的,两者都包含相似的属性,但同时两者都不同:一个是实际的事务,另一个是模板。

还有一个问题,如果我使用coredata会有什么不同?因为我对coredata没有太多的经验

回答

0

Realm支持在有限程度上进行对象的子类化。如果将子类Object从另一个Object子类中继承,则子类将包含超类的所有属性以及它自己的属性。这将在数​​据库中创建两个单独的表格,并跟踪每种类型。

因此,您不应该需要具有多余的属性名称。像这样的东西应该工作:

class Transaction: Object { 
    dynamic var id: String = UUID().uuidString 
    dynamic var title: String = "" 
    dynamic var amount: Double = 0 
    dynamic var createdAt: Date = Date() 
    dynamic var category: Category? 
    dynamic var recurringTransaction: RecurringTransaction? 
    dynamic var type: TransactionType = .Income 
} 

class RecurringTransaction: Transaction { 
    dynamic var frequency: TransactionFrequency = .Monthly 
} 

(全面披露:我的领域工作),我不会推荐尝试核心数据,如果境界是一种选择,你不是在核心数据经历。学习曲线和所需的样板代码量并不是一件很容易实现的事情。

+0

谢谢。我有点困惑。还有一个问题,如果我想要一个不同的主键?现在我对这两个模型都有相同的主键,但是如果我想改变的话。通过继承我会受到什么限制? – jack

+0

没问题!如果回答了您的问题,请随时将答案标记为正确。 :D是的,所以'Transaction'和'RecurringTransaction'仍然是完全独立的实体。他们的主键不会重叠。除了我所说的之外没有其他限制:它们被视为两个离散的实体。 – TiM

+0

非常感谢您的帮助。 :) – jack

0

单个Transaction类与frequency是可选的呢? 如果它设置为nil,这是一个正常的交易,并且如果它有一个值,它是一个重复交易。如果你想拆分课程,RecurringTransaction可能是Transaction的子类,它只是增加了frequency字段。

+0

我想保持它们的独立性,因为我没有创建交易,直到它被支付,并且如果我想添加一个新的属性,它大部分时间都是空的。 – jack

相关问题