【问题标题】:Can I use patterns like identity map in a stateless environment我可以在无状态环境中使用身份映射等模式吗
【发布时间】:2013-07-11 17:18:58
【问题描述】:

情景:

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

问题:

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

身份图:

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

【问题讨论】:

  • Read this。关于您的问题,可以进行有限的使用,但是对多个请求使用相同的上下文可能会给您带来陈旧的数据。

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2019-12-21
    相关资源
    最近更新 更多