2014-05-10 3 views
1

이 영역의 초보자로서 mvc 응용 프로그램을 빌드 할 계획입니다. 원래 웹 폼 애플리케이션을 시작했지만 확장 성 및 테스트 가능성이 MVC 애플리케이션으로 더 많은 이점을 얻을 것이라고 판단했습니다. 필자는 나중에 웹 양식 페이지에 구워진 코드 대신에 더 많은 기능을 더 쉽게 추가 할 수 있다는 부가적인 이점으로 전환하기로 결정했습니다.Asp.Net MVC 응용 프로그램 설계

이제는 내 응용 프로그램에 대해 RPG 클래스 작성기와 이동 세트를 자극하는 응용 프로그램입니다. 모든 단순함에서 사용자는 수업에 등록 할 수 있으며 등록 할 수있는 다른 기술에 따라이 범주에 따라 맞춤식 이동 집합을 볼 수 있습니다. 내가 상상하는 방식은 나중에 데이터베이스에 더 많은 수업과 기술을 추가하고 사용자가 프로젝트에 추가 된 즉시이 새로운 콘텐츠에 등록하도록 할 수 있다는 것입니다.

모든 것이 정규화 된 테이블에 있으므로 많은 조인트 테이블이 존재합니다. 내가 추가하는 각각의 새로운 스킬이나 클래스에 대해 소수의 테이블이 데이터베이스에 추가된다는 것을 의미합니다. 이것은 데이터가 저장 될 방법을 말하며, 클래스, 사용자 데이터, 스킬 등에 관한 모든 정보는 데이터베이스에 저장됩니다.

필자는 처음부터 가지고 있어야 할 모든 초기 데이터베이스 테이블과 필요한 기능 (홈 페이지, 스킬 기술 페이지, 이동 세트보기 페이지 등)을 설계했습니다. 나는 다음 단계에 머물러있다. 어디로 가야합니까? 컨트롤러를 먼저 만들어야합니까? 모델? 조회수? 내 페이지 레이아웃을 디자인합니까? 나는 mvc 프로젝트에 유사한 유기적 인 접근법을 취한 사람들로부터 조언을 구하고있다. 나는 내가 앞으로해야 할 일이 많다는 것을 안다.

시간을내어 답변 해 주셔서 감사합니다. 나는 모든 사람의 조언을 찍은 및 MVC 내용은 웹 사이트를 함께 걸었습니다


: http://learnaspnetmvc.azurewebsites.net

답변

4

가장 중요한 조언 내가 당신에게 줄 수 : 단지 시작.커다란 프로젝트가 압도적 인 것처럼 보일 수 있습니다. 특히 큰 프로젝트과 같이보고있는 경우 특히 그렇습니다. 대신, 그것을 작은 달성 가능한 작업으로 분해하십시오. 지금 당장 수행 할 수있는 기능, 너무 작지 않은 기능의 하위 집합을 찾아서 수행하십시오. 그런 다음 다음 작업을 수행하십시오. 그리고 다음.

그렇다면 내 개인적인 과정을 알려 드리겠습니다. 새로운 응용 프로그램이나 응용 프로그램에서 시작할 때 먼저 모델을 만들고 싶습니다. 그 방법으로 나는 그들 사이의 상호 작용으로 놀 수 있고, 관계를 살피며, 저압의, 쉽게 처분 할 수있는 방식으로 나의 적용의 필요성에 대해 생각할 수 있습니다. 나는 또한 코드 - 우선을 사용하는 반면에 이미 데이터베이스 테이블을 만들었다. 어떤 사람들은 그렇게하는 것을 선호합니다. 개인적으로, 나는 수업을 시작으로 그보다 훨씬 더 유기적 인 데이터 저장소로 번역하게했다. 어떤 의미에서는 데이터베이스를 거의 존재하지 않는 계층으로 이관합니다. 어떤 데이터 타입이 필요한지, 색인을 생성해야하는 대상과해야할 대상, 쿼리하는 방법, 필요한 저장 프로 시저 종류 등을 생각할 필요가 없습니다. 이러한 질문에는 시간과 장소가 있습니다. 초기 개발 단계는 이 아니며 시간과 장소입니다. 당신은 당신의 두뇌에 아이디어를 가지고 놀 수있는 장소를주고 싶어하고, 수업은 싸고 마찰이 적은 매체입니다. 아이디어가 효과가 없다면, 수업을 치워 버리고 새로운 수업을 만드십시오.

내 모델이 있으면 컨트롤러를 치고 싶습니다. 이렇게하면 내 모델이 실제로 작동하는지 확인할 수 있습니다. 내 응용 프로그램의 실제 흐름을 둘러보고 내 수업이 실제로 어떻게 작동하는지 확인할 수 있습니다. 그런 다음 필요에 따라 모델을 변경하고 추가 기능을 추가 할 수 있습니다. 또한 뷰 모델을 사용하여 재생할 데이터를 뷰에 전달해야하는지 또는 전달하면 안되는지, 어떻게 표시해야 하는지를 알아낼 수 있습니다 (그 목록에 대한 드롭 다운 목록이 필요합니까?) 등. 이것은 자연스럽게 내 견해로 인도합니다. 다시, 나는 내 사고를 시험하고있다. 새로운 레이어가있을 때마다 이전의 레이어가 어떻게 작동하는지 더 잘 볼 수있게되었습니다.

이 과정의 각 단계는 매우 유동적입니다. 컨트롤러에 대한 작업을 시작하면 모델을 변경합니다. 일단 내가보기를 쳤을 때, 컨트롤러는 조정될 필요가있을 것이고 아마도 모델 일 것이다. 너는 망쳐 놓을 자유를 가져야한다. 필연적으로, 당신은 무언가를 잊을 것입니다. 또는 뼈대를 향한 방법으로 디자인하십시오. 깊이 들어가면 볼 수 있습니다. 다시 말하지만 코드의 아름다움입니다. 이 시점까지는 데이터베이스가 없기 때문에 변경 작업도별로 중요하지 않습니다. 내가 가지고있는 모든 것을 완전히 파괴 할 수 있고 완전히 다른 방식으로 갈 수 있으며, 테이블 변경, 데이터 이전 등에 대해 걱정할 필요가 없습니다.

이제이 시점까지 내 모델은 꽤 정적입니다. 내 데이터베이스 생성 및 초기 마이그레이션을 수행하십시오. 비록 실제로 브라우저에서 실제로 이것을 실행하여 내 견해를 볼 수 있기 전에 필요한 것이기 때문에 실제로는 그렇습니다. 나중에 언제든지 마이그레이션을 수행 할 수 있지만 일단 콘크리트로 작업하면 마찰이 증가하기 시작합니다.

컨트롤러를 조정하고 분명히 내 의견을 조정하는 경향이 있습니다. 이제는 내가 볼 수있게되었습니다. 모든 것이 만족 스러우면 최적화 및 리팩터링을 시작합니다. 코드를 어떻게보다 효과적으로 만들 수 있습니까? 좀 더 가독성? 더 효율적입니까? Glimpse과 같은 도구를 사용하여 내 쿼리를보고 시간을 렌더링 한 다음 저장 프로 시저와 같은 항목을 결정합니다.

그런 다음 그것은 단지 많은 헹굼과 반복 일뿐입니다. 그것은 모두 매우 단편적입니다. 나는 응용 프로그램을 만들고 있지 않다. 저는 클래스를 만들고 다른 클래스를 만들고 HTML을 작성하고 있습니다. 그 다음 부분에 초점을 맞 춥니 다. 다음 단계로 넘어 가야 할 작은 덩어리에 초점을 맞 춥니 다. 압도적 인 부분이 아닙니다. 그래서 내가 시작한 것처럼 똑같은 것을 닫을 것입니다 : 단지 으로 시작합니다. 작가들은 가장 어려운 것이 첫 번째 문장이라는 말을하고 있습니다.첫 번째 문장은 정말 어렵 기 때문에 아닙니다. 그것은 일단 당신이 그것을 얻으면, 당신은 두 번째 문장을 쓰고, 세 번째는, 당신이 그것을 알기도 전에, 당신은 글쓰기 페이지를 가지고 있기 때문입니다. 가장 어려운 부분은 시작에 있습니다. 거기에서 모든 것이 흐릅니다.

다른 답변은 훌륭한 조언과 정보의 중요한 덩어리를 가지고 있지만, 나는 그들이 당신을이 단계에서 실망시키는 것으로 생각합니다. 저는 모범 사례, 응용 프로그램의 적절한 계층화 등을 가장 먼저지지합니다. 그러나 궁극적으로이 모든 것을 따르는 완벽한 응용 프로그램은 모든 응용 프로그램을 통합하는 불완전한 응용 프로그램보다 더 가치가 있습니다. 고맙게도, 우리는 가단성 매체 - 디지털 텍스트 - 그리고 돌로 일하고 있지 않습니다. 당신은 언제나 사물을 바꿀 수 있으며 나중에 사물을 향상시킬 수 있습니다. 돌아가서 앱을 적절한 레이어로 분리하고 저장소와 서비스 및 기타 추상화를 만들고 컨트롤 및 종속성 삽입 등을 추가 할 수 있습니다. 처음에이 작업을 해오 던 우리 분들은 그러나 그것은 잠시 우리가이 일을 수행했기 때문입니다. 우리는 그 일을하는 법을 압니다. 우리는 이미 많은 것들을 위해 클래스와 라이브러리를 가지고 있습니다. 막 시작한 누군가 또는 초기 초기 단계의 앱을 위해, 그것은 불구가 될 수 있습니다. 앱을 개발하는 대신 권장 사항, 사례, 도서관 등을 통해 쏟아 부는 일이 며칠이나 끝날뿐입니다. 결국에는 실제로 보여줄 것이 없습니다. 올바르게 일하는 것에 대해 걱정하지 마십시오. 뭔가. 그런 다음 리팩토링 담당자가 올바르게 될 때까지 리팩터링하십시오.

+0

아주 잘 설명해 주셔서 감사합니다.이 크리스에 넣은 것 같아요! 당신은 내가 아는 한 최선을 다할 아주 좋은 충고를했습니다. – Zac

1

내가 전문 ASP.NET 디자인 패턴이라고 스콧 밀레 책을 읽는 건의 할 것입니다.
ISBN : 0-470292-78-4
스콧은 좋은 ASP.NET 사이트 아키텍처 관점에서 어떻게 보일지를 통해 산책 - 등 즉 DATAACCESS 레이어, 비즈니스 로직 레이어, 프리젠 테이션 레이어, 도메인 이벤트

업계 표준을 따라하면 MVC 웹 사이트를 올바르게 조합하는 방법에 대한 더 나은 지식을 얻을 수 있습니다.

희망이 도움이됩니다.

2

(낮은 수준 높은에서) 간단한 구조

  1. 프리젠 테이션 레이어
  2. 도메인 로직 계층
  3. 데이터 액세스 계층
  4. 데이터베이스

프리젠 테이션 층 MVC입니다 뷰, 컨트롤러 및 뷰 모델 (선택 사항)이 포함 된 프로젝트입니다.

도메인 논리 레이어는 (DLL 또는 서비스 참조를 통해) 프리젠 테이션 레이어가 액세스 할 클래스 라이브러리 프로젝트입니다. 이 계층에는 비즈니스 논리와 응용 프로그램에 대한 규칙이 포함됩니다.

데이터 액세스 계층

  1. 두 개의 하위 layers- 저장소을 포함 할 수 있습니다. 사용자 저장소는 장기간 응용 프로그램의 모범 사례입니다.

  2. 엔터티 프레임 워크 모델. 이것은 데이터베이스와 통신합니다.

데이터베이스 이미 가지고 있습니다.

1

MVC 응용 프로그램을 나중에 ASP.NET Web API으로 만들 것을 제안합니다. 나중에 모바일 응용 프로그램을 사용할 경우를 대비하여 도움이 될 것입니다.

MVC 초보자이기 때문에 커뮤니티의 노인들이 공유하는 MVC에서 일부 오픈 소스 프로젝트를 다운로드해야합니다. 두세 가지 프로젝트를 연구하고 가장 적합한 솔루션을 분석하십시오.

빠른 검색으로 좋은 프로젝트를 얻을 수 있습니다. 예 : Making a simple applicationProdinner

그 후에도 소셜 로그인을 사용하려면 MSDN tutorial on MVC 5 app with SSO으로 가야합니다.

3

MVC 프레임 워크 응용 프로그램을 계획하는 첫 단계로 강력한 모델 (일반적인 C# 소품)부터 시작해야합니다. 이 프로세스는 비즈니스를 먼저 이해하고 다른 워크 플로와 엔터티 간의 관계를 이해해야한다는 사실을 기반으로 대부분의 시간을 소비하게됩니다. 따라서 시간이 지남에 따라 비즈니스 모델이 발전합니다. 따라서이 계층을 구축하는 데 질적 인 시간을 투자하되 너무 많이하지는 마십시오.

일단 도메인 (비즈니스) 모델이 준비되면 실제로 리포지토리 클래스를 코딩하기 전에 일반적으로 인터페이스 인 리포지토리 계약을 정의해야합니다. 계약은 모든 당사자 (다른 구성 요소)가 정확히 동일한 방식으로 상호 작용하는 것을 도와줍니다. 그런 다음 저장소 구성 요소에 계약을 구현합니다. 저장소 구성 요소는 영구 매체 (예 : 데이터베이스)에서 PUSH 및 PULL 데이터처럼 작동합니다. 저장소 구성 요소가 비즈니스 논리에 대해 전혀 알지 못한다는 것을 기억하십시오.

일단 백엔드가 설정되면 실제 비즈니스 프로세스 구현에 집중할 수 있습니다. Model 클래스를 사용하여 수행해야하는 모든 비즈니스 작업을 정의하는 Contract 레벨을 하나 더 정의 할 수 있습니다. 이 인터페이스는 핵심 비즈니스 활동 (모든 비즈니스 운영을위한 특정 메소드)을 수행하는 BusinessLogic 구성 요소에 의해 구현되었습니다. 이 특정 구성 요소는 리포지토리 구성 요소를 사용하여 비즈니스 데이터를 지속성 매체에 위임합니다.

위 단계를 완료하면 쉽게 컨트롤러를 구축 할 수 있습니다. 우리는 컨트롤러에서 비즈니스 로직 컴포넌트 메소드를 호출하고 작업을 완료해야합니다. 컨트롤러가 완료되면, 우리는 우리의 전망과 부분적인 전망과 같은 다른 UI 요소를 정의 할 수 있습니다 등 흐름의

Pictorial representation은 다음과 같다 -

enter image description here