2011-08-04 10 views
2

컨트롤러를 올바르게 디자인하는 방법에 대한 질문이 있습니다.
프로젝트는 매우 간단합니다 : 블로그, 카테고리와 이미지가있는 블로그, 뉴스 세분.ASP.NET MVC 컨트롤러 디자인

그러나 관리자가 편집, 추가 및 수정할 수있는 관리자 패널을 만들고 싶기 때문에 컨트롤러를 구성하는 방법을 모르겠습니다. 나는

  1. 관리자 패널 site/controller/edit에 대한 링크를해야하지만 이러한 조치 결과에 대한 레이아웃은 표준 것과 다른 것입니다 ... 지금까지 3 scenariosu 내놓았다했습니다.

  2. Admin 컨트롤러는 BlogAdd, BlogEdit와 같은 모든 작업을 수행하므로 URL은 /site/admin/blogedit과 비슷합니다.

  3. admin 폴더에 블로그 컨트롤러 복사본을 만듭니다. url은 /site/admin/blog/edit과 같을 것입니다. 같은 이름을 가진 컨트롤러 2 개가 좋은 생각처럼 들리지 않으므로 라우팅 문제가 있습니다. 그러나 URL이이 상황을 좋아합니다.

내가 만들고자하는 것은 CMS가 블로그 작성, 편집 및 삭제가 기본 블로그 자체와 완전히 구분되는 WordPress와 다소 비슷합니다.

+0

세 번째 방법이 마음에 들면, 같은 이름의 컨트롤러없이 사용할 수 있습니다. 컨트롤러 (예 : BlogController, AdminBlogController)의 명명 규칙을 지정할 수 있습니다. 그런 다음 사용자 정의 ControllerFactory를 작성하십시오./admin/root가 있고 다음 루트와 연결하여 생성 할 컨트롤러의 이름을 찾습니다. 따라서 사용자 유형 "/ site/admin/blog/edit"ControllerFactory가 AdminBlogController를 사용하는 경우. – Egor4eg

+0

감사합니다. ControllerFactory에 대해 알지는 못했지만, 지금 그것에 대해 뭔가를 찾으려고 노력할 것입니다. :) – sed

답변

3

MVC 프로젝트에 Areas을 만들고 관리 영역의 컨트롤러에 관리자 기능을 사용할 수 있습니다.

이렇게하면 일반 블로그 기능에서 쉽게 관리 기능을 분리 할 수 ​​있습니다.

그렇게하는 방법입니다.

+0

하지만 관리자 영역에 동일한 컨트롤러 이름을 만들면 여전히 '홈'에 대한 요청이 다음 일치 컨트롤러를 찾았습니다. proj.Controllers.HomeController proj.Areas.Admin.Controllers.HomeController – sed

+0

당신의 컨트롤러와 같은 이름입니까? 하나는 admin 컨트롤러이고, 다른 하나는 아닙니다. @ Egor4eg의 sugestion은 좋은 것입니다. admin 물건에 대해서는 AdminBlogController를 사용하십시오. –

+1

동일한 이름을 가진 두 개의 컨트롤러가있는 것은 사실입니다. * global.asax * ('MapRoute' 메쏘드의 5 번째 매개 변수, 네 번째 매개 변수, 경로 제약 조건을'null'로 설정할 수 있습니다)에서 검색 할 기본 경로의 네임 스페이스를 제한해야합니다. –

0

경로를 동일하게 유지하고 보안을 통해 여러 역할을 처리하는 이유는 무엇입니까? 예를 들면 :

  • /블로그/이름의 주제 주제 (모든 사용자)
  • /블로그/이름의 주제 항목을 편집/편집 (전용 로그인 활성화를 볼 수 /보기 사용자)
  • /당신은 하나의 컨트롤러에서 이러한 작업을 처리하고 [권한 부여] 속성을 통해 사용자가 로그인이 필요한 작업을 장식 할 수

) 로그인 한 사용자 블로그/새로운 주제를 만들 추가 (단지 활성화를 위해 . 보기에있는 링크와 동일한 기능을 사용하면 링크를 사용하여 표시된 사용자에게만 주제를 편집하고 추가 할 수 있습니다.

관리자는 위에서 언급 한 추가/수정 링크를 클릭 할 수있는 별도의 패널을 사용할 수 있습니다.

+0

네, 이것이 옵션 중 하나입니다. URL 자체가 하나의 버그 일뿐입니다. 사이트/admin/blog/edit/id (또는 이름)이되고 싶습니다. 내가 뭔가를 생각해 내지 않으면이 방법을 사용할 것입니다. – sed

4

URL과 컨트롤러가 1-> 1 관계에 대해 생각하는 것을 중단하는 것이 좋습니다. 이렇게하면 일이 훨씬 쉬워지고 혼란스럽지 않게됩니다. URL은 MVC의 라우팅 메커니즘으로 원하는대로 작동하도록 만들 수 있으며 원하는 URL로 인해 컨트롤러 설계/구성을 제한 할 이유가 없습니다. 사용자가 염두에두고있는 URL을 사용하여 언제든지 라우팅을 적용 할 수 있기 때문입니다.

웹 사이트를 만드는 동안 컨트롤러 (및 일반 인터페이스)에 집중하고 그 지점에 도달 할 때까지 URL을 무시한 다음 좋은 URL 구성표가 나오면 라우팅 시스템으로 이동하여 경로를 사용하여 원하는대로 기존 컨트롤러 동작에 연결합니다.

블로그 엔진을 코드하면 사용자 워크 플로를 훨씬 잘 이해할 수 있으며 URL을 구성하는 여러 가지 방법을 찾아 컨트롤러를 직접 터치하지 않고도 URL을 다시 구성 할 수 있습니다. 첫 번째 요구 사항으로

이 최종 목표에 따라 두 가지 방법이 있습니다

. 귀하의 목표가 동일한 코어 컨텐츠를 표시하지만 다른 사용자 옵션을 사용할 수 있다면 (전체 레이아웃, 페이지의 추가 버튼 등),보기 모델의 IsAdministrator 속성을 전달하는 것이 가장 좋습니다. true 또는 false 인 경우이를 기반으로 페이지를 약간 변경합니다. 그 이유는 페이지의 핵심 부분이 여전히 같기 (가장 가능성 있음) 있기 때문에 핵심 데이터 (관리자 및 비 관리자 모두에 대해 표시되는 데이터)와 관련된 코드를 복제하지 못하게하기 때문입니다.

편집 : 그래서 요약하면, 쉽게 에 사용자와 시스템과 상호 작용하는 방법을 기반으로하지와을 개발하는 무슨에 따라 컨트롤러를 구성 할 수 있습니다. 당신은 언제나 후자를 바꿀 수 있으며, 전자를 바꾸는 것이 더 어렵고 유지 보수를 귀찮게 할 것입니다.