eme*_*rys 5 aop caching model-driven-development mendix
使用Mendix Business Modeler构建Web应用程序与使用Java/Spring/JSF等技术开发Web应用程序有着根本的不同.但是,为了这个问题,我将尝试比较两者:
在基于Java/Spring的应用程序中,我可以将我的应用程序与第三方产品Ehcache集成,以在方法级别缓存数据.例如,我可以配置ehcache来存储给定方法的返回值(具有特定的生存时间).每当调用此方法时,ecache将自动检查先前是否使用相同的参数调用了方法,以及缓存中是否存在存储的返回值.如果是这样,则永远不会实际执行该方法,而是立即返回缓存的方法返回值.
我希望在Mendix中具有相同的功能,但在这种情况下,我将缓存Microflow返回值.此外,我不希望被强制在整个地方添加操作,明确告诉Microflow检查缓存.我想在一个集中的地方注册我的Microflows进行缓存,或者只是标记每个Microflow进行缓存.换句话说,这个问题与Mendix中面向方面编程(AOP)的概念一样多,因为它是关于缓存的:有没有一种方法可以挂钩进入Microflow调用,以便我可以应用前后执行操作?在我看来,同样的原因也就是为什么AOP在Java中有它的目的.
小智 7
使用Mendix应用程序时,它会尝试尽可能多地为您执行操作,在这种情况下,这意味着平台已经有一个对象缓存来保留所有需要缓存的对象.在内部,Mendix平台使用Ehcache来做到这一点.
但是,正如您通常在Java/Spring中所做的那样,实际上不可能影响该缓存.这是由于Mendix平台的所有功能,它已经尝试尽可能高效地缓存所有对象.
您创建的每个对象始终都会添加到缓存中.使用该对象时,它将保留在缓存中,直到平台检测到无法再通过UI或微流访问特定对象.还有一些API调用可用于指示平台将对象保留在缓存中,而不管其使用情况如何.但是,这并没有像你要求的那样为你提供灵活性.
但特别是在您的问题上,我的初步回答是:您为什么要缓存微流输出?
对象已缓存在内存中,浏览器客户端仅在指示时刷新缓存.您正在使用的任何对象都将被缓存.另外,在查看我们使用的大部分微流时,我认为我不想缓存输出而不是重新运行微流.由于大多数微流的设计,我认为大多数微流可能会在每次执行时返回略微不同的输出.
您可以在Mendix平台中订阅许多侦听器类,除了默认操作之外,还可以触发某些内容.但这需要对当前行为有一些详细的了解.
例如,您可以覆盖登录操作,但如果您未执行所有正确的验证,则可能会降低登录过程的安全性.