Bizim şimdiki ORM çözüm ardından Model nesneler olarak alınan kayıtların arasında yineleme için kullanılan bir koleksiyon nesnesi döndürmek veritabanındaki tablolar / görüşlerini temsil Veri Mappers kullanır. Veri Mapper ve modeli katmanları arasındaki veri mappers etki alanı istekleri işler ve gelen koleksiyonları veya etki alanı nesneleri döndürür Repository tabakadır.
Şu anda veri Mapper katmana tüm uygulama istekleri depoyu üzerinden yönlendirilen ve Veri Mapper sonra gerekli koleksiyonunu döndürür depoyu için alınan veri satırlarını döndürür böylece Deposu ve Veri Mapper katmanların sorumluluklarını üstlenmeden bakıyor nesneyi talep.
Ne ben merak ediyorum biz sadece Deposu katmanı üzerinden veri Mappers erişimi zorlamak böylece gelen Veri Eşleyicisi'ndeki içine tüm Deposu nesnesi geçirmek için geçerlidir / iyi bir uygulama olup olmadığıdır.
Örnek olarak bu Şimdi nasıl çalıştığını temelde:
class DataMapper {
public function findAll(Criteria $criteria)
{
$select = $criteria->getSelect();
// Build specific select statement
$rows = $this->_fetchAll($select);
return new Collection(array('data' => $rows, 'mapper' => get_class($this)));
}
}
Ben böyle bir şey yapmayı düşünüyorum:
class Repository {
public function findAllByName(Model $model)
{
$this->_criteria->addCondition('name LIKE ?', $model->name);
$rows = $this->_mapper->findAll($this);
return new Collection(array('data' => $rows, 'repository' => get_class($this)));
}
}
class DataMapper {
public function findAll(Repository $repository)
{
$select = $repository->getCriteria()->getSelect();
// Build specific select statement
$rows = $this->_fetchAll($select);
return $rows;
}
}
Ve sonra bu sürümde, Koleksiyon nesnesi ilk olarak önbelleğe alınan nesneleri arama ve daha sonra sadece gerekirse kayıt yüklemek için veritabanına bir arama sorunu olabilir depoyu bir çağrı sorunu olacaktır.