2

塞纳里奥:

我读过 Martin Fowler 的书P of EAA,偶然发现了名为 Identity Map 的模式。我考虑过在 ASP.NET MVC 应用程序中使用这种模式。

问题:

据我所知,ASP.NET MVC 请求生命周期总是在处理请求后杀死所有对象,这意味着我的域层/映射层(包含我的身份映射)也将被清除。如何在像 ASP.NET MVC 这样的无状态环境中使用这种模式(见下文)?在无状态环境中有意义吗?我可以将身份映射设为静态并引入会话 ID 以重新获得我已经加载的对象吗?

身份图:

通过将每个加载的对象保存在地图中,确保每个对象仅加载一次。在引用对象时使用地图查找对象。马丁·福勒

在此处输入图像描述

4

1 回答 1

1

标识映射用于实现许多面向对象映射器中的一级缓存。如果您的应用程序堆栈涉及实体框架或 nHibernate(或另一个 orm),那么您很可能已经有一个身份映射。但这可能是您已经知道的。

身份映射是否可以是静态的问题没有明确的答案,我可能可以想象它可以工作但缺点很严重的情况:

  • 缓存将无法轻松查看任何外部更改
  • 内存消耗会不受控制地增长
  • 可能会出现并发问题

没有所有这些问题的身份图的实施可能是不必要的困难。将地图的生命周期限制为单个请求更安全且成本更低。请注意,它仍然可以完成工作 - 如果请求涉及多次读取,则身份映射会在适用时提供数据而不是数据库。

于 2013-07-11T17:56:54.117 回答