2010-01-31 5 views
0

Data Gateway/Domain Pattern을 구현하려고합니다. 도메인 논리와 영구 데이터 계층을 분리하는 환상적인 패턴과 기초를 이해합니다. 이제 다음과 같은 요구 사항이 있습니다 :2 도메인 모델의 데이터 결합

두 개의 도메인 모델이 있습니다 : 사용자 및 회사 (들). 아주 좋은,하지만 지금은 까다로운 부분 일

$userGateway = new Model_UserGateway(); 

$users = $userGateway->fetchAll(); 

foreach ($users as $user) {...} 

: 나는 모든 사용자와 사용자 목록을 검색하고 싶어 할 때, 내가 그런 일을 할 것입니다 내가 지금 싶어 모든 사용자와 해당 회사와 목록이있다. 나는 각 사용자에 대한 사용자와 인스턴스를 통해 관련 회사를 반복 할 수 있지만 그게 ... 내가 제일 좋아하는 솔루션은 아니다. 최악의 경우 중첩 된 데이터베이스 쿼리를 생성합니다. 또 다른 방법은 내가 최고의 실천은 회사 정보와 함께 사용자 목록을 얻을 수 뭐죠 :(

을 잘 모릅니다 ... 난 게이트웨이로 추가 사용자 데이터를 가져 오는 것을,하고 그들과 거래 것인가?에

감사

마이클 M

답변

0

Model_UserGatewayfetchAllWithCompany 같은 메소드를 구현 진행합니다.이 방법은 두 테이블의 정보를 가져 오는 데이터베이스 쿼리를 수행합니다.

예를3210

다음은 당신이 원하는 모든 정보를 얻을 :

$users = $userGateway->fetachAllWithCompany(); 

이것은 내가 그것을 할 것이 방법입니다. 당신이 말했듯이, 모든 사용자에게 회사를 알리기위한 쿼리를 작성하는 것은 좋지 않습니다.

편집 :

당신의 User 객체가 getCompany 방법을 가지고 있다고 가정하면, 당신은 할 수있다 : 물론 getCompany

foreach($users as $user) { 
    $company = $user->getCompany() 
} 

Company 객체를 반환해야합니다.

학습을 위해 이것을 구현 하시겠습니까? 많은 프레임 워크가 그러한 종류의 데이터베이스 추상화를 지원하기 때문에. Zend framework.

+0

감사합니다. userGateway는 Set of User-Objects를 반환합니다. fetchAllWithCompany 메소드를 반환하는 것은 무엇입니까? – michaelm

+0

@michaelm : 또한 사용자 개체 집합입니다. 그리고 사용자 객체는'getCompany' 메소드를 가져야합니다. –

+0

"값"- 개체를 모든 데이터로 완전히 인스턴스화해야한다고 가정합니까? 그래서 사용자 모델 내에서 회사 모델을 올바르게 인스턴스화하려면 사용자 게이트웨이에서 모든 회사 데이터를 가져와야합니다. 맞습니까? (그렇지 않다면, 게으른 로딩 모델 패턴이 있다고 상상할 수 있습니다 :-)) – michaelm

관련 문제