如何在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; } ...