3

理由:

HQL 和 NH 标准是 NHibernate 特定的构造,因此它们是服务器端 DAL 实现细节。我不希望他们“泄漏”到客户端。因此,我们的客户端提供了 LINQ 表达式供服务器处理。

对我来说似乎是合理的,然而,有些人却不这么认为,所以我想知道为什么。

谢谢。

4

1 回答 1

3

反对接受来自(或暴露IQueryable<>给)客户端的表达式的论点是它允许像过滤和加入这样的非客户端逻辑在“错误”的地方发生。如果客户端暴露了错误的数据,您现在有两个地方进行检查:客户端逻辑和 DAL 背后的逻辑。从本质上讲,它使不分离您的关注点变得太容易了。

话虽如此,有时刻意和谨慎地使用这些技术可以改进您的应用程序。例如,使用 anIQueryable<>是支持由服务器而不是在结果集上有效执行的客户端排序和分区(跳过/获取)的好方法。相反的论点是您应该只在 DAL 中提供排序和分区参数。

最终使用对您的应用有意义的东西。如果你给自己太多的绳索,发现自己悬而未决,你总是可以在以后重构。

于 2009-08-27T12:53:40.500 回答