2017-04-18 56 views
2

我試圖想出一個數據模型來表示一個簡單的貨幣交易系統。我應該重複類屬性還是創建額外的數據庫表?

我有一個類來表示一個事務,另一個類來表示一個TransactionRecurrence。

這兩個類都需要Id,金額,類型(提取/存款)和某種註釋的屬性。交易還將持有TransactionDate,而TransactionRecurrence將持有某種數據來表示重複(每月10日等)。

我的問題是:對於這兩個類將共享的屬性我應該只複製兩個類中的屬性(這將違背DRY原則),或者我應該創建一個新的類,比如TransactionInfo,它包含四個屬性,然後將該類型的屬性添加到其他兩個類(這將需要一個新的數據庫表和外鍵引用/ SQL連接,這會減慢查詢)?

編輯:例如,用戶將分別擁有一系列交易(這是一次性交易)以及他們通過Web API在客戶端上創建的單獨的TransactionRecurrence集合。這些數據存儲在單獨的表中。然後用戶可以通過api請求交易。事務可以直接添加到集合中,但是TransactionRecurrences將需要用來生成更多的事務對象,這些事務對象根據請求傳入的日期範圍被添加到集合中。然後序列化集合並將其發送給請求者。

+0

我不知道具體是你的情況,但你可以利用繼承或抽象類。 – NicoRiff

+0

你真的需要考慮他們不同的類嗎?您可以將單個交易視爲零交易(或沿着這些線)的交易回購。 – Jerrad

+0

@Jerrad我也想過這樣做,但是TransactionRecurrence實際上並不是真實存在的東西,因爲它可能代表無數的事務。所以我需要一個實際上可以表示可序列化對象的類。 – toltman

回答

2

爲什麼不有一個抽象基類或接口持有這些公共屬性,並讓您的具體類實現或繼承該接口或基類。這樣你就不會重複這些屬性了。

此外,解釋你試圖實現的目標,並提供更好的例子。所以有人可能會想出更好的方法。

如果每一筆交易都應該經常性設施,那麼你可以考慮使用Composition像下面

public class TransactionRecurrence 
{ 
    public int DurationPerMonth { get; set; } 
} 
public class Transaction 
{ 
    public TransactionRecurrence _transref; 
    public Transaction(TransactionRecurrence transref) 
{ 
    _transref = transref; 
} 
//other properties 
} 
相關問題