モデルに対して有効であるためには、すべてのストレージをサブスクライブする必要があるという契約「ArticleStorage」があります。確かに、これは問題ではありません。私の問題は次のとおりです。ページネーション...または「結果の変更」、この場合はfetchAllで、その動作を変更したいが、パラメータなどを追加せずに
<?php
interface ArticleStorage
{
// public function insert();
// public function update();
// public function delete();
public function fetchAll();
}
class MySQLArticleStorage implements ArticleStorage
{
public function fetchAll()
{
// SELECT * FROM `articles`;
}
}
?>
私のモデルの仕組み。
class ArticlesModel
{
public function __construct(ArticleStorage $storage)
{
}
}
この場合、「ArticleStorage」を期待していますが、どの「Storage」が指定されているかわかりません。本当です...そして、ストレージを使用して、ページネーションまたは結果の変更を適用したいと考えています。
class MySQLArticleResultsModifier
{
public function __construct(MySQLArticleStorage $storage)
{
}
public function fetchAll()
{
// ...
}
}
ページネーションの場合、どのように ArticleStorage fetchAll を変更し、変更したクエリを適用できますか?