나는 한동안 코딩했지만 주로 스크립트와 간단한 응용 프로그램입니다. 나는 Web Apps를 개발하고 적절한 MVC 아키텍처를 사용하는 것에 관한 새로운 역할로 옮겨 갔으므로 필자는 그 모든 것에 대해 매우 빨리 배우려고 노력하고 있습니다.
이 질문이 ” MVC 아키텍처에 대한 모범 사례 “와 너무 유사하지 않기를 바라지 만 몇 가지 다른 자습서를 진행하면서 일부는 다른 컨트롤러를 여러 개 가지고있는 것으로 나타났습니다.
단일 웹앱에는 몇 개의 컨트롤러가 필요합니까?
나는 이것이 예제없이 대답하기가 어렵다는 것을 알고 있으므로 하나를 제공 할 것입니다.
신청:
- 사용자가 로그인했습니다.
- 사용자는 다음 세 가지 중 하나를 수행 할 수 있습니다.
a) 메타 데이터와 함께 mongodb 데이터베이스에 저장된 파일을 업로드합니다.
b) 파일을 검색하십시오.
c) 로그 아웃하십시오.
내 질문은 일반적인 질문이지만 대답하려는 사람을 돕기 위해 예를 들었습니다.
답변
귀하의 예를 들어 두 개의 컨트롤러를 만듭니다.
- 로그인 및 로그 아웃을위한 세션 컨트롤러 (레이아웃과 같은 REST 세션 생성 및 제거)
- 파일의 모든 것을위한 파일 컨트롤러 (index = search and create = upload)
일반적으로 모든 것을 표시, 생성, 편집 및 파괴 할 수있는 자원으로 생각하는 RESTful 접근 방식은 구조를 구성하는 방법에 대한 좋은 아이디어를 제공합니다. 내 예제에서 볼 수 있듯이 REST의 모든 단일 동사에 너무 가깝지 않습니다.
추가 기능을 위해서는 더 많은 컨트롤러가 필요할 것입니다. 예를 들어 사용자가 새 계정을 만들 수있는 사용자 컨트롤러가 있습니다. 이 외에도 더 높은 권한으로 리소스를 편집 할 수있는 관리 인터페이스가 필요합니다. 이 경우 거의 모든 컨트롤러를 복제하는 것이 일반적입니다.
초기 아이디어를 얻는 데 필요한 매우 대략적인 추정치는 사용자가 액세스 할 수있는 데이터베이스의 모든 테이블에 대해 하나의 컨트롤러 일 수 있습니다. 그러나 이것은 실제로 매우 조잡한 측정입니다.
답변
그것은 실제로 웹 앱에 달려 있습니다. 귀하의 예에서 아마도 충분할 것입니다. 배송, 세금, 재고 관리, 계층 별 가격 등을 포함한 완전한 전자 상거래 앱을 구현하려는 경우 몇 가지를 더 원할 수 있습니다.
컨트롤러에 하나 이상의 코드 냄새 (특히 Large Class 또는 God Object )가 발생하는 경우 사용자가 한 가지만 할 수있는 시점을 지나친 것입니다.
답변
실제로 애플리케이션 요구 사항과 비즈니스 모듈 아키텍처에 따라 다릅니다 .
일반적인 엄지 손가락의 규칙은 , 필요한 컨트롤러의 수는 웹 애플리케이션 모듈 및 서브 모듈의 수에 따라 달라집니다.
보완 적으로 컨트롤러를 영역 으로 구성하는 것이 도움이됩니다 . Areas 의 개념은 ASP.NET MVC 프레임 워크에 빌드되며 하나의 모듈을 제공하는 컨트롤러의 구성을 단순화합니다.
여러 가지 관련 토론이 있습니다.
답변
저는 애플의 방식이 마음에 듭니다.
모든 뷰는 하나의 뷰 컨트롤러만으로 제어됩니다. ~ iOS 용 View Controller 프로그래밍 가이드
아이디어는 뷰를 쉽게 교체 할 수 있어야한다는 것입니다. IMO는 1 Controller
개당 1 개만 View
있으면 쉽게 달성 할 수 있습니다. 그러나 여러 뷰가있는 컨트롤러를 가질 수 있고 여전히 디자인하여 프로그램 논리를 변경하지 않고 뷰를 전환 할 수 있다고 확신합니다.
답변
내가 좋아하는 한 가지 예는 온도 조절 장치를 생각하는 것입니다. 온도 조절기는 MVC 패턴을 볼 수있는 훌륭한 시각적 요소입니다.
구형 아날로그 온도 조절 장치에서는 다음과 같은 것을 그릴 수 있습니다.
보기 -현재 온도를 표시하는 온도 판독기입니다.
컨트롤러 -온도를 변경하는 다이얼
Model (모델) -온도 변화를 유발하는 컨트롤러에 의해 호출 된 내부 부품.
당신은 항상 느슨한 결합 및 제한 모델과 단일 작업에 관련 컨트롤러를 수있는 디자인을 준수해야합니다 , 당신은해야 당신이 필요한만큼 모듈 / 컨트롤러를 사용 . 응용 프로그램의 크기에 따라 모델 및 컨트롤러보다 훨씬 적은 뷰가있을 수 있습니다. 이것은 모든 대형 응용 프로그램에서 예상됩니다. 좋은 객체 지향 프로그래밍은 느슨한 결합, 캡슐화, 상속 및 다형성이 특징입니다. 모든 언어가 다형성을 동일한 정도로 지원하지는 않습니다 (함수, 메소드, 연산자 오버로드 / 재정의).
MVC 아키텍처를 올바르게 사용하는 방법을 더 잘 이해하려면 코드 예제로 C ++ 및 SmallTalk를 사용하는 GoF “디자인 패턴 : 재사용 가능한 요소 … 소프트웨어”를 참조하십시오. 이 책은 알파와 오메가가 아니지만 시작일 것입니다!
행운을 빕니다!
답변
귀하의 사례가 복잡한 시스템으로 발전 할 것이라고 가정합니다.
신청:
사용자 로그인 :
LoginController
유일한 책임은 로그인을 처리하고, 결과를 사용자에게 재전송하거나 알리는 것입니다.
파일을 올리다
UploadController
여기서는 모든 유형의 파일을 업로드한다고 가정합니다. 나중에 MP3 및 PDF를 업로드하기로 결정한 경우 기본 UploadController, MP3UploadController 및 PDFUploadController가 있습니다.
파일을 검색하십시오.
SearchFileController
이것은 기본 요구 사항으로 충분합니다. 검색 로직이 얼마나 복잡한 지에 따라 나중에 여러 개의 검색 컨트롤러를 가질 수 있습니다. 마지막으로 원하는 것은 다른 검색을 수행하는 20 개의 액션 메소드가있는 단일 SearchController입니다.
로그 아웃.
–LogoutController
.
누군가가 이것을 과잉 인 것으로 생각할 수도 있지만, 나는 그렇게 생각하지 않습니다. 나는 깨끗하고 멋지게 분리되어 있다고 생각합니다.
이 프로젝트 구조를 살펴보면 프로젝트의 구조와 구조를 즉시 알 수 있습니다. 한 단계 더 걸릴하기 위해, 나는 둘 것 LoginController
과 LogoutController
별도의 영역으로.
나는 전에 이와 같은 것을 개발했으며 실제로 잘 작동했습니다.
답변
대부분의 코드가 비즈니스 계층에서 발생하고 있습니까? 그렇다면 컨트롤러에서 실제로하는 일은 데이터를보기로 반환하는 것입니다.
컨트롤러를 하위 유형으로 분리하는 팬인지 확실하지 않습니다. 우려의 분리를 유지해야하지만 하위 유형이 너무 멀리 가고 있다고 생각합니다. 또한 생성자 또는 컨트롤러에서 무거운 개체가 초기화되는 경우주의해야합니다. 예를 들어, 예제에서는 사용자가 로그인 페이지에있을 때 검색 / 업로드 파일에만 사용되는 무거운 오브젝트를 원합니다.
AccountController (로그인, 등록, 로그 아웃), FileController (검색, 업로드) 등과 같은 로직 단위당 컨트롤러를 사용하는 것이 좋습니다.