要点にまっすぐ。
abstract class AbstractRepository {
private $mapper;
public function __construct(AbstractMapper $mapper) {
$this->mapper = $mapper;
}
public function save(AbstractEntity $entity) {
return $this->mapper->save($entity);
}
public function delete(AbstractEntity $entity) {
return $this->mapper->delete($entity);
}
}
class UserRepository extends AbstractRepository {
private $userMapper;
public function __construct(UserMapper $userMapper) {
parent::__construct($userMapper);
$this->userMapper = $userMapper;
}
public function fetchByUsername($username) {
return $this->userMapper->fetch( array('username' => $username) );
}
VS
abstract class AbstractRepository {
// Different visibility
protected $mapper;
public function __construct(AbstractMapper $mapper) {
$this->mapper = $mapper;
}
public function save(AbstractEntity $entity) {
return $this->mapper->save($entity);
}
public function delete(AbstractEntity $entity) {
return $this->mapper->delete($entity);
}
}
class UserRepository extends AbstractRepository {
// $userMapper property gone
public function __construct(UserMapper $userMapper) {
parent::__construct($userMapper);
}
public function fetchByUsername($username) {
return $this->mapper->fetch( array('username' => $username) );
}
UserRepository
が のインスタンスを保持することがより明示的かつ具体的であるため、私は最初の方法が好きですUserMapper
。
2 番目の方法は、コードが少ないため優れていますが、線を引きます
return $this->mapper->fetch( array('username' => $username) );
ほど明確ではありません
return $this->userMapper->fetch( array('username' => $username) );
ユーザーリポジトリにいるとき、それ$this->mapper
が のインスタンスであることはわかっていますが、 のUserMapper
ようにアドレス指定することを好みます$this->userMapper
。
このようなシナリオで何をするのが最善かについてのルールはありますか?
ありがとう。