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

FMM*_*FMM 8 .net c# ninject-2

我在web应用程序后面使用memcache来最小化对SQL数据库的命中.我通过标记它们将C#对象存储到此缓存中SerializableAttribute.我们在应用程序中通过Ninject大量使用依赖注入.

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

什么样的模式可以帮助我实现这一目标?

Sin*_*tic 4

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

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

在此输入图像描述

关于它的一些事情:

  • 如果定期使用整个对象,可能会很麻烦
  • 它完全可以通过操作注入
  • 数据源包含特定对象的读取器,因此仅执行一项任务(SOLID)
  • 可以修改为使用实体框架,无需太多麻烦
  • 可以设计实现接口,使其更具可重用性
  • 需要你将这个过程分解成更小的、可咀嚼的碎片,从长远来看,这可能只会对你有利。
  • 如果只使用该图中显示的复杂对象的一部分,那么它确实不应该存在。相反,请考虑隔离这些对象。然而,这实际上取决于该对象的使用方式。

更新:

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

在此输入图像描述

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