首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用Web进行过滤

利用Web进行过滤
EN

Stack Overflow用户
提问于 2019-03-13 20:39:19
回答 1查看 1.2K关注 0票数 3

我有一个带有几个Web控制器的应用程序,现在我有了一个需求,即能够通过对象属性过滤结果。我一直在考虑使用OData,但我不确定这是否合适,原因有几点:

  1. Web控制器不能直接访问DataContext,而是通过我们的“域”层从我们的数据库中获取数据,因此它对实体框架模型没有可见性。
  2. 在第一项中,Web处理域层中生成的轻量级DTO模型对象。这就有效地隐藏了EF模型。这里的问题是,我希望在我们的数据库中执行这些查询,但是当Web方法从域层获取集合时,集合中的所有对象都已经映射到这些DTO对象,所以我不知道OData过滤器在对象被从EF中一次从EF中删除时如何能够完成它的工作。
  3. 这一项可能是最重要的:我们真的不想允许对我们的Web /数据库进行任意查询。我们只是想利用这个OData库来避免编写我们自己的过滤器,并为我们的Web端点可能返回的每种类型的对象过滤解析器/构建器。

我是不是走错了第三条路?如果没有,我们是否能够使用这个OData库而不对Web和EF的交互方式进行重要的重构?

EN

回答 1

Stack Overflow用户

发布于 2019-03-13 22:18:25

我还没有使用OData的经验,但据我所见,它的设计目的是提供一个上下文,并管理这些模型的交互和返回。我绝对不喜欢以任何形式将实体返回给客户。

这是一个丑陋的处境,但当我面对这种情况时,我的第一个行动方针是向客户施压,以证明他们的搜索需求是合理的。默认的请求几乎总是“好的,它会很好地能够搜索所有东西。”我对此的回答是,我不想知道你想要什么,我想知道你需要什么,因为我不想给你一把上膛的枪,让你把自己的脚踢掉,然后让你责怪我,因为系统停止运转。搜索是一个巨大的性能杀手,如果它太开放的话。这是很难测试的准确性/相关性,并有效索引100%的可能的搜索案例,当用户只需要25%的这些场景。如果客户端无法告诉您他们将需要什么搜索,并且只想要所有东西,因为他们可能需要它,那么他们还不需要它。

就我个人而言,我坚持特定的搜索DTO并将它们翻译成linq表达式。

如果我遇到这样的困难,我会:

  1. 尝试将这些搜索/报告从与活动数据库同步的报告副本上执行。(当一些白痴经理提出一些古怪的、非索引的搜索标准时,为了将出血降到最低,这样就不会将人们试图工作的生产DB捆绑起来。)
  2. 创建一个新的有界DbContext,用于使用单独的实体定义进行搜索,该定义只公开表示搜索条件和ID的属性的最小值。
  3. 将这个有限制的上下文挂钩到API和OData中。它将返回“搜索结果”。当用户选择搜索结果时,使用针对API的ID(s)来加载适用的域,或启动操作等。

1号是可选的,一个很好的条件,只要他们能够忍受搜索,直到复制才能“看到”更新的标准。(也就是说,根据复制策略/大小,只需几秒钟到几分钟)这些搜索通常用于报告类型的查询,因此我会将它们与用户使用的日常常规搜索选项保持分离。(即高级搜索选项等)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55150841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档