我有一个自定义框架,其中我有一个使用我自己的Cache
类的类/方法。
目前它是紧密耦合的。所以一个方法实例化这个Cache
类是这样的:
public function someMethod ( )
{
$cache = new Cache\HHCache();
}
我想删除紧密耦合,但这实际上是我有点卡住的地方。
我认为创建某种形式是个好主意ServiceProvider
类是个好主意。但我不确定这是否真的是正确的方法。
首先,我有HHConfig
一个文件,该文件具有static
定义缓存类的属性。简而言之:
class HHConfig
{
static $_cacheClass = '\Core\Cache\HHCache';
}
所以基本上我有一个像这样的类,它是我框架核心功能的一部分:
interface IHHServiceProvider
{
public function getService ( );
}
然后我有另一个实现这个的类interface
。
class HHCacheProvider implements IHHServiceProvider
{
public static function getService ( )
{
$class = HHConfig::$_cacheClass;
return new $class();
}
}
所以现在someMethod
可以使用HHCacheProvider
类来获取一个Cache
类的实例。
public function someMethod ( )
{
$cache = HHCacheProvider::getService ( );
}
我的课程IHHServiceProvider
不像典型的Provider
课程,因为您无法真正注册任何课程Services
。它只是看起来在HHConfig
类中查找要加载的“类”并在该实例中返回。
所以不知何故,这种方法对我来说并不合适,但我确实认为它显示了我想要实现的目标。我可以通过哪些方式改进这一点?
请注意,我不是为此寻找一个简单的依赖注入模式。因为我不想将我的Cache
类注入到每个构造函数类中。我需要一种非紧密耦合方式来获取HHCache
的方式来以某种方式从
可以成为我框架一部分的某种提供程序类似乎是正确的方向。