假设我有一个定义图像对象的类。图像可以属于相册,并且相册可以属于文件夹。这些数据存储在MySQL中。数据也被缓存。在高速缓存中,它以非规范化的形式存储,即文件夹跟踪它们所关联的图像,并且相册也是如此。这是出于性能原因而实现的。
每当创建照片时,它都会添加到缓存中的文件夹和相册中。因为将代码添加到缓存中的代码相同,并且只有缓存键发生更改,所以会生成一个名为CachedImageSet的单独对象。该文件夹和相册使用其唯一ID和集合类型实例化CachedImageSet,并且它们调用CachedImageSet来添加和删除图像并获取集合中的图像列表。
我不希望客户端代码直接与CachedImageSet交互,因此我在文件夹和专辑类中有方法,这些方法是CachedImageSet方法的包装器。这导致大量代码重复。是否有任何设计模式可以帮助我摆脱这种重复?我正在使用PHP,MySQL和Redis(用于缓存层)。
答案 0 :(得分:0)
我可能会离开基地,但如果我正确解释你的问题,我会使用工厂模式。
像这样的东西(当然是简化的):
<?php
abstract class Folder {
public static function factory($driver = 'Database')
{
$class = 'Folder_'.str_replace('/', '_', $driver);
return new $class();
}
}
class Folder_Database {
public function get() {
// Fetch folder from database
}
public function save() {
// Save folder to database
}
}
class Folder_Cache {
public function get() {
// Fetch folder from Redis
}
public function save() {
// Save folder to Redis
}
}
// Usage:
$folder = Folder::factory('Cache');
$folder->save('....');
答案 1 :(得分:-2)
MVC在我看来是一个非常好的设计模式,但我认为你应该选择最适合你的一个,在维基百科中适合自己(设计模式)