2014-08-29 75 views
0

我们为我们未来的所有Groovy/Grails应用程序开发了一个相当复杂的框架(由多个插件组成)。这个框架的一个方面是能够从我们存储这些数据的各种系统中检索用户信息。目前我们有三个类代表一个用户(一个用于LDAP(非AD),一个用于AD,一个用于数据库) 。三个独立类的原因是因为它们访问完全不同的系统并基于不同的基类来提供访问这些系统所需的各种功能。还有依赖关系等需要这三类方法。 Spring Security也使用这些类中的一个(AD用于表示用户)。也可以从另一个用户对象类型创建任何用户对象类型。如何缓存表示同一用户的多个对象

我想创建的是我们缓存这些对象的一种方式。例如,在登录期间,总是加载一个类(由Spring Security安装)。但是,在整个使用应用程序的过程中,可能会暂时加载另一个类(例如数据库信息)。理想情况下,我想缓存这些对象(全部代表相同的用户),以便我们不必重新加载信息。我最终希望完成的是将一个用户对象(比如AD)传递给另一个用户类(比如数据库)的工厂方法,并让数据库用户类检查它是否曾经存在之前为这个用户,如果是这样,而不是重新创建自己,只需抓住缓存的副本。我宁愿不使用中央缓存来完成所有这些缓存,而是将缓存的信息存储在实际的对象中(看起来更清晰)。

但我不明白,但是如何做到这一点(从设计的角度来看)。因此,我正在寻求推荐哪些设计模式可以帮助我找出创建此功能的方法。

P.S.为防万一,所有的用户类都扩展了不同的基类,但是它们都实现了一个共享接口。

回答

0

听起来像负责查找相关用户实例的各种服务的适当缓存将是最合适的方法。使用Cache plugin会使这非常微不足道。

您的工厂方法可以委托给适当的服务方法,该方法将使用正确的缓存进行注释。请记住,如果缓存中的项目可能发生更改,则需要使缓存中的项目无效。

+0

有趣的...可以缓存插件与普通groovy类一起使用吗? – 2014-08-29 23:17:42

+0

它可以与任何东西一起使用。普通旧Groovy对象(PO​​GO),普通旧Java对象(PO​​JO),字符串,地图,任何你能想到的东西都可以被序列化。这是一个非常灵活的插件。 – 2014-08-30 08:49:32

相关问题