5

使用 Mendix Business Modeler 构建 Web 应用程序与使用 Java/Spring/JSF 等技术开发 Web 应用程序有着根本的不同。但是,为了这个问题,我将尝试比较两者:

在基于 Java/Spring 的应用程序中,我可以将我的应用程序与 3rd 方产品 Ehcache 集成以在方法级别缓存数据。例如,我可以将 ehcache 配置为存储给定方法的返回值(具有特定的生存时间)。每当调用此方法时,ecache 将自动检查该方法之前是否已使用相同的参数调用过,以及缓存中是否有存储的返回值。如果是这样,则该方法永远不会实际执行,而是立即返回缓存的方法返回值。

我想在 Mendix 中拥有相同的功能,但在这种情况下,我将缓存 Microflow 返回值。此外,我不想被迫在各处添加操作,明确告诉 Microflow 检查缓存。我想在一个集中的地方注册我的微流进行缓存,或者简单地标记每个微流以进行缓存。换句话说,这个问题与 Mendix 中的面向方面编程 (AOP) 的概念和缓存一样多:有没有办法将挂钩连接到 Microflow 调用中,以便我可以应用执行前和执行后操作?在我看来,AOP 在 Java 中占有一席之地的原因与 Mendix 中存在的原因相同。

4

1 回答 1

7

在使用 Mendix 应用程序时,它会尽可能多地为您做事,在这种情况下,这意味着平台已经有一个对象缓存来保存所有需要缓存的对象。Mendix 平台在内部使用 Ehcache 来执行此操作。

但是,实际上不可能像在 Java/Spring 中那样影响缓存。这是由于 Mendix 平台的所有功能,它已经尝试尽可能高效地缓存所有对象。
您创建的每个对象都始终添加到缓存中。使用该对象时,它会一直保存在缓存中,直到平台检测到无法再通过 UI 或微流访问特定对象。还有一些可用的 API 调用指示平台将对象保留在缓存中,而不管它的使用情况。但这并没有为您提供您所要求的灵活性。


但特别是关于你的问题,我最初的回答是:你为什么要缓存微流输出?
对象已经缓存在内存中,浏览器客户端只有在收到指令时才会刷新缓存。您正在使用的任何对象都将被缓存。此外,在查看我们使用的大多数微流时,我认为我不太可能想要缓存输出而不是重新运行微流。由于大多数微流的设计,我认为大多数微流可能会在每次执行时返回略有不同的输出。

您可以在 Mendix 平台中订阅许多侦听器类,这些类允许您触发除默认操作之外的某些内容。但这需要对当前行为有一些详细的了解。
例如,您可以覆盖登录操作,但如果您不执行所有正确的验证,则可能会使登录过程的安全性降低。

于 2015-03-30T13:18:11.037 回答