2010-12-09 53 views
2

到目前为止,我还没有找到对我的问题的答案,我想我有一段时间要问我的第一个问题。开始。从业务层中的数据访问层过滤结果

我有一个数据访问层,负责与各种数据存储元素进行交互,并在查询事物时返回POCO或POCO集合。

我有一个位于此之上的业务层,负责实现从数据访问层返回的对象的业务规则。

例如,我有一个SQL Table of Dogs,我的数据访问层可以返回那个Dog列表作为一个Dog对象的集合。然后,我的业务层将执行诸如筛选低于特定年龄段的狗,或根据业务规则必须发生的任何其他过滤或转换。

我的问题是这样的。根据相关记录处理过滤对象的最佳方法是什么?假设我希望所有拥有猫的人。现在我的数据访问层可以返回所有的猫和所有的人,但是不会为我做任何过滤。

我可以通过不同的数据访问方法实现滤波(即DAO.GetCatPeople()),但是这可能会变得复杂,如果我有相关的属性或关系的多种处理

我可以从两个都返回并在业务层完成自己的所有匹配,这看起来像很多额外的工作,并没有充分利用SQL服务器。

我可以写一个数据过滤接口,如果我的数据访问层发生变化,这个层也必须改变。

这里有一些已知的最佳实践,我可以从中受益吗?

回答

2

我采取的观点是,有两个“原因”你为什么要访问数据:以数据为中心和以用例为中心。

  • Data Centric是类似于CRUD和其他常见/显而易见的东西,这是毫不费力的东西。
  • “用例”中心是您定义接口并匹配POCO用于特定用途的地方。 [有可能我在这里错过了一些常用术语,但用例中心是我的意思]

我认为这两种类型都是有效的。对于用例驱动的应用程序来说,它主要是由以业务为中心的用例驱动的,但我可以看到边缘案例,他们可以在技术上更受驱动 - 只要他们没有违反任何业务规则或变态你的领域模型。

猫和狗应该彼此了解吗?如果它们存在于相同的域模型中,并且在该模型中建立了关系 - 那么当然是的,您应该可以进行如GetCatPeople()这样的查询。

就管理复杂性而言,而不是GetCatPeople()您可以有一个更通用的方法,将属性作为参数:GetPeopleByAnimal(animal)

相关问题