我应该有重复的类属性还是创建额外的数据库表?

时间:2017-04-18 19:25:25

标签: c# sql

我正试图想出一个数据模型来代表一个简单的货币交易系统。

我有一个类来表示一个Transaction,另一个类来表示TransactionRecurrence。

这两个类都需要Id,Amount,Type(提款/存款)的属性以及某种类型的注释。交易还将持有TransactionDate,而TransactionRecurrence将持有某种数据来表示重现(每月10日等)。

我的问题是:对于两个类共享的属性,我应该只复制两个类中的属性(这将违反DRY原则),还是应该创建一个新类,比如说,包含持有的类的TransactionInfo然后四个属性将具有该类型的属性添加到另外两个类(这将需要一个新的DB表和外键引用/ SQL连接,这将减慢查询速度)?

编辑:例如,用户将拥有一组事务(这是一次性事务)和一个单独的TransactionRecurrence集合,它们都是通过web api在客户端上创建的。它们存储在数据库中的单独表中。然后用户可以通过api请求交易。事务可以直接添加到集合中,但是在添加到集合之前,需要使用TransactionRecurrences根据请求传递的日期范围生成更多的Transaction对象。然后将该集合序列化并发送给请求者。

1 个答案:

答案 0 :(得分:2)

为什么不拥有一个包含这些公共属性的抽象基类或接口,并让您的具体类实现或继承该接口或基类。这样你就不再复制属性了。

此外,解释你想要实现的目标,并提供更好的例子。所以有人可能会提出更好的方法。

如果每笔交易都有重复设施,那么您可以考虑使用Composition,如下所示

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