gpt4 book ai didi

c# - 从缓存中延迟加载对象图部分的推荐模式

转载 作者:太空狗 更新时间:2023-10-29 19:39:43 25 4
gpt4 key购买 nike

我在 Web 应用程序后面使用内存缓存来最大程度地减少对 SQL 数据库的访问。我通过用 SerializableAttribute 标记 C# 对象来将它们存储到这个缓存中。我们在我们的应用程序中通过 Ninject 大量使用依赖注入(inject)。

其中一些对象很大,我想将它们分解。但是,它们来自单个存储过程调用(即一个存储过程调用被熟化到完整的对象图中),我希望能够分解这些对象并分别从缓存中延迟加载特定的子图而不是一次将整个对象图加载到内存中。

有哪些模式可以帮助我实现这一目标?

最佳答案

就模式而言,我认为从单个存储过程构建的大型复杂对象值得怀疑。我不确定您的缓存是必需的还是只是其实现的当前状态。

我习惯的模式是一种存储库模式,使用填充特定契约的操作。这些操作包含一个或多个数据源,这些数据源调用数据库中的存储过程,这些存储过程将用于构建您所说的其中一个子图。话虽如此,如果您要从数据库中延迟加载数据,那么我只能假设许多对象成员大部分时间都没有被使用,这进一步证明了我的观点 - 分解该对象。

enter image description here

一些关于它的事情:

  • 如果经常使用整个对象,它可能会很健谈
  • 它完全可以通过操作注入(inject)
  • 数据源包含特定对象的读取器,因此只执行一个任务 (SOLID)
  • 可以修改为使用 Entity Framework,无需太多麻烦
  • 可以设计为实现一个接口(interface),使其更易于重用
  • 需要您将该过程分解成更小的、可咀嚼的部分,从长远来看,这可能只会对您有益。
  • 如果只使用其中的一部分,则该图中显示的复杂对象实际上不应该存在。相反,请考虑隔离这些对象。但是,这实际上取决于该对象的使用方式。

更新:

使用您的缓存作为存储库,我可能会这样处理:

enter image description here

所以基本上,您存储遗留对象,但在您的操作中,您使用它们来构建返回给客户端的更多相关 DTO。

关于c# - 从缓存中延迟加载对象图部分的推荐模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com