首先应该是:设置或缓存对象

时间:2014-06-03 11:45:18

标签: php architecture

我有一个非常基本的问题让我疯狂。我维护自己的小框架。我可以使用YAML / JSON / XML /任何设置文件配置框架。该框架还使用缓存(任何memcached / couchbase /任何甚至基于文件的缓存,如果没有安装缓存服务器)。

所以我没有遇到以下问题:我喜欢缓存从缓存中的设置文件解析的设置,但我想在设置文件中定义用于该设置的缓存类型。

对此有什么合适的解决方案?我无法想象我应该如何管理这个让我想到我的框架中可能有一个非常基本的设计/架构错误。有什么解决方案吗?

2 个答案:

答案 0 :(得分:1)

从Symfony1和Symfony2的经验来看,尽可能多地缓存。

在他们的生产环境中,所有内容都被缓存,因此您会遇到一个问题,即缓存类型在自身缓存的设置文件中描述。

对此的正确解决方案是:在Symfony中:在更改设置后删除prod中的缓存。

对于dev,设置总是被重新读取,因为您没有在调试中进行分析,因此开发的简易性比引导时间更重要。

我建议像symfony那样拆分它。 对于prod,您的设置很少更改,因此解析可以缓存的文件是浪费的资源,速度通常是prod中的优先级。

编辑:关于自举顺序的选项:

  • 首先读取设置,然后决定您需要哪个缓存。
  • 使用硬编码的设置配置缓存(例如基于文件)

我建议使用选项2.您的框架与缓存无关,因为这可以配置,这很好但是对于框架的基本设置,您根本不需要它。您不希望为基本设置设置不同的缓存机制,如memcache,sql等。

Symfony以最有效的方式解决了这个问题,因为它为设置提供了默认的缓存生成,这只是一个php文件。就这样。当symfony加载设置时,它会查找要包含的某个文件,如果它不存在,symfony会通过创建普通的php来缓存它,然后读取它。

答案 1 :(得分:0)

您可以从文件扩展名中确定文件类型。然后,您可以读取缓存类型并创建缓存。缓存应该是单例。

为了创建缓存,我将使用抽象工厂,该实现依赖于文件类型。然后,抽象工厂的适当实现可以读取设置文件并创建正确的缓存。