我们为所有未来的Groovy / Grails应用程序开发了一个相当复杂的框架(由多个插件组成)。该框架的一个方面是能够从我们存储此数据的各种系统中检索用户信息。目前我们有三个代表用户的类(一个用于LDAP(非AD),一个用于AD,一个用于数据库) 。三个单独类的原因是因为它们访问完全不同的系统并且基于不同的基类来提供访问这些系统所需的各种功能。还有依赖性等需要这三种方法。 Spring Security也使用其中一个类(AD的一个)来表示用户。也可以从另一个用户对象类型创建任何用户对象类型。
我正在尝试创建的是一种缓存这些对象的方法。例如,在登录期间,始终加载一个类(由Spring Security提供)。但是,在使用应用程序的整个过程中,可能会临时加载另一个类(例如,用于数据库信息)。理想情况下,我想缓存这些对象(它们都代表同一个用户),这样我们就不必重新加载信息了。
最后我希望完成的是能够将一个用户对象(比如AD)传递给另一个用户类(比如数据库)工厂方法,并让数据库用户类检查它是否曾经存在过对于此用户,如果是这样,只需抓取缓存的副本,而不是重新创建自己。我宁愿不使用中央缓存来完成所有这些缓存,而是将缓存的信息存储在实际对象中(这样看起来更干净)。
我无法弄清楚的是如何实现这一目标(从设计角度来看)。所以我正在寻找有关哪些设计模式可以帮助我找出创建此功能的方法的建议。
P.S。万一它很重要,所有用户类都扩展了不同的基类,但是,它们都实现了一个共享接口。
答案 0 :(得分:0)
听起来,负责查找相关用户实例的各种服务的相应缓存是最合适的方法。使用Cache plugin会使这非常简单。
您的工厂方法可以委托给相应的服务方法,该方法将使用正确的缓存进行注释。请记住,如果它们可能会发生变化,您还需要使缓存中的项目无效。