Mendix 中的缓存和 AOP:Mendix 应用程序中的服务器端缓存是否有统一或标准化的方法?
Caching and AOP in Mendix: is there a uniform or standardized approach for server-side caching within a Mendix application?
使用 Mendix Business Modeler 构建 Web 应用程序与使用 Java/Spring/JSF 等技术开发 Web 应用程序有着根本的不同。但是,为了这个问题,我将尝试比较两者:
在基于 Java/Spring 的应用程序中,我可以将我的应用程序与第 3 方产品 Ehcache 集成,以在方法级别缓存数据。例如,我可以将 ehcache 配置为存储给定方法的 return 值(具有特定的生存时间)。每当调用此方法时,ecache 将自动检查先前是否使用相同参数调用过该方法,以及缓存中是否存储了 return 值。如果是这样,该方法永远不会实际执行,而是立即 returned 缓存方法 return 值。
我想在 Mendix 中拥有相同的功能,但在这种情况下,我会缓存 Microflow return 值。另外,我不想被迫到处添加操作,明确告诉 Microflow 检查缓存。我想在一个集中的地方注册我的微流以进行缓存,或者简单地标记每个微流以进行缓存。换句话说,这个问题与 Mendix 中的面向方面编程 (AOP) 的概念一样多,因为它是关于缓存的:有没有办法让钩子进入 Microflow 调用,这样我就可以应用 pre 和 [=19= 】 执行操作?在我看来,AOP 在 Java 中发挥作用的原因在 Mendix 中也存在。
当使用 Mendix 应用程序时,它会尝试为您做尽可能多的事情,在这种情况下,这意味着平台已经有一个对象缓存来保存所有需要缓存的对象。
Mendix 平台内部使用 Ehcache 来做到这一点。
然而,实际上不可能像在 Java/Spring 中那样影响该缓存。这是由于 Mendix 平台的所有功能,它已经尝试尽可能高效地缓存所有对象.
您创建的每个对象总是添加到缓存中。使用该对象时,它会保留在缓存中,直到平台检测到无法再通过 UI 或微流访问特定对象。
还有 API 可用的调用指示平台将对象保留在缓存中,而不管它的使用情况。但这并没有为您提供您所要求的灵活性。
但具体针对您的问题,我最初的回答是:您为什么要缓存微流输出?
对象已经缓存在内存中,浏览器客户端仅在收到指令时才刷新缓存。您正在使用的任何对象都将被缓存。
此外,在查看我们使用的大多数微流时,我认为我不太可能想要缓存输出而不是重新 运行 微流。由于大多数微流的设计,我认为大多数微流可能 return 每次执行时输出略有不同。
您可以在 Mendix 平台中订阅许多侦听器 类,这些侦听器允许您触发除默认操作之外的某些内容。但这需要对当前行为有一些详细的了解。
例如,您可以覆盖登录操作,但如果您没有执行所有正确的验证,您可能会降低登录过程的安全性。
使用 Mendix Business Modeler 构建 Web 应用程序与使用 Java/Spring/JSF 等技术开发 Web 应用程序有着根本的不同。但是,为了这个问题,我将尝试比较两者:
在基于 Java/Spring 的应用程序中,我可以将我的应用程序与第 3 方产品 Ehcache 集成,以在方法级别缓存数据。例如,我可以将 ehcache 配置为存储给定方法的 return 值(具有特定的生存时间)。每当调用此方法时,ecache 将自动检查先前是否使用相同参数调用过该方法,以及缓存中是否存储了 return 值。如果是这样,该方法永远不会实际执行,而是立即 returned 缓存方法 return 值。
我想在 Mendix 中拥有相同的功能,但在这种情况下,我会缓存 Microflow return 值。另外,我不想被迫到处添加操作,明确告诉 Microflow 检查缓存。我想在一个集中的地方注册我的微流以进行缓存,或者简单地标记每个微流以进行缓存。换句话说,这个问题与 Mendix 中的面向方面编程 (AOP) 的概念一样多,因为它是关于缓存的:有没有办法让钩子进入 Microflow 调用,这样我就可以应用 pre 和 [=19= 】 执行操作?在我看来,AOP 在 Java 中发挥作用的原因在 Mendix 中也存在。
当使用 Mendix 应用程序时,它会尝试为您做尽可能多的事情,在这种情况下,这意味着平台已经有一个对象缓存来保存所有需要缓存的对象。 Mendix 平台内部使用 Ehcache 来做到这一点。
然而,实际上不可能像在 Java/Spring 中那样影响该缓存。这是由于 Mendix 平台的所有功能,它已经尝试尽可能高效地缓存所有对象.
您创建的每个对象总是添加到缓存中。使用该对象时,它会保留在缓存中,直到平台检测到无法再通过 UI 或微流访问特定对象。
还有 API 可用的调用指示平台将对象保留在缓存中,而不管它的使用情况。但这并没有为您提供您所要求的灵活性。
但具体针对您的问题,我最初的回答是:您为什么要缓存微流输出?
对象已经缓存在内存中,浏览器客户端仅在收到指令时才刷新缓存。您正在使用的任何对象都将被缓存。
此外,在查看我们使用的大多数微流时,我认为我不太可能想要缓存输出而不是重新 运行 微流。由于大多数微流的设计,我认为大多数微流可能 return 每次执行时输出略有不同。
您可以在 Mendix 平台中订阅许多侦听器 类,这些侦听器允许您触发除默认操作之外的某些内容。但这需要对当前行为有一些详细的了解。
例如,您可以覆盖登录操作,但如果您没有执行所有正确的验证,您可能会降低登录过程的安全性。