我有一个FinancialAccount类,可以链接到其他三个类中,也可以手动生成,所以我实现了一个Enum,其中包含它所链接的类的类型,以及另外三个可以为空的Guid,用于保存该链接类的Guid
public enum AccountClassificaiton
{
Normal,
Bank,
Contract,
Employee,
}
public Account()
{
...
public Guid Id { get; set; }
public string Name { get; set; }
public AccountClassificaiton AccountClassificaiton { get; set; }
public Guid? ContractId { get; set; }
public Guid? EmployeeId { get; set; }
public Guid? BankAccountId { get; set; }
...
}
我需要一个更好的方法来解决这个问题,因为我不能将这些Guid移出这个类,并且在这个类和这三个类之间存在一对一的关系,并且这些Guid中只有一个应该有一个值,这取决于这个类的AccountClassification
抱歉我的英语,我不是以英语为母语的
编辑-1
我使用的是领域驱动设计模式,在同一个解决方案上有8个项目,所以我很难在没有法律问题的情况下向您展示真正的问题
编辑-2
这个项目是财务管理系统的一部分,财务管理系统是一个庞大的ERP系统的一部分
发布于 2021-10-14 03:21:55
我会用不同的方式设计它:
public enum AccountClassificaiton
{
Normal,
Bank,
Contract,
Employee,
}
public Account()
{
...
public Guid Id { get; set; }
public string Name { get; set; }
public AccountClassificaiton AccountClassificaiton { get; set; }
public List<Account> LinkedAccounts { get; set; }
...
}
差不多吧。
或者,如果您需要根据帐户类型快速查找链接帐户,则更好的方法是使用关键字为AccountClassificaiton类型(值为account对象)的字典按类型对链接帐户进行分组:
public Dictionnary<AccountClassificaiton, Account> LinkedAccounts { get; set; }
当然,如果您有许多链接的帐户,您可以缩进字典以获得更好的搜索效率:
public Dictionnary<AccountClassificaiton, Dictionnary<Guid, Account>> LinkedAccounts { get; set; }
或者使用一个自定义相等比较器来处理Guid和AccountClassificaiton类型的组合键:https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.iequalitycomparer-1?view=net-5.0
https://stackoverflow.com/questions/69568830
复制相似问题