我可以在无状态环境中使用身份图等模式

时间:2013-07-11 17:18:59

标签: asp.net-mvc stateless identity-map

SZENARIO:

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

问题:

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

身份地图:

  

确保每个对象只通过保持加载一次   地图中的每个加载对象。在使用地图时查找对象   指他们。 Martin Fowler

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

  • 缓存无法轻易看到任何外部更改
  • 内存消耗将无法控制地增长
  • 可能发生并发问题

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