2010-04-26 5 views
10

하나의 컨트롤러 동작에서 여러 모델로 작업하는 것이 좋지 않습니까? 항상 하나의 컨트롤러 - 하나의 모델 - 하나의보기와 같아야합니까?PHP와 MVC, 다중 모델

+1

우수 질문! 아무도 그런 질문을 신경 쓰지 않는 것 같은 유감입니다! – Sliq

답변

11

아니요, 물론 나쁜 습관이 아닙니다. 여러 테이블로 작업하는 경우 다양한 모델이 필요합니다.

이 문제는 너무 많지 않지만 이러한 모델을 기반으로 고급 쿼리, 조인 및 필터링을 처리 할 수있는 프레임 워크 기능이 있습니다. 그것은 당신이 데이터베이스 상호 작용에 대한 프레임 워크의 특별한 미학을 따르도록 "의무화"되어있을 때 그 버그 베어 중 하나입니다. 그러나 이것은 물론 어떤 프레임 워크와 얼마나 멀리 당신이 마법 행동에 의존하는지에 달려 있습니다.

모든 프로젝트가 간단한 블로그는 아닙니다! :)

편집 : 나는이 종류의 것이 일반적으로 MVC 프레임 워크를 사용하는 주요한 불만 중 하나라고 말해야합니다. 프로젝트가 성취하려고 시도하는 것과 프레임 워크가 허용하는 것 사이의 타협은 항상 머리카락이 손실되고 늦은 밤 투자 된 곳이 될 것입니다 ..

+0

빠른 답변 주셔서 감사합니다! – PPPHP

+0

내 의견으로는 대부분의 코드가 모델에 있어야하며 그 중 많은 클래스가 있어야합니다. 모델과 컨트롤러 간의 1 대 1 매핑이 아닙니다. 그것은 나쁜 것입니다. – d11wtq

+0

그래, 모두가 뚱뚱한 모델을 좋아해. :) – dmp

4

한 모델에서만 작동 할 수 있다고 상상할 수 없었습니다. 한 번에. 이러한 데이터베이스를 이유로 '관계형 데이터베이스'라고합니다. 모든 테이블은 서로 상호 작용합니다.

실제로 컨트롤러와 연결된 모델 하나만로드 할 수있는 프레임 워크를 사용했습니다. 확실히 끔찍한 경험 이었지만 작동 한 유일한 작업은 기본 CRUD 작업이었습니다.

+0

신속한 답변 주셔서 감사합니다! – PPPHP

1

다른 모든 사람들이 말하는 것처럼 원하는대로 자유롭게 할 수 있습니다. 나는 당신이 사용하고있는 프레임 워크를위한 사이트를보고, 다른 사람들이 그것을 어떻게 사용하는지 보길 권한다. 그들은 종종 "XXXX 프레임 워크를 사용하는 프로젝트"를 가지고 있습니다.

troelskin의 의견과 마찬가지로 1 개의 테이블이 항상 한 모델과 같지는 않습니다. CodeIgniter와 같은 기본적인 Active Record 패턴을 사용하는 예제 중 일부는 1 테이블 1 모델 방법과 함께 사용되는 경향이 있습니다.

2

아니요, 좋지 않습니다.

컨트롤러는 데이터 모델보다 HTTP 리소스 (일명 URI)에 매핑됩니다. 특정 리소스 (사용자, 제품 등)에 대한 요청은 다양한 장소 (DB 테이블, 파일 시스템, 원격 웹 서비스 등)에서 데이터로드/저장이 필요할 수 있으므로 1 : 1 컨트롤러 : 모델 매핑이 규칙이 아닌 예외 일 수도 있습니다. 귀하의 웹 사이트가 인 경우를 제외하면 실제로는입니다.