我正在开发我的第一个.NET项目(.NET 3.5,ADO.NET和C#).我们已经构建了我们的实体模型,并且正在尝试构建一个干净的业务对象层.
我们已经获得了基本的实体模型,并且我们希望将某些业务级语义添加到默认数据访问器(导航属性等).
例如,让我们假设,我们之间有很多一对多的关系Person
和BankAccounts
.让我们假设在业务层我们想添加冻结帐户的功能.我们现在希望能够从Person导航到:
他们所有的银行账户,
他们的非冻结银行账户,和
他们冻结的银行账户.
当然,我们希望将名义案例作为默认情况:如果我导航,Person.BankAccounts()
我希望它返回非冻结帐户.我可以添加导航属性Person.FrozenBankAccounts()
和Person.AllBankAccounts()
.
我们提出的两种方法似乎都有相当多的代码味道.
我们找不到覆盖实体模型方法的方法.因此,请将其Person.BankAccounts()
作为返回所有银行帐户的访问者.然后我们添加一个Person.FrozenBankAccounts()
和一个Person.NonFrozenBankAccounts()
.
将另一个显式层添加到包装所有访问的代码库中BankAccounts
.
方法1的问题在于,名义商业案例(访问未冻结的银行账户)是该批次最不直观的方法名称.
使用方法2,当我们从实体模型层继承对象时,我们必须覆盖每个方法以确保它不会从底层返回对象.所以我们创建一个BL_Person
有一个BankAccounts()
返回BL_BankAccount
对象集合的方法.但在这种情况下,所有代码似乎都有些愚蠢.
有没有比我们考虑过的更好的方法?如果没有更好的方法,我所概述的两个中哪一个似乎是更好的解决方案(鉴于我们需要使用50多个课程)?
注意:在进行网络搜索时,我确实找到了一封给微软的公开信,题为" ADO .NET实体框架不信任投票"似乎意味着没有一种好方法可以明确区分关注点.