在多层应用程序中,是否应该允许客户端将自己的 linq 表达式发送到服务器?

2024-02-13

理由:

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

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

Thanks.


反对接受来自(或暴露)的表达的论点IQueryable<>与)客户端相比,它允许非客户端逻辑(例如过滤和加入)发生在“错误”的地方。如果客户端暴露了错误的数据,您现在有两个地方需要检查:客户端逻辑和 DAL 背后的逻辑。从本质上讲,它很容易让你无法区分你的担忧。

也就是说,有时故意和仔细地使用这些技术确实可以改进您的应用程序。例如,使用IQueryable<>是支持客户端排序和分区(跳过/获取)的好方法,这些排序和分区由服务器而不是在结果集上高效执行。反驳的观点是,您应该只在 DAL 中提供排序和分区参数。

最终使用对您的应用程序有意义的东西。如果你给自己太多的束缚而发现自己悬而未决,你随时可以在以后进行重构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多层应用程序中,是否应该允许客户端将自己的 linq 表达式发送到服务器? 的相关文章

随机推荐

  • 如何设置 Pyomo 求解器超时?

    如何设置 Pyomosolve 方法的超时 更具体地说 告诉 pyomo 在 x 秒后 返回当前找到的最优解 所以我能够通过 pyomo 文档找到答案 我认为分享会有所帮助 设置 Pyomo 的超时时间solve method solver
  • 非对称密钥容器的相互转换(例如:X.509、PGP、OpenSSH)

    非对称加密密钥基本上可以在主要密钥容器格式之间相互转换吗 例如 我可以将 X 509 密钥文件转换为 PGP 或 OpenGPG 密钥文件吗 并且 假设答案是肯定的 以任何格式保存一对密钥并转换为该场合所需的任何容器文件格式是否 安全中立
  • 如何在emacs语义中包含标准jdk库?

    我使用的是 Emacs 23 2 这是我加载语义的方式 setq semantic default submodes global semantic idle scheduler mode global semanticdb minor m
  • R中glmnet中的岭回归;使用 glmnet 包计算不同 lambda 值的 VIF

    我有一组多重共线性变量 我正在尝试使用岭回归来解决这个问题 我正在使用glmnetR 中的包 alpha 0 用于岭回归 library glmnet 我有一系列 lambda 值 并且我通过 cv glmnet 选择最佳 lambda 值
  • ListView 列的最小宽度

    我怎样才能指定MinWidthWPF 中的 Listview 列 此代码使用 Thumb 控件 它将阻止用户仅将标题拖动到指定的宽度 将其添加到您的 WPF 中
  • 如何在 React 中实现 Cloudinary 上传小部件?

    我正在尝试在我的 React 应用程序中使用 Cloudinary 上传小部件 但我遇到了问题 运行项目时 上传小部件会立即出现 但是当关闭并再次打开时 应用程序崩溃并显示以下消息 widget open 不是一个函数 Note 上传工作正
  • 如何使用异步回调进行同步操作?

    如何用异步函数进行同步操作 class MyClass static let shared MyClass let operationQueue OperationQueue let dispatchGroup DispatchGroup
  • 隐式转换的 gcc 警告标志

    我最近遇到了一个与下一个类似的错误 double getSomeValue return 4 0 std string str str getSomeValue 正如您所看到的 很容易发现问题 但在大型代码库中getSomeValue 与调
  • 如何在CSS中动态调整图像大小?

    我有一个简单的 html css 页面 上面有 3 个图像 我试图根据浏览器窗口的大小调整页面大小 现在 我在一个 div 中有 3 个图像 其高度设置为周围容器的百分比 并且图像设置为 height 100 和 width auto 现在
  • 在 Ruby 中向类添加实例变量

    如何将实例变量添加到已定义的类中runtime 然后从类外部获取并设置其值 我正在寻找一种元编程解决方案 它允许我在运行时修改类实例 而不是修改最初定义该类的源代码 一些解决方案解释了如何在类定义中声明实例变量 但这不是我要问的 Ruby
  • WinDbg——TraceListener 和饱和线程池

    我有一个多线程 NET Windows 服务 它间歇性地挂起 可能每两周 24 7 运行一次 当发生挂起时 线程池完全饱和 因为对我们的自定义跟踪侦听器的调用由于某种原因开始阻塞 根据 Windbg 的说法 有问题的代码中没有任何锁 也没有
  • SwiftUI 更新地图区域导致有关修改状态的警告

    我有一个使用 iOS 14 中新的 SwiftUI Map 的项目 我希望能够动态更新地图中心的位置 当您点击 缩放 按钮 然后点击 位置 按钮时 地图可以正常工作并重新以伦敦为中心 但是 如果您只是点击位置按钮 它会重新以伦敦为中心 但会
  • Sublime Text - 转到行和列

    目前 转到行快捷方式 Windows Linux 中的 CTRL G 仅允许导航到特定行 最好选择允许在逗号后指定列号 例如 30 11转到第 30 行 第 11 列 是否有任何插件或自定义脚本可以实现此目的 Update 3 这是现在Su
  • 使用Python在NLP中的命名实体识别中提取人名

    我有一个句子需要单独识别人名 例如 sentence Larry Page is an American business magnate and computer scientist who is the co founder of Go
  • 从本机应用程序到网站的切换不起作用

    我的设备 iPad Mini 最新 iOS 8 dp5 Macbook Air 优胜美地 dp5 我在上述两个设备之间进行了切换 Safari 邮件 消息 日历等所有切换都没有问题 我什至可以在 Air 上的网站和 iPad 上的本机应用程
  • 如何在qt中获取联系人列表

    我使用此代码并仅获取一个人的联系方式 contactManager new QContactManager QList
  • 如何从 C++ 打开 URL?

    如何从我的 C 程序中打开 URL 在红宝石中你可以做 x open https google com C 中的等价物是什么 我想知道是否有一个独立于平台的解决方案 但如果没有 我更喜欢 Unix Mac 这是我的代码 include
  • ReadToEnd 之后关闭 StreamReader

    在构造中调用 ReadToEnd 方法后是否可以以某种方式关闭 StreamReader 如下所示 string s new StreamReader filename Encoding UTF8 ReadToEnd 任何具有相同语义的替代
  • Visual Studio 2010/2012 Git 插件

    我正在寻找 git 与 VS 2010 2012 集成的建议 允许开发人员使用基本操作 提交 推送 拉取 切换分支 标记 有几个 Git 源代码控制提供程序 http visualstudiogallery msdn microsoft c
  • 在多层应用程序中,是否应该允许客户端将自己的 linq 表达式发送到服务器?

    理由 HQL 和 NH 标准是 NHibernate 特定的构造 因此它们是服务器端 DAL 实现细节 我不希望它们 泄漏 到客户端 因此 我们的客户端提供LINQ表达式供服务器处理 对我来说似乎合理 但是有些人不这么认为 所以我想知道为什