2009-04-17 2 views
6

저는 PHP를 사용할 때 현재 CodeIgniter를 선택 프레임 워크로 사용하고 있습니다. 내가 씨름하고있는 것 중 하나는 "페이지"에 대한 아이디어이며, MVC 내에서 올바르게 표현하는 방법입니다. 내가 아는 한, CodeIgniter에는 페이지 컨트롤러에 위임하는 프런트 컨트롤러가 있습니다. 내 생각에는 각 페이지마다 컨트롤러가 있어야합니다. 너무 자주 나는 많은 방법으로 채워진 페이지 컨트롤러를 사용하는 누군가를 본다. 그래서 그 의미에서 각 행동은 자신의 페이지가됩니다.무엇이 MVC에서 전통적인 "페이지"개념을 정의합니까?

한 번에 컨트롤러에 하나 또는 두 개의 메서드 만 필요할 경우 너무 많은 오버 헤드가있는 것처럼 보이기 때문에 한 컨트롤러에 많은 메서드를 채우는 아이디어를 정말 좋아하지 않았습니다. 그것은 각 페이지가 자신의 컨트롤러를 가지고 더 합리적인 것, 그리고 행동은 당신이 그 특정 페이지에서 할 수있는 일에만 대응할 것입니다. 내가 잘못 생각한거야?

무엇이 더 혼란 스럽습니까? 여러 가지 방법 (예 : 로그인, 등록,보기, 편집 등)을 수행하는 컨트롤러가있는 웹 응용 프로그램에서는 눈치 챘을 것입니다. 로그인 제어기 및 레지스터 제어기를 포함한다. "페이지 컨트롤러"의 올바른 사용은 무엇입니까?

답변

7

도메인 관점에서 나는 도메인 컨텍스트 당 컨트롤러 1 개를 갖는 것이 더 합리적이라고 말합니다. 문맥에 따라 다르지만 페이지 당 하나 일 필요는 없습니다. 문맥에 의해 의미하는 것은 "밀접한 관련이있는 행동"입니다.

예를 들어 계정 컨트롤러는 로그인, 등록, 로그 아웃, 비밀번호 변경 작업을 처리해야합니다. 그들은 모두 "계정"컨텍스트 내에서 살고

Take Stackoverflow 예를 들어. 나는 DisplayQuestion, AskQuestion, Delete Question, MostRecent Questions 등과 같은 액션을 가질 수있는 "Questions"컨트롤러를 갖게 될 것이다. 이들은 하나의 컨트롤러에 의해 관리되는 모든 "Views/pages"다.

1

컨트롤러의 모든 공용 메소드가 "페이지"가된다는 것이 옳습니다. 즉, 반드시 웹 페이지 일 필요는 없으며, 액션은 데이터 포스트 일 수 있고 다른 액션/페이지로 리디렉션 될 수 있으므로 페이지는 반드시 "웹 페이지"를 의미하지는 않습니다.

MVC는 많은 작업을 수행하기 위해 규칙을 많이 사용합니다. 예를 들어, 모든 컨트롤러는 "컨트롤러"로 끝나야합니다. 따라서 사용자 페이지 집합 (작성, 편집, 삭제 등)은 UserController에 있습니다. 뷰 폴더에서 컨트롤러 클래스의 각 공용 메서드 또는 동작은 컨트롤러 접두사와 일치하는 폴더 내의 웹 페이지가됩니다 (이 경우 User 폴더). 따라서 컨트롤러 클래스 내에서 "삭제"라는 동작은 User 폴더 내의 Delete.aspx 페이지를 가리 킵니다.

하나의 클래스에 모든 메소드를 넣는 것은 약간 어색한 것처럼 보이지만 객체를 기반으로하는 유사한 기능을 구성하는 것은 훌륭합니다.

+1

"컨트롤러"로 끝나야하는 모든 컨트롤러에 대한 요점은 Asp.Net Mvc 프레임 워크에만 적용되며 반드시 그가 다루는 PHP 프레임 워크에는 적용되지 않습니다. – Micah

1

MVC에서 '페이지'는 3 개를 함께 넣었을 때 얻을 수있는 페이지입니다. 모델은 데이터 레이어를 처리하고, 뷰는 사용자가 보는 실제 HTML을 처리하며 컨트롤러는 원하는 데이터를 표시하기 위해 서로 인터페이스하는 방식을 결정합니다. 기존 컨트롤러에 별도의 컨트롤러 또는 다른 방법을 사용하는 것과 관련하여 내가 가지고있는 다른 컨트롤러에 얼마나 가까운지에 달려 있습니다. 사용자 추가, 사용자 삭제, 암호 변경 등을 처리 할 가능성이 가장 높은 UserAdmin 컨트롤러가 필요하다고 가정 해 보겠습니다. 사용자 계정을 어떤 식 으로든 변경하는 기능을 추가한다면 가장 가능성이 높습니다. 거기에. 내가 그들을 자신의 컨트롤러로 분리했다면 자연스럽게 다른 컨트롤러를 추가 할 것입니다. 컨트롤러를 사용하면 유사한 작업을 함께 묶어서 이미 수행 한 작업을 재 작성하지 않고도 기존 작업을 활용할 수 있습니다. 프로그래머가 그렇게해야한다고 생각하는 방법이 많이 있습니다.나에게 의미가있는 것은 개발자에게 (또는 디자이너의) 선택입니다.