コレクションに関する Data Mapper パターンについて質問があります。リポジトリ、コレクション、および非常に役立つデータ マッパー パターンに関するこの記事をフォローしてきましたが、何かについて明確にする必要があります。
これらの例では、UserMapper はそのコンストラクターで UserCollection を受け取ります。つまり、UserMapper は実際には、クエリから取得したデータを取得し、そのデータからコレクションを構築する責任があります。
これはSRPに少し違反していませんか?DataMapper は、ALSO を構築してそのデータのコレクション ラッパーを返すのではなく、クエリから生の配列を返すだけでよいのではないでしょうか? 例としてコードを使用すると、次のうちどれがより適切ですか?:
$userCollection = new UserCollection;
$userMapper = new UserMapper;
$userCollection->addUsers( $userMapper->fetchAll() ); // where addUsers() takes an array and does what it needs to
対
$userMapper = new UserMapper( new UserCollection );
$userCollection = $userMapper->fetchAll() // where fetchAll() queries the DB, then builds and returns a collection
最初のものはもう少し面倒ですが、疎結合ではありませんか?