혹시 컨트롤러에 들어 갈 Action들을 어떻게 분리하고 넣어야할가요?

예를 들면 로그인 관련해서 보통 로그인, 회원가입, 비밀번호 찾기와 같이 로그인 관련하여 기능이 여러가지 있다면 한 컨트롤러에 해당 기능을 하는 Action을 모두 넣는 것이 맞는건가요? 아니면 컨트롤러를 각 자 만들어서 각 기능에 해당하는 Action만 넣는게 맞는건가요?

이런 부분 외에도 뭔가 설계라 해야하나 이런 부분을 학습 할 수 있는 키워드가 있을가요?

솔루션 설계에 관한 가이드를 얻고 싶다면, 닷넷이 제공하는 프로젝트 템플릿을 참고하는 것도 좋습니다.

예를 들어, Blazor Web App (8.0) 템플릿을 선택하고, 인증을 Individual Account 로 선택하면 인증과 관련한 코드들이 추가됩니다.

보시다시피, 모든 Action들이 개별적 페이지를 구성하고 있음을 알 수 있습니다.

그런데, 이 요소들은 개별 프로젝트의 Component/ 폴더에 들어가 있습니다.

이는 단순히 프로젝트 템플릿을 구성하기 위해 어쩔 수 없는 선택에 지나지 않을 뿐, 오히려, 레이저 요소의 범용성을 생각한다면 좋지 않은 솔루션 구성입니다.

닷넷에서 권고하는 방식은 Razor Component 들은 Razor Class Library (RCL)프로젝트에 별도로 모아 두고, 블레이저 호스팅 프로젝트가 이를 참조하도록 하는 것입니다.

Common.Components.Account 프로젝트

BlazorWebApp.Server → Common.Components.Account

BlazorWebApp.Client → Common.Components.Account

MauiBlazorHybrid → Common.Components.Account

WPFBlazorHybrid → Common.Components.Account

Account 뿐만 아니라, 재사용 가능한 요소들은 별도의 단일 RCL 프로젝트로 넣어 두면, 같은 코드를 두 번 세 번 반복 작성하는 것을 피할 수 있습니다.

2 Likes

답변을 적고 보니, 콘트롤러에 관한 문의였네요.

컨트롤러도 동일하게 MVC 프로젝트 템플릿을 확인하는 것도 도움이 됩니다.

1 Like

아하, 너무나 상세한 답변 감사합니다!

프로젝트 템플릿이 프로젝트 생성 시 기본적으로 생성되어 있는
템플릿의 구성을 확인하라는 말씀이신거죠?

1 Like

템플릿에 포함된 클래스들을 가리킵니다.

닷넷의 C# 클래스 파일은 프레임워크 마다 다른 확장자를 가질 수 있습니다.

기본: .cs
MVC controller: .cs
MVC view : .cshtml
Web Page: .cshtml
WPF Page : .xaml + .xaml.cs
Blazor component: .razor + .razor.cs

2 Likes