페이지 당 하나의 컨트롤러 또는 하나의 컨트롤러에 여러 페이지가 있습니까?


16

방금 MVC 방식에 관한 조언을 원했습니다. codeigniter를 사용하고 있는데 웹 사이트의 페이지 당 하나의 컨트롤러를 사용하거나 모든 페이지에 대해 하나의 컨트롤러를 사용 하는 것이 더 좋은지 궁금 합니다.

홈페이지를 방문하고, 로그인하고, 계정을 만들고, 관리자에게 연락 할 수있는 간단한 웹 사이트가 있다고 가정 해 봅시다.

  1. frontend (index), login, account, contact 또는 frontend라는 컨트롤러가 있거나 login, createAccount, contact 등의 컨트롤러를 사용하는 것이 더 좋을까요?

  2. 상황에서 하나의 컨트롤러를 사용하는 것이 더 좋은지 언제 알 수 있습니까?


나는 항상 신조에 의해 살았습니다 : 하나의 컨트롤러가 그들을 다스리고 어둠 속에서 묶습니다. (실제로는 아니지만 나는 그 소리를 좋아한다. :-)
Peter Rowell

답변:


17

로직 컨트롤러마다 컨트롤러를 사용하는 것이 좋습니다 (예 : AccountController (로그인, 등록), PagesController (홈, 연락처), Backend-> PagesController (만들기, 편집, 삭제), UsersController (만들기, 편집, 삭제) 등.


홈, 로그인, 계정, 연락처 등의 영역이있는 웹 사이트를 어떻게 표현 하시겠습니까? 귀하의 예와 같은 2 개의 컨트롤러를 사용 하시겠습니까? localhost /로 이동하면 홈 컨트롤러가 열리고 이론상 localhost / contact로 이동하면 컨트롤러로 이동합니까? 백엔드의 의미는 무엇입니까?
Rushino

페이지의 구조와 페이지 수에 따라 다릅니다. HomeController (집, 연락처) 또는 PagesController (집, 연락처 또는 세부 사항 (id))를 작성합니다. 예를 들어 ASP.NET MVC에는 홈 및 정보 페이지가있는 기본 HomeController가 있습니다.
Santas

나는이 방법을 좋아한다. 또한 응용 프로그램의 특정 부분에 국한되지 않은 Jquery.Ajax를 통해 호출 된 작업에 대한 ClientController (또는 호출하려는 대상). 즉, 귀하의 견해에서 재사용 가능
Chris

나에게 정답을 보인다. CodeIgniter는 컨트롤러를 영역으로 분리 할 수있는 컨트롤러의 하위 디렉토리를 허용하므로 두 개의 페이지 컨트롤러 (영역 당 하나씩)로 끝날 수 있습니다. 감사!
Rushino

그러나 동작이 모두 상대적이지만 다소 큰 컨트롤러로 끝나지 않습니까? 아니면 문제가 없습니까?
Kid Diamond

4

@Rushino 여기에는 프론트 엔드 (독자 용)와 백엔드 (관리자)의 두 가지 '앱'이 있습니다. 모든 기능 그룹마다 컨트롤러가 있습니다.

로그인은 양식 HTML (필드, 뷰 호출) 생성 및 양식 처리 (유효성 검증, 모델과 연결)를 포함하는 그룹입니다. 따라서 '로그인'은 generateForm과 handleForm의 두 가지 동작을 가진 컨트롤러입니다.

페이지는 페이지 만 표시하는 프론트 엔드 앱과 다른 방식으로 편집, 삭제, 작성 및 볼 수있는 백엔드 앱으로 구분됩니다. 홈페이지는 적어도 프론트 엔드에서 '다른 페이지 일뿐'이므로 페이지 컨트롤러에 맞습니다. 백엔드에서 논리는 다른 컨트롤러를 사용하는 것을 정당화 할만큼 충분히 다를 수 있습니다.

사용자의 경우-사용자가 자신을 등록 할 수 있으면 프런트 엔드 컨트롤러가 필요하지만 그렇지 않은 경우 사용자와 관련된 모든 것은 백엔드에 있습니다.

각 백엔드 함수에는 생성기와 핸들러가 모두 필요할 수 있습니다. 이러한 것들은 일반적인 폼 생성기 인 플러그인을 사용하여 구성 파일로 나눌 수 있습니다.

요약하면 다음과 같습니다.

Frontend
  Pages
    View, Handle
  Login
    View, Handle
  Users
    Register (note that the handler can be the same as 'create' on the backend)
  Contact
    View
    Handle

Backend
  Users
    Create, Delete, Edit, Update, View
  Pages
    Create, Delete, Edit, Update, View

잠깐만 .. 한 섹션이 하나의 앱을 나타낸다고 말하는가? 그것을하는 흥미로운 방법 (그리고 아마도 그것을하는 방법). codeigniter가 이런 식으로하는지 궁금합니다 .. 확인합니다. 세션이나 연결 상태를 중단하지 않고 한 앱에서 다른 앱으로 이동할 수 있어야합니다.
Rushino

1
@Rushino CodeIgniter는 이렇게 할 수 있습니다-Controllers 디렉토리 안에 폴더를 넣을 수 있습니다. '앱'의 차이점은 데이터베이스 / 모델 수준이 아니라 컨트롤러 /보기 수준입니다. 분리의 이유는 백엔드가 종종 완전히 다른 디자인으로 매우 다른 작업을 수행하기 때문입니다. 전체 백엔드 디렉토리를 IP로 제한 할 수 있으므로 보안에 도움이됩니다. 또한 프론트 엔드에 영향을주지 않고 백엔드에서 작업 할 수 있으므로 개발에 도움이됩니다.
Dan Blows

2

주문과 관련된 모든 작업에 OrdersController와 같은 업무 부서별로 Controller를 사용해야한다고 생각합니다. 이 경우 컨트롤러가 거대하다는 것을 알고 있지만 헬퍼 클래스를 사용하여 모델 초기화 및 부분 클래스와 같은 것을 위임하여 별도의 파일로 작업을 분산시킬 수 있습니다.

예를 들어 Create.cs and OrdersControllerOrdersController 클래스에 대한 OrdersController List.cs 파일을 각각 해당하는 Actions 세트로 가질 수 있습니다 . 일을 훨씬 깨끗하게하고 주문 조작을 단일 컨트롤러 클래스에서 중앙 집중식으로 유지합니다.

그냥 내 2 센트.


0

다른 접근법을 취할 수 있다고 생각합니다.

특정 컨트롤러에 요청을 전달하는 정문으로서 하나의 메인 컨트롤러. 이런 식으로이 전면 컨트롤러를 사용하여 사용자 인증, Google analitics 및 기타 일반적인 작업과 같은 일반적인 작업을 확인하고 MVC 구조를 순수하게 유지할 수 있습니다.

이것은 내 생각은 아니지만 Symfony Framework 가 이런 식으로 작동하므로 내 경험에 의해 이것이 프론트 엔드를 구현하는 정말 훌륭하고 우아한 방법이라는 것을 알 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.