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

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

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

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

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

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

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

3 Likes

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

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

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

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

8 Likes

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

2 Likes

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

2 Likes

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

3 Likes