缓存层在面向服务的体系结构中的位置

时间:2017-01-12 13:03:15

标签: php symfony oop caching design-patterns

好的,我使用三层构建应用程序来操作业务逻辑。

1)第一层解决运输任务。该层发送请求,获取响应并处理网络错误。传输层调用远程API方法并准备使用内部应用程序的数据。

2)第二层是Service。服务是一类(或一组函数),用于处理来自API的特定数据,以根据业务需求对其进行组织。例如,ProductService获取产品列表,然后将每个产品的规范化为对象并进行排序收集。

3)第三层是Controller。该图层是MVC图案的经典图层。它引用数据服务并将其传递给View层。

结果我们得到了互动方案:

Controller => Service => Transport

很明显,这种方案需要将传输层的结果存储到缓存服务(例如memcached)。因此,有必要添加第四层 - Cache

所以在这个方案的哪个位置应该位于Cache层,以及上面三层中的哪一层应该控制它(说从缓存中获取数据或从API获取数据,使缓存无效等)?< /强>

  

我的问题是概念问题,不需要指示   具体的技术,但我想在上下文中得到答案   PHP和Symfony 2/3框架。

1 个答案:

答案 0 :(得分:1)

我会尝试以通用的方式回答。 当您缓存某些数据时,您必须做两件事

  • 当发出读取请求时,您将首先检查缓存中是否存在您需要的项目。如果是,则从缓存中读取它。如果没有,那么从原始源(在大多数情况下是数据库)中获取它,将其存储在缓存中并返回该项。
  • 另一种是你必须操纵一个项目。然后,您将更新数据库,然后还将替换缓存中的项目,以便没有人读取陈旧数据。

因此,通常系统会有一个公共层来读取和写入数据库,并且缓存是在该层周围完成的。

在您的情况下,似乎服务层是操纵对象的层,因此应该是应该实现缓存的层。