我应该使用Linq和IQueryable <t>来实现Query对象模式</t>

时间:2013-01-23 22:50:20

标签: linq entity-framework architecture iqueryable

假设:对于可预见的未来,这个解决方案总是将MS,C#,。Net,SQL Server,Entity Framework和DAL,BLL等不会传递给外部源,但可能会在单独的应用程序中使用同一套房

一个。我应该使用Linq和IQueryable来实现Query对象模式而忘记处理存储库和/或DAO吗?

B中。如果符合模式,我必须做什么/实施?没有找到很多例子如何做到这一点。

1 个答案:

答案 0 :(得分:0)

我认为你错过了技术与模式之间的关系。 Linq是一种以非常有用的方式处理数据的低级技术。但它不是一种模式,与它没有任何联系。

另一方面,如果你想实现查询对象模式(这是一个非常好的主意,如果你需要实现非常简单的数据查询功能,并且你可以用多种方式查询数据),你可以实现它使用Linq或不使用。这完全取决于你。而linq本身无法帮助您实现查询对象。

此外,即使您决定在查询对象的帮助下实现数据访问层,这并不意味着您不需要使用Service或Repository模式。在大多数情况下,特别是如果您使用到达查询功能,您应该能够实现两者,因为实现具有您需要的所有方法的服务或存储库非常困难。

但无论如何,对于复杂的项目,允许用户在你的DAL代码之外使用IQueryable会导致严重的问题。简短示例:您的一些数据发生了变化,现在它包含ID1字段的ID字段。如果你有单一的方法来查询你的数据,你只需在一个地方更改代码,但如果你只允许在任何地方使用IQueryable,那么你需要找到使用ID的所有地方并将其替换为ID1。

而且,如果你的查询功能很差,那么你最重要的是既不需要查询对象也不需要存储库等。活动记录模式将非常确定。