C# 프로젝트 구조에 대한 고민

안녕하세요, 토이프로젝트로 C#을 사용해 WinForm 프로그램을 하나 만들어보고있는데요,
폼에 탭 컨트롤을 추가하고 DockType을 Fill로 한 다음 각각의 탭이 독립된 하나의 페이지처럼 사용을 하려고 합니다.

그래서 이를 위해서 프로젝트 구조를 어떻게 가져가야 하나 고민을 했는데

첫번째는 각 탭페이지별로 클래스를 만들고 각각 페이지클래스는 데이터 요청 및 ui제어도 독립적으로 하고 페이지별 데이터를 주고받거나 하는 등 상호작용이 필요한 경우는 폼에서 중계를 맡아서 하면 어떨까 하는 고민을 했구요
이렇게 생각했던 이유는 유지보수나 차후 페이지추가 등 확장성에서도 용이하지 않을까 생각했었는데 ui가 결국 폼 하나에서 다 생성된건데 이거를 여러 클래스에서 변경하는게 맞는가 싶은 의문이 들었습니다.

그래서 두번째로 생각한 것이 api호출이나 db연결 등 백그라운드 작업을 담당하는 클래스를 두고 ui제어는 폼에서 다 처리하게끔 하는 방법을 생각했습니다.

근데 뭔가 이거다 싶은 딱 가슴에 와닿는 느낌이 아니라 여러 선배님들의 조언을 듣고싶어서 글을 올려봅니다.

보통 WinForm 프로젝트를 만드실 때 구조를 어떻게 가져가시는지 궁금합니다!

3개의 좋아요

UI 관련 기능과 실제 기능을 구분한게 MVVM 입니다. 그런데 저도 Windows Forms으로 작업 했을 때는 MVVM을 사용 하지 않았고 지금 생각에도 과연 맞는가 생각은 듭니다. 배보다 배꼽이 클 것 같거든요. 관련해서 MVVM으로 검색하시면 모델링에 대한 힌트를 얻으실 수 있을 것 같습니다.

그렇지만 MVVM 사용하지 않아도 화면과 기능은 분리가 필요합니다. 그렇지 않으면 유지 보수가 어렵거든요. 예를 들어 데이터베이스에 질의를 해 데이터를 가져오는 기능은 별도의 클래스로 구현하는 것이 좋겠습니다.

마찬가지로 디바이스를 제어한다면 디바이스 관련 기능도 역시 별도의 단위테스트가 가능한 형태로 분리하는 것이 맞습니다.

UI 관련 측면에도 분리가 좋습니다.
탭 형태의 경우 각 탭을 UserControl로 만든 후 붙이는 것이 좋습니다.
분리된 UserControl에서 데이터의 질의, 질의 후 화면에 적용, 화면에서 데이터의 변경은 간단한 인터페이스를 구성해서 UserControl에서 구현해도… 뭐 제 입장에서는 충분할 것 같습니다.

8개의 좋아요

아 UserControl을 사용하는 방법이 있었군요 조언 감사드립니다 한번 해보겠습니다!

2개의 좋아요

탭페이지를 winform 각각 만들어서 추가하세요. 하나에 만들면 object 이름 중복 걸리거나 관리 힘드니 각각 만들어서 behind 코드에서 winform을 tab에 추가하세요

2개의 좋아요

윈폼 토이 프로젝트라면 BindingSource 공부해 보시길 추천 드립니다.

3개의 좋아요