2011-08-10 4 views
1

올바른 모델 사용법을 이해하는 방법에 어려움을 겪고 있습니다. 현재 나는 Db_Table의 상속을 직접 사용하고 거기에 모든 비즈니스 로직을 선언합니다. 나는 이것이 올바른 방법이 아니라는 것을 안다.ZF 모델의 올바른 사용

하나의 해결책은 Doctrine ORM을 사용하는 것입니다. 그러나 이것은 학습 곡선과 내가 사용하는 모든 현재 구성 요소를 paginator 및 auth로 다시 작성해야합니다. 또한 Doctrine1은로드해야 할 또 다른 12 개의 클래스를 추가합니다.

그래서 내가 본 것 중 가장 깨끗한 구현은 소위 모델과 DbTabel 사이의 데이터 매퍼 클래스를 사용하는 것입니다. 아직 다른 ORM을 작성하는 것처럼 보이지만 구현하지 않았습니다. 그러나 예를 들어 뭔가이 될 수 있습니다 : SQL 테이블 사용자

  • 여기 세터, 게터, 비즈니스 로직 /model/User.php
  • 데이터 맵퍼 /model/mapper/UserMapper.php와 클래스를 생성, funcionality는 기본적으로 모든 업데이트를 작성하고 여기에 작업을 저장합니다.
  • 데이터 소스 /model/DbTable/User.php는 Db_Table_Abstract

문제는 다른 모델의 관계로되어 연장된다.

답변

1

나는 이 아니며 모델이 Db_Table을 확장했지만 구성을 대신 사용하는 것이 좋습니다. 즉, 내 모델 'Db_Table'이 아니라 'Db_Table'을 가짐을 의미합니다.

그런 식으로 공통된 요구 사항 인 동일한 모델에서 여러 테이블을 훨씬 쉽게 참조 할 수 있습니다. 이것은 간단한 프로젝트에 충분합니다. 현재 더 복잡한 응용 프로그램을 개발 중이며 데이터 매퍼 패턴을 사용하여 믿을만한 것보다 코드를 단순화 한 것으로 나타났습니다.

특히 데이터베이스에 대한 모든 액세스를 제공하고 getUser() 등의 메서드를 노출하는 클래스를 만들었습니다. 그런 식으로 DB가 변경되거나 클라이언트가 XML에 레코드를 저장하는 것과 같은 일을 원한다면 서버를 쪼개거나 한 클래스 만 다시 작성하면됩니다.

다시 말하지만,이 모델은이 모델을 확장하지 않지만,이 모델의 인스턴스는 제작 과정에서 속성으로 할당됩니다.

0

'올바른'방법은 상황에 따라 다릅니다. YAGNI 및 KISS 원칙에 따라 장기적으로 도움이된다고 생각하지 않는 이상 모델 설정을 복잡하게 만드는 것은 좋지 않습니다.

개발중인 응용 프로그램은 무엇입니까? 현재 Db_Table 님을 다시 붙잡아 두도록 설정하는 방법은 무엇입니까?

+0

당신은 정확합니다, 내가 개발 한 응용 프로그램은 블로그 나 CMS와 비슷합니다. 게시물에는 댓글, 사용자, 태그가 있습니다. 가장 중요한 것은 모듈을 가능한 모듈화 (사용자, 뉴스, 블로그, 설문 조사)하고 프로젝트에서 TDD를 채택해야하므로 모듈을 약간 느슨하게 결합해야하는 이유입니다. –