【问题标题】:How to deal with large objects?如何处理大型物体?
【发布时间】:2011-03-06 21:47:49
【问题描述】:

我有 5 种类型的对象:地点信息(14 个属性)、所有者公司信息(5 个属性)、图片、评分(存储多个投票结果)、cmets。

所有这 5 个对象将聚集在一起形成一个对象(地点),该对象将包含有关地点的所有信息、图片、cmets 等的所有属性和信息

我想要实现的是拥有一个显示地点对象及其所有属性的页面。另一个问题,如果我想显示所有者公司的资料,我将为每个所有者公司设置对象(但我将添加第六个属性,即他们拥有的所有地点的列表)

我练习了一段时间,但我从来没有接触过实施和性能经验,但我觉得这太过分了!

你怎么看?

【问题讨论】:

  • 您到底要在这里做什么?意见?
  • 是的,我想知道这些物体是否很大? ..我的设计有缺陷吗?如何处理!
  • 一个对象中的 14 个属性没什么大不了的。在一些复杂的场景中,您会发现更多。
  • 好吧,想象一下 cmets 对象有 500 个字符的文本,而您有 50 个 cmets,这只是构成地点信息的 5 个对象中的一个对象.. 如果我加载了更多内容就像所有者配置文件对象中的列表中的 9 个一样......你认为它还可以吗!?

标签: c# asp.net performance webforms business-objects


【解决方案1】:

您必须检查解决方案的用例场景。您是否需要始终显示所有数据,还是只显示其中的一部分?用户是否可能会在常规使用中展开任何折叠的项目,或者此信息是否仅用于不太常见的用途?

根据您的回答,最好一次获取并使用所有数据填充整个页面,或者可能只需要一些数据来呈现初始屏幕,其余的可以获取-需求。

在大多数情况下,最佳解决方案可能涉及仅获取所需数据并根据需要使用 ajax 查询动态更新页面。

至于优化数据访问,您需要在数据库请求的数量和每个单独请求的复杂性之间取得平衡。由于网络延迟,使用尽可能少的查询获取尽可能多的数据通常很重要,即使这意味着您有时会获取您并不总是需要的数据。但是,如果您在单个查询中包含太多数据,那么计算所有连接的成本也可能很高。很少见到这样的解决方案,其中最好首先获取所有根对象,然后为每个元素获取与该元素关联的一些附加对象。因此,将您的解决方案设计为一次获取​​所有数据,但只包含您真正需要的数据,并尽量将涉及的表的数量保持在最低限度。

【讨论】:

  • 我可以对 UI 进行分区以在单独的选项卡中显示每个对象的信息 .. 但是我的 DAL 和 BLL 用完整信息填充对象(所有它的对象).. 我可以使用什么设计来仅获取所需数据?需要时应该自己加载每个对象吗? .. 注意虽然我可以将信息划分到选项卡中,但我需要快速访问所有其他对象,因为它们都可能被查看(不是平等的,但最有可能)
  • @IKashef 编辑答案以包含一些数据访问指南。
  • @IKashef 听起来您打算直接在您的视图中使用您的域实体(又名对象)。这通常是一个坏主意。使用特定的定制视图模型类来保存您需要的信息,例如 PlaceViewModel 与呈现 UI 所需的 Place 实体的属性。您可以在此处找到许多与 MVC 相关的问题/答案并查看模型设计注意事项。
  • @lKashef 如果性能成为问题,您可以针对 Place 对象的不同用例使用不同的获取策略,每个仅加载所需的数据。你可以依赖一个叫做缓存的老技巧。
  • @driushkin。谢谢,我会走到尽头,如果遇到任何问题,我会尝试学习性能测试和缓存..希望这是要走的路!
【解决方案2】:

你真的有 3 个问题需要处理,它们通常分为 DAL、BLL 和 UI

您的对象显然属于 BLL,如果您正在考虑性能,那么您需要考虑如何创建您的对象以及它们如何与 DAL 接口。我有很多具有 50-200 个属性的对象,所以 14 个属性真的没有问题。

它的 UI 端是独立的,如果您考虑在单个页面上显示大量信息的性能,您会考虑选项卡式内容、网格等。

一次解决一件事,看看你的问题出在哪里。

【讨论】:

  • 我没有得到你想说的关于 DAL 部分的内容......但是我担心它们会一次加载到页面上,所以我考虑了选项卡式内容就像你建议的那样,但我不知道如何在我的 BLL 中实现它(注意,我有业务对象层和业务逻辑层)
  • DAL 是数据访问层,即您的 SQL 查询或存储过程。如果您正在考虑如何在 UI 中显示数据,那么您可以使用许多选项,所有选项都取决于您希望如何显示数据。看看 Telerik 对象,它们非常有用
  • 对不起,如果我不清楚,我知道 DAL 是什么,但我不明白您所说的“考虑如何创建对象以及它们如何与 DAL 交互”的意思..嗯,那我有什么选择?请查看我对 Morten Mertner 回答的评论,如果您还需要了解其他信息,请告诉我! =) 谢谢 cusimar
猜你喜欢
  • 2014-04-23
  • 2020-10-02
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 2015-03-17
  • 2013-02-20
相关资源
最近更新 更多