如何在c#中实现接口之间的一对多关系?
How to implement one to many relationship between interfaces in c#?
我想为 Bank(IBank) 和 Account(IAccount) 定义 2 个接口。我不确定,我应该将 IAccount
的列表放入 IBank
接口中,还是将类型为 IBank
的 属性 放入 IAccount
中?
根据软件的需要,我的主要实体是IAccount
,我只想IBank
找到每个帐户的额外信息。
这是我的主要实现:
public interface IBank
{
int BankId { get; }
string Name { get; }
string Description { get; }
string BranchCode { get; }
DateTime CreatedAt { get; }
DateTime ModifiedAt { get; }
List<IAccount> Accounts { get; }
}
public interface IAccount
{
int Id { get; set; }
string Name { get; set; }
DateTime Created { get; set; }
string AccountNumber { get; set; }
int BankId { get; set; }
decimal Value { get; }
}
您需要考虑IBank和IAccount应该代表的业务关系。
所以我假设;
- 一家银行可以有 0 个、1 个或更多个银行账户。
- 一个银行账户只能link转到一家银行。
那么我们可以有以下
public class BankAccount: IAccount
{
//other properties
public IBank AssociatedBank {get; set;}
}
public class Bank: IBank
{
//other properties
public List<IAccount> BankAccounts { get; set; } = new List<BankAccount>();
}
这样我们就有了我们想要代表的业务关系。每个 BankAccount
都是 IAccount
类型,并且 link 编辑为单个 AssociatedBank
,它的类型是 IBank
。
每个 Bank 都是 IBank
类型,并且有 0,1 个或更多 BankAccounts
类型 IAccount
.
你需要考虑的是,你真的需要在两个方向上关联它们吗?
根据您的描述,也许您不需要从银行到账户的 link,从 BankAccount 到银行的“one-way”link 就足够了。
你的数据模型应该只代表你的系统真正需要的东西,其他的都是 over-specified。做更多很诱人,但坚持规范非常重要。
编辑:
如果是这种情况,那么您可以从银行 class.
中删除 public List<IAccount> BankAccounts { get; set; } ...
我想为 Bank(IBank) 和 Account(IAccount) 定义 2 个接口。我不确定,我应该将 IAccount
的列表放入 IBank
接口中,还是将类型为 IBank
的 属性 放入 IAccount
中?
根据软件的需要,我的主要实体是IAccount
,我只想IBank
找到每个帐户的额外信息。
这是我的主要实现:
public interface IBank
{
int BankId { get; }
string Name { get; }
string Description { get; }
string BranchCode { get; }
DateTime CreatedAt { get; }
DateTime ModifiedAt { get; }
List<IAccount> Accounts { get; }
}
public interface IAccount
{
int Id { get; set; }
string Name { get; set; }
DateTime Created { get; set; }
string AccountNumber { get; set; }
int BankId { get; set; }
decimal Value { get; }
}
您需要考虑IBank和IAccount应该代表的业务关系。
所以我假设;
- 一家银行可以有 0 个、1 个或更多个银行账户。
- 一个银行账户只能link转到一家银行。
那么我们可以有以下
public class BankAccount: IAccount
{
//other properties
public IBank AssociatedBank {get; set;}
}
public class Bank: IBank
{
//other properties
public List<IAccount> BankAccounts { get; set; } = new List<BankAccount>();
}
这样我们就有了我们想要代表的业务关系。每个 BankAccount
都是 IAccount
类型,并且 link 编辑为单个 AssociatedBank
,它的类型是 IBank
。
每个 Bank 都是 IBank
类型,并且有 0,1 个或更多 BankAccounts
类型 IAccount
.
你需要考虑的是,你真的需要在两个方向上关联它们吗? 根据您的描述,也许您不需要从银行到账户的 link,从 BankAccount 到银行的“one-way”link 就足够了。
你的数据模型应该只代表你的系统真正需要的东西,其他的都是 over-specified。做更多很诱人,但坚持规范非常重要。
编辑: 如果是这种情况,那么您可以从银行 class.
中删除public List<IAccount> BankAccounts { get; set; } ...