背景:
为网站有大量的查询数据做缓存。
方案使用第三方组件oscache.jar,如何能合理的集成这个组件,使得需要缓存的对象和缓存的算法隔离开来,使得两者能够独立演化,而不是相互耦合,看下面的设计图:

见上图,可以看出设计方案采用了策略模式和代理模式
我们将缓存算法使用CacheFacade 接口进行了抽象,使得需要缓存的对象和缓存算法相互独立,需要缓存的对象可以方便的更换缓存算法,本案中我们使用了oscache。
Cacheable接口抽象了需要缓存的对象。
假定以前代码已经写好,service--->dao
现在需要加入缓存,怎么实施?
从上图可以看出CachedTopVideosContributedDaoImpl实现了dao接口和Cacheable接口,这样service层无需作任何改动,CachedTopVideosContributedDaoImpl实例是一个代理对象,对原先的dao实例进行了封装,并在其中加入缓存方案。就是这么简单,说白了就是在service和dao之间加了一个代理层。
但是本设计方案有些缺陷:
如果大量的dao需要缓存,因为本设计采用了静态代理的方式,所以需要大量的代理类,也可以采用一个缓存代理多个dao,但是随着系统越来越大,这种方式会难以维护。能否采用AOP的方式实现?这是一个值得思考的地方
分享到:
相关推荐
《设计模式:可复用面向对象软件的基础》是一本经典的软件工程著作,它详细阐述了在面向对象编程中,如何通过使用预定义的解决方案模板来解决常见问题,从而提高代码的可读性、可维护性和复用性。设计模式是经验丰富...
这些模式是经过时间和经验验证的解决方案,可以帮助开发者更高效、更灵活地编写可复用的面向对象软件。《设计模式:可复用面向对象软件的基础》这本书详细阐述了23种经典的设计模式,为程序员提供了宝贵的指导。 1....
这些模式是由经验丰富的开发者在长期实践中总结出来的,为软件设计提供了可复用的解决方案,从而提高了代码的质量、可维护性和可扩展性。设计模式不仅适用于Java、C++等面向对象语言,也逐渐被应用到函数式编程和...
在设计和实现这样的系统时,首先需要根据实际应用场景的需求,制定详细的设计方案,包括确定所需的端口数量、数据处理速率、端口类型(输入/输出)以及与ADC的交互方式等。设计方案完成后,就可以利用硬件描述语言...
标题提到的“自定义可复用的BaseAdapter”是一个通用解决方案,旨在帮助开发者避免重复编写相似的适配器代码。 创建自定义`BaseAdapter`的主要步骤包括以下几个关键知识点: 1. **继承BaseAdapter**:首先,你需要...
缓存技术在IT行业中扮演着至关重要的角色,它能够显著提升系统的响应速度和性能。本文将深入探讨基于标题“缓存...通过理解并分析其源码,我们可以学习到缓存设计的基本原则,并将其应用到实际项目中,提升系统性能。
模块化设计允许将复杂系统拆分为多个独立、可复用的组件,每个组件负责特定功能,降低了系统的耦合度,从而更容易进行扩展和维护。微服务架构则更进一步,它提倡将单一应用程序分解为一组小型、独立的服务,这些服务...
"Java设计方案"这一主题涵盖了多种设计原则、模式以及最佳实践,旨在优化代码结构,提高代码的复用性和可读性。这里我们将深入探讨Java设计中的关键概念。 首先,让我们谈谈面向对象设计的基础。Java是一种面向对象...
"设计模式可复用面向对象软件的基础"这个主题深入探讨了如何利用设计模式来构建更加灵活、可维护和可扩展的软件系统。 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局访问点。在系统中需要控制...
本设计方案将 Java 技术和 J2EE 架构组合,整合数据库访问、Java 组件和 WEB 技术,实现了复杂的大中型应用的要求,同时具有良好的可扩展性。 从设计理念上来说,本方案旨在满足用户的使用习惯和思维习惯,同时也...
在实际应用中,我们可以根据项目需求进一步扩展这个类,例如添加错误处理、支持多种缓存前缀、缓存压缩等特性。此外,还可以结合文件系统的锁机制来防止并发写入导致的数据不一致问题。 总结来说,PHP文件页面缓存...
本设计方案考虑到系统升级和扩展性,遵循模块化、可复用性的原则,以适应未来技术发展和市场需求的变化。 ### 2. 总体设计 #### 2.1 需求规定 MC软件模块的设计需满足以下两个主要规定: ##### 2.1.1 功能规定 - ...
该系统旨在为大规模在线服务提供高性能、高可用性的缓存解决方案。R2M不仅利用了Redis作为内存中的键值数据库的优势,还通过其独特的设计解决了大规模部署下的管理和运维挑战。 #### 二、线上环境概况 R2M在实际...
《设计模式:可复用面向对象软件的基础》 设计模式是软件工程中的一种重要概念,它代表了在特定上下文中解决常见问题的经验总结。这些模式是经过时间和实践验证的解决方案,能够帮助开发者创建更加灵活、可维护和可...
在本文中,我们将深入探讨Redis作为高效数据存储与缓存解决方案的关键特性、应用场景以及如何在实际开发中运用。 1. **Redis的数据结构** Redis支持多种数据结构,包括字符串(Strings)、哈希(Hashes)、列表(Lists)...
- **M的概念**:Memcached是一个高性能的分布式内存对象缓存系统,它设计用于缓解数据库的负载,通过存储和复用数据库查询结果来提升Web应用的响应速度和可扩展性。 - **支持的语言**:Memcached支持多种编程语言...
这本书是面向对象设计的核心,它详细阐述了23种经典的设计模式,这些模式在解决软件开发中的常见问题时提供了可复用的解决方案。 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了在软件设计中...
【最全面的门户网站架构设计方案】是一份深度探讨和实践性的文档,主要针对如何构建高效、稳定、可扩展的门户网站架构。这份方案具有重要的参考价值,适用于任何寻求优化或新建门户网站的组织。 首先,文档深入剖析...