Skip to content

jamesnet214/wpf-code-rules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

WPF Code Rules

이 레포지토리는 체계적인 프로젝트 구조 생성을 위한 WPF 코드 규칙에 대해 설명하고 있습니다.

더 알아보기 »

Star License Activity
Github Stars License Commits-per-month

소개


핵심 DLL

  • System.Xaml
  • WindowsBase
  • PresentationCore
  • PresentationFramework

코드 스타일

Property

public string Email { get; set; }

Get Set Property

private string _email;
public string Email 
{ 
    get { return _email; } 
    set { _email = value; } 
}

Observable Property

private string _email;
public string Email 
{ 
    get { return _email; } 
    set { _email = value; OnPropertyChanged(); } 
}

base를 사용하는 것은 추천하지 않습니다.

base.OnPropertyChanged();    ✔️ OnPropertyChanged();

Property with method in setter

private string _email;
public string Email 
{ 
    get { return _email; } 
    set { _email = value; OnPropertyChanged(); EmailChanged(value); } 
}

Region

#region Email

private string _email;
public string Email
{
    get { return _email; }
    set { _email = value; OnPropertyChanged(); EmailChanged(value); }
}
#endregion

Try Catch

Try Catch의 사용은 추천하지 않습니다.

Try Catch 영역에서 일어난 에러들은 프로그램 작동 주기에 반영되지 않기 때문에 응용 프로그램 흐름 문제를 발생시킬 수 있습니다. 이러한 문제를 방지하려면 개발 단계부터 Try Catch를 사용하지 않는 것이 좋습니다.

특히 xamlcs, 리소스 영역 간 유기적인 흐름을 유지하는 WPF 애플리케이션은 개발 단계부터 Try Catch를 사용하지 않을 때 더욱 큰 이점을 가집니다. Try Catch 영역의 반복을 유도하고 사용자가 제어할 수 있는 코드를 구현하려면 While문을 조합하여 사용하는 것이 좋습니다.

👉 Try Catch를 반드시 사용해야 하는 경우

특정 행위의 성공 여부를 체크해야 할 때는 Try Catch를 사용하는 것이 좋습니다.

  • 로컬 파일 접근
  • 크롤링
  • 외부 연결
  • API

코드 품질 체크

◾ 사용하지 않는 xmlns:local 제거

<UserControl x:Class="TestProject.Views.TestUserControl"
             xmlns:local="clr-namespace:TestProject.Views;assembly=TestProject">
         ...
</UserControl>

◾ 연결된 리소스 명시

사용중인 스타일 리소스의 위치를 확인하고 App.xaml에 적절히 선언되었는지 확인합니다.

◾ 각 컨트롤 스타일의 분류

컨트롤들의 스타일은 각각의 네이밍 규칙에 맞춰 생성합니다.

◾ 사용하지 않는 x:Name 제거

View 또는 ViewModel의 .cs 접근을 위해 선언된 x:Name들을 삭제하고 이를 대체할 방법을 찾습니다.

◾ 사용하지 않는 using 제거

  • 가독성
  • 불필요한 코드
  • 네임스페이스의 불필요한 반복과 충돌 이슈
  • C#의 객체지향 구조에 대한 이해

Resources

WPF 프로그램에서 리소스 규칙은 매우 중요하기 때문에 프로그램의 UI 설계보다 더 많은 노력을 기울여야 합니다. 따라서 WPF에서 사용하는 주요 리소스에 대한 가이드를 최대한 상세하게 제공하고자 합니다.

프로젝트에서 리소스 시스템을 관리하는 것은 매우 복잡하고 어렵습니다. 그래서 처음부터 끝까지 엄격하고 강력한 네이밍 규칙을 지키는 것이 매우 중요하며, 이는 지속적인 인내를 필요로 합니다.

리소스들을 정해진 규칙 없이 일시적으로 생성하는 것은 매우 나쁜 방법입니다. 이는 관리되지 않는 리소스들이 축적되어 모든 프로그램 로직의 가독성과 기능적 확장성을 크게 방해하기 때문입니다. 또한, 무질서한 리소스는 프로그램의 생명 주기가 끝날 때까지 개발자들을 계속 괴롭힐 것입니다. 그렇기 때문에 약간 귀찮더라도 규칙을 만들고 유지하는 것이 중요합니다.

스타일 분류 트리구조

Visual
Design
  • SolidBrush
  • Path
  • Geometry
  • Drawing

ContentControl

Control Naming Namespace Inheritance Flow
Button BTN System.Windows.Controls Button > ButtonBase > ContentControl > Control > FrameworkElement > UIElement > Visual > DependencyObject
ToggleButton TGL System.Windows.Controls.Primitives ToggleButton > ButtonBase > ContentControl > Control > FrameworkElement > UIElement > Visual > DependencyObject
RadioButton RDO System.Windows.Controls RadioButton > ToggleButton > ButtonBase > ContentControl > Control > FrameworkElement > UIElement > Visual > DependencyObject
CheckBox CHB System.Windows.Controls CheckBox > ToggleButton > ButtonBase > ContentControl > Control > FrameworkElement > UIElement > Visual > DependencyObject

Control

Control Naming Namespace Inheritance Flow
TextBox TXT System.Windows.Controls TextBox > TextBoxBase > Control > FrameworkElement > UIElement > Visual > DependencyObject

FrameworkElement

Control Naming Namespace Inheritance Flow
TextBlock TXB System.Windows.Controls TextBlock > FrameworkElement > UIElement > Visual > DependencyObject

> #### ItemsControl
Control Naming Namespace Inheritance Flow
ListBox LBX System.Windows.Controls ListBox > Selector > ItemsControl > Control > FrameworkElement > UIElement > Visual > DependencyObject
TreeView TRV System.Windows.Controls TreeView > ItemsControl > Control > FrameworkElement > UIElement > Visual > DependencyObject

TBD...

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •