29

.NET Webforms에서 시작했을 때 VS가 "App_Code"와 같은 응용 프로그램 폴더를 제공하고 대부분의 응용 프로그램 예제에서 "BLL"을 입력했기 때문에 폴더 구조를 찾는 데 많은 어려움이 없었습니다. 그 안에 "DAL"이 있습니다..NET MVC의 이상적인 폴더 구조

하지만 MVC에서는 이번에는 표준이없는 것과 같이 다른 구조를 사용하고 있으며 Google 또는 SO에서 좋은 해결책을 찾지 못했습니다.

아마도 MVC 프로젝트를 구성하는 방법을 공유하고 다른 사람들이 자신의 마음을 닦을 수 있도록 도와 줄 수 있습니다. 다음은 내가 사용하는 중소 프로젝트를위한 구조입니다 :

당신은 어떻습니까?

+0

아마도 멍청한 질문입니다. 저는 오랫동안 ASP.NET MVC를 사용해 왔지만'.cshtml'을 만나 본 적이 없습니다! 그게 뭐야? :) –

+1

@Maxim; 그건 면도기 야. – Pradeep

+1

예, MVC3의 새로운 기본 뷰 엔진 인 면도기가 더 깔끔하고 코드를 더 읽기 쉽게 만들어줍니다. Scott Gu의 블로그를 확인하십시오. http://weblogs.asp.net/scottgu/archive/2010/07/02 /introducing-razor.aspx – Nestor

답변

4

사물이 어디에 있는지 분명하면 아무리 중요하지 않습니다. 조직/그룹 내에서 일관성을 유지하는 것이 중요하다고 생각합니다.

+2

알아요.하지만 보통 웹 사이트의 "연재물 제작"을 시작하기 전에 표준을 만들고 싶습니다. 그리고 당신이 생각하는 표준이 최고라고 생각하고 싶습니다. 일관된 몇 가지 사례를 거의 없애고 거의 하루 종일이 작업을 수행하므로 우리는 "제안 된"구조를 공유함으로써 다른 사람들에게 시간을 절약 할 수 있습니다. – Nestor

+0

이것에 대해 어떻게 생각하십니까? http://www.dotnetexpertguide.com/2012/01/dividing-mvc-components-in-separate.html – user20358

13

웹 사이트 프로젝트에 콘텐츠 (컴파일 된 코드 없음) 만 포함되도록 배치가 간단하다는 사실을 발견했습니다.

뭔가 같은 :

Web.Site 프로젝트

Content 
     Images 
     Css 
    Scripts 
    Views 
    web.config 

그리고 다른 프로젝트에 모든 컴파일 된 코드를 이동 :

웹 프로젝트

Controllers 
    Filters 
    Models 
    ... 

그런 다음 Web.Site 프로젝트 내의 모든 것을 배포해야하므로 처리 할 수 ​​있으며 필요한 모든 어셈블리는 Web.Site \ bin에 있습니다.

간단한 xcopy 배포를 수행하든 WiX를 사용하여 MSI 패키지를 작성하든 관계없이이 작업이 조금 더 쉬워집니다.

+2

나는 이것을 초. 내 프로젝트는 대개 '웹'프로젝트와 'Web.Components'프로젝트로 구성됩니다. 'Web'프로젝트에는 코드가 거의없고 'Web.Components'에는 컨트롤러와 필터와 같은 모든 것이 들어 있습니다. 마지막으로, 내 모델이 포함 된 '핵심'프로젝트가 있습니다. –

+0

매우 흥미 롭습니다. 그래, 나도 좋아한다. 나는 내 자신의 프로젝트를 위해 그것을 고려할 것이다. 공유해 주셔서 감사합니다. – Nestor

5

두 번째 프로젝트 접근법. Jimmy Bogard는 nice post on the approach도 갖고 있습니다 (모든 설명을 읽어야합니다).

저는 개인적으로 관련 서비스, 컨트롤러, 리포지토리 등을 사용하는 응용 프로그램의 일부에서 작업 할 때마다 이러한 파일을 다른 폴더에 넣을 때 지루한 결과가 발생할 수 있음을 직접 확인했습니다. 앞으로 찾아서.

AppName.Web.UI

Scripts 
Content 
View 

AppName.UI.Core

Attributes 
Filters 
Formatters 
Helpers 
Models 
    Company 
    Interfaces 
     IController.cs 
     IRepository.cs 
     IService.cs 
    ViewModels 
     ViewModel1.cs 
     ViewModel2.cs 
    Controller.cs 
    Repository.cs 
    Service.cs 
    User 
    .... 
Plugins (mailchimp, Twitter OAuth, etc..) 
Global.asax (define all the code here rather than in the UI project) 

테스트 프로젝트

: 약간의 장난 후 나는이 형식을 다음 봤는데
... 

당신이 더 세분화하고 Interface 및 ViewModel 하위 폴더를 사용하는지 여부는 프로젝트가 얼마나 큰지에 달려 있다고 생각합니다. 그게 완벽하지는 않지만, 내가 생각하는 방식으로 더 잘 맞았다는 것을 알게되었습니다.

서비스 및 저장소를 세 번째 프로젝트 (AppName.Core)에 넣고 AppName.Web.Core 프로젝트가 웹 관련 부분 (특성, 컨트롤러, ViewModels 등) 만 캡슐화하는 경우도 있습니다. . 다시 이것은 프로젝트의 복잡성과 관련이 있습니다.

+0

나는 그것을 너무 좋아한다. 감사. – Nestor

+0

당신이 언급 한 게시물을 읽고이 구조에 대한 질문이 있습니까, 지역과 함께 사용하는 방법은 무엇입니까? Area는 자신의 모델, 컨트롤러, 뷰 및 영역 컨트롤러가 루트의 컨트롤러와 다르므로 IU, Core를 사용하여이를 분할하는 방법은 무엇입니까? – Nestor

+0

저는 개인적으로 그만큼의 영역을 사용하지는 않았지만 논리적으로 비슷한 방식으로 그 영역을 분할 할 수 있어야합니다. UI 프로젝트에 영역을 추가 한 다음 관련 컨트롤러를 핵심 프로젝트로 이동합니다. 네임 스페이스가 동일하게 유지되는 한 실제 프로젝트 구조는 중요하지 않습니다. 또는 지역에 따라 다른 프로젝트에서 재사용 할 수 있는지 여부에 따라 각 영역에 대해 하나의 프로젝트 만 가질 수도 있고 주 프로젝트에서 참조 할 수도 있습니다. 실제로 다른 영역에 대한 목표가 무엇인지에 따라 달라집니다. – TheRightChoyce

관련 문제