도메인 모델을 애플리케이션의 다른 부분에서 재사용하는 방법을 알아 내려고하고 있으며 데이터 매퍼 패턴이 앞으로 나아갈 길이라고 생각합니다. 아래 예제에는 매퍼의 메서드에 직접 액세스하는 메서드가 있습니다.두 개 이상의 데이터 매퍼가 필요한 도메인 객체
class Groups
{
protected $_groups = array();
public function addGroup($name)
{
$this->_groups[] = $name;
}
public function doSomethingGroupy($cakes)
{
// get all the groups that have cake
return $cakeyGroups;
}
}
... 그리고 그룹 클래스의 메소드와 일치하는 매퍼. 언젠가 나중에 내가 같은 그룹 모델을 사용하지만 다른 쿼리를 사용하여 그룹을 채우기 위해 원하는 경우
class GroupMapper
{
public function find($id, Groups $group)
{
// Mappy type things, maybe some sql
}
public function fetchByNeediness($cuddles, Groups $group)
{
// More mappy type things
}
public function save(Groups $groups)
{
// Saves
}
}
그러나 나는 다른 매퍼를 사용합니다. 이제
class AngryGroupMapper
{
public function find($id, Groups $group)
{
// Something similar but with other tables and joins
}
public function fetchByRage($anger, Groups $group)
{
// Something new but only needed here
}
public function isEditable(Groups $groups)
{
// Do some querying
return $bool;
{
}
나는 목적은 스키니 컨트롤러입니다 알 - 지방 모델, 그래서 나는 모델에 (말하자면) 매퍼를지도하는 또 다른 모델을 것?
class FatModelRepository
{
public function getHappyGroups()
{
$mapper = new GroupMapper();
return $mapper->fetchByNeediness('Puffy Shoes', new Groups());
}
public function getSadGroups()
{
$mapper = new AngryGroupMapper();
return $mapper->fetchByRage('Aghh!', new Groups());
{
public function save(Groups $groups)
{
$mapper = new GroupMapper();
return $mapper->save($groups);
{
}
"그룹"이 "그룹"개체를 포함하는 모음이고 종속 매핑이 필요한 모델 자체 인 경우 어떻게됩니까? 그룹에서 그룹을 분리하고 매퍼를 통해 전달한 다음 컬렉션에 다시 첨부해야합니까? 클라이언트/컨트롤러가 Mappers에 대한 지식이 필요하다는 뜻입니까? – gawpertron
'FatModel'을 저장소라고합니다. 여기에 대한 좋은 설명이 있습니다. http://msdn.microsoft.com/en-us/magazine/dd569757.aspx#id0400058 – rojoca
왜? 귀하의 필요에 맞게 디자인하십시오. 나는 캐시로 repo를 사용하지 않을 것이다. 데이터 맵퍼에 캐시를 두십시오. – rojoca