私は自分の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 ( );
}
MyIHHServiceProvider
は、実際にはProvider
何も登録できないため、典型的なクラスとはまったく異なりますServices
。HHConfig
ロードする「クラス」をクラスで調べ、そのインスタンスで返すだけです。
どういうわけか、この方法は私には適切ではありませんが、私が達成したいことを示していると思います. どのような方法でこれを改善できますか?
このための単純な依存性注入パターンを探しているわけではないことに注意してください。Cache
クラスをすべてのコンストラクタークラスに注入したくないからです。メソッド内から何らかの形でクラスのインスタンスを取得する非密結合の方法が必要です。HHCache
私のフレームワークの一部になることができるある種のプロバイダー クラスは、正しい方向のようです。