채찍질 씨게 한번 받으러 왔습니다.

image

프로젝트 구조의 일부인데요… (생각같아선 다 올리고 싶은데 캡쳐가 힘드네요)

일단 UseCase나 Core부분은 별도의 프로젝트에 있고,

그 외 프론트를 책임지는 프로젝트의 구조입니다…

상태가 꽤나 심각해보이지요? 실컷 코딩에만 몰입하다가 펼쳐본 프로젝트 구조가 아주 가관이라서…

모든 종류의 질책과 조언을 좀 받고싶습니다…

Blazor Server 이고요. 뭐 웹이건 윈도우건 자기 전문분야를 떠나서 파일 네이밍이든 뭐든 어떤 종류든 조언을 구하고 싶습니다.

씨게 때려주세요…

1개의 좋아요

글쎄요… 프로젝트 구조는 일관성만 유지하면 된다고 생각합니다. 가령,
Pages/의 페이지가 하위 디렉토리에 배치해야 한다 등은 규모와 취향의 문제 같아요.

보여주신 내용 중 저랑 스타일이 다른 것은 파일명의 Page 위치 정도인데요, Pages/에는 페이지만 담길 것이므로 저 같은 경우 Page를 생략하거나 Page를 파일명의 가장 뒤에 둡니다.

PageTicket → TicketPage

참고로 Blazor의 경우 컴포넌트 단위이 쉽기 때문에 반복해서 사용하는 컴포넌트는 별도로 잘 구성해 놓으면 편리합니다. 공유된 프로젝트 구조에서는 아마도 Controls일 듯 보이는군요. ^^

3개의 좋아요

채찍질이요? (동공 지진)

다만 한 가지 고려해보심직 한 것은, Razor 프로젝트도 요즈음은 Razor 뷰를 유지한채로 분리된 프로젝트를 만드는 옵션을 쓸 수 있을 것으로 알고 있습니다. 해서, 한 프로젝트에 너무 많은 코드가 몰려있는 것이 유지보수에 영향을 준다고 생각하시면, 프로젝트 단위로 코드를 분리해보는 것 정도를 PoC 해보시면 어떨까 제안드립니다.

그 외에도, 비즈니스 로직의 깊이가 깊어져서 뷰가 여러개가 만들어질 것으로 예상이 된다면, 폴더 구조를 좀 더 세분화해서 서브폴더 (예: Pages/Board 혹은 Pages/Tickets 같이?)를 두는 것도 생각해볼만한 옵션일 수 있을 것 같습니다.

그리고 무엇보다도 프로젝트 규모가 커진다면, 적정한 문서화가 같이 이루어져야 한다고 생각합니다. ㅎㅎ

3개의 좋아요

단지 폴더링 스타일만 보고 말씀 드리기에는 각자 스타일이 있는것라 얘기할것리는 아닌것 같고
제경우에는
GitHub - fullstackhero/dotnet-webapi-boilerplate: Clean Architecture Template for .NET 7.0 WebApi built with Multitenancy Support.
이 boliler plate 구조를 참고합니다.
근데 light theme를 쓰시네요

아 blazor bolier plate 는

3개의 좋아요

페이지 결정은 디자인 디테일에 종속된 것이라, 프로젝트 마다 다를 것입니다.

개인적으로는 디자인 디테일에 크게 구애 받지 않는 상황이라, 한 모델에 관한 CRUD를 페이지 별로 구분하는 것은 페이지 파일의 갯수와 라우팅 포인트가 너무 많아지는 느낌이 있어, 가급적 한 곳에 다 때려 박는 스타일입니다.

만약, 보여주신 Page 폴더 중 Contract 객체에 제 스타일을 맹목적으로 적용한다면, 아래와 같이 할 것 같습니다.

페이지: ContractPage (“/contract/{principalId:guid?}”)
콘트롤: InputContract(모달), EntityTable<T> (별도 디자인이 필요한 경우, ContractList)

ContractPage 의 구조는 대략 아래와 같습니다.

   @if(_isInputShowing)
    { 
        <InputContract Entity="@_contract".../>
    }
    
    <EntityTable Entities="@_contracts" ColumnsCSV="Id, Name, Address1, Address2">
        <CreateController>  // RenderFragment
            <button ... @onclick="@OnCreateClicked">추가</button>
        </CreateController>
        <Controllers>   // RenderFragment<T>
            <button ... @onclick="@(() => OnUpdateClicked(context))">수정</button>
            ...
        </Controllers>
    </EntityTable> 
3개의 좋아요

안그래도 예전 제 글에 달아주셨던 @BigSquare 님의 댓글을 다시 보던 참이었습니다.

실용적이면서도 고급스러운 모양새를 갖추고 싶은 욕심이 있다보니 이런 질문을 또 다시 드리게 되네요.
도움을 얻을 길은 여기에 글을 올리는 것 밖에 없고 보답할 방법도 없다는게 아쉽긴 합니다.
올려주신 댓글 보고 더 공부하겠습니다. 감사합니다.

3개의 좋아요

올려주신 BolierPlate가 api형식이긴 해도 참고할 만한 내용들이 있는 것 같습니다.
감사합니다.
그리고 저는 Classic충(?)이라 뭐든 기본테마, 순정을 좋아합니다 :laughing:

1개의 좋아요

채찍질도 여기 계신 후덜덜한 고수님들한테 받는다면 영광이죠…
돈내고 들어야 할 강의 수준인데…ㅎㅎ

뷰를 유지한 채로 프로젝트를 분리한다라…
이렇게 만들어진 예제를 한번 찾아봐야겠네요.

그리고 말씀해주신대로 페이지를 폴더로 구분해서 담긴 했는데, 1~2개 짜리로 끝나는 페이지 분류들이 많아서리 어떻게 하는게 짧고 굵게 보일까 고민중입니다. :thinking:

조언 감사합니다. 정답은 없겠지만, 똥 된장 다 찍먹해가며 좋은걸 찾아봐야겠습니다.
아, 그리고 문서화는 어떻게 하는걸 말씀하시는 건가요? 각 파일이나 디렉터리에 대한 설명을 말씀하시는건가요?

2개의 좋아요

말씀해주신대로 반영해보았습니다 :smile:
DTO도 마찬가지로 FooDto.cs 이런식으로 바꿔놓으니 좋네요.
뭐든지 Foo.razor, Foo.cs 이런식으로 되어있다보니 이게 '작동’을 구현해놓은 클래스인지 '정의’를 구현해놓은 클래스인지 구분도 안되고 그랬는데, 이젠 명확하게 보입니다.
image

3개의 좋아요