2017-03-05 66 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

相關問題