将类的属性类型设计为接口类型

freehooke 2009-10-27 06:16:35
有这样一个场景:我做了一个小程序,需要对每天的开支情况进行登记.
我将开支类(Expense)设计如下:
public class Expense
{
private IAccount account;
private decimal amount;

public decimal Amount
{
get { return amount; }
set { amount = value; }
}

public IAccount Account
{
get { return account; }
set { account = value; }
}
public void Register()
{
account.Draw(amount);
}
}

这里Expense类中的Account属性我设计成了IAccount接口.原因是因为用于消费的帐户有很多种,比如CreditCard(信用卡)\Cash(现金)\DebitCard(借记卡)等等各种帐户:
public interface IAccount
{
string Name
{
get;
set;
}

decimal Amount
{
get;
set;
}

Individual Holder
{
get;
set;
}

Currncy Currncy
{
get;
set;
}
void Draw(decimal amount);
void Deposit(decimal amount);
void Transfer(IAccount account, decimal amount);
}

CreditCard类
public class CreditCard : IAccount
{
private Institution bank;
private string name;
private string number;
private Individual holder;
private decimal overdraft;
private decimal cashLimit;
private decimal interestRate;
private int repaymentDay;
private int billDay;
private DateTime startDate;

public DateTime StartDate
{
get { return startDate; }
set { startDate = value; }
}
private decimal amount;
private DateTime expiryMonth;
private Currncy currency;

#region IAccount 成员

public string Name
{
get
{
return name;
}
set
{
name = value;
}
}

public decimal Amount
{
get
{
return amount;
}
set
{
amount = value;
}
}

public Individual Holder
{
get
{
return holder;
}
set
{
holder = value;
}
}

public Currncy Currncy
{
get
{
return currency;
}
set
{
currency = value;
}
}

public void Draw(decimal amount)
{
this.amount = this.amount - amount;
}

public void Deposit(decimal amount)
{
this.amount = this.amount + amount; ;
}

public void Transfer(IAccount account, decimal amount)
{
this.amount = this.amount - amount;
account.Deposit(amount);
}

#endregion
}

用这几个类来表达我想实现的功能是没有问题的,但是确没办法映射到关系型数据库.各个帐户类倒没有问题,现在主要的问题存在于Expense类的持久化.其中IAccount属性没办法用数据表表示,或都说很难表示.

请各位大侠帮忙解决@
...全文
212 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
freehooke 2009-10-28
  • 打赏
  • 举报
回复
是不是我的类设计有问题,我在取回数据时可能会面临这样的一个问题:由于属性设计成了接口,取回数据时不知道是种类型的Account了
freehooke 2009-10-27
  • 打赏
  • 举报
回复
呵呵,就是没有办法设计好数据库啊!比如我可设计一个Expense表,里面有Account列,现在问题是Account有多个类型,是将这多个类型的Account设计成一个表呢还是多个表?如果只设计成一个表,由于各个类型属性相差很大,Account表会出现很大的冗余,并且其属性名称也不尽相同;如果设计成多个表,那么Expense表中的Account列如何设置呢?这就是问题所在
PandaIT 2009-10-27
  • 打赏
  • 举报
回复
当然是先设计好数据库

实体对应数据库!!
freehooke 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chen_ya_ping 的回复:]
这个要是用LINQ来是没有问题的,就是把要用到的表拖放到.dbml文件中,然后就可以用了,你的上面的那些都是不需要的 。当然你也可以用Nhiberate
[/Quote]
类该如何设计呢?还是先设计数据库?
chen_ya_ping 2009-10-27
  • 打赏
  • 举报
回复
这个要是用LINQ来是没有问题的,就是把要用到的表拖放到.dbml文件中,然后就可以用了,你的上面的那些都是不需要的 。当然你也可以用Nhiberate
freehooke 2009-10-27
  • 打赏
  • 举报
回复
请问我这里类的设计有什么问题吗?如何才能实现我的想法呢?

请各位大侠帮忙解决!谢谢了

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧