bad coding practice

멤버 정의 순서

  • 클래스 내 모든 멤버는 "이벤트", "필드", "속성", "생성자", "메서드" 순서로 정의

public partial class SA_A2000 : BaseMenu
{
    public SA_A2000()
    {
        InitializeComponent();
        // ...
    {
    
    string strOrdnum = string.Empty;   // 수주번호
    bool isSaveChk = false;            // 저장버튼 클릭시 변경
    bool isMasterChk = false;          // 기본정보 수정 여부
    bool isDetailChk = false;          // 상세정보 수정 여부
    bool isNewChk = false;    // 신규버튼 클릭시 변경
    string ordNumbering = string.Empty; //범한산업 수주번호 채번 구분
    
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        // ...
    }
}

반복해서 참조하며 강제 형변환 예시

이벤트 핸들러의 반복 사용

  • 동일한 이벤트 핸들러를 사용하며, senderEquals 메서드로 판단

문자열 보간 사용

반복해서 작성한 코드의 메서드화

GridFormatRule / FormatCondition.Expression

circle-info

아래 예시는 데이터를 조회할때 마다 Rule을 새로 등록하는 패턴이며, 예시 코드처럼 Expression 속성의 값이 변하지 않는 문자열일 경우 [Grid Designer] 에서 등록하는게 맞습니다.

#region 의 남용

  • region 전처리기는 필드나 프로퍼티 각 멤버의 지역을 구분해서 묶거나 유사한 기능의 여러 메서드를 묶어 코드를 정리하는 용도로 사용한다.

  • 아래 예시처럼 region 블럭 내 하나의 메서드만 존재할 경우엔 사용하지 않는다.

TabControl에서 현재 선택된 TabPage의 판단

  • 나쁜 표현: 열거형을 정의하고 프로퍼티에 값을 할당하는 방식으로 처리한 뒤 해당 프로퍼티의 값으로 판단하는 방식

  • 좋은 표현: XtraTabContorl.SelectedTabPage 속성의 값을 Equals 메서드를 이용해 판단 (이때 TabPage 개체의 이름이 코드만 보고도 어떤 Page 인지를 알 수 있도록 네이밍이 중요)

CTS(Common Type System) 보단 기본 자료형 키워드를 사용 할 것

빈 문자열

"" 대신 string.Empty 를 사용할 것

빈 문자열의 비교

적절하지 못한 멤버 변수 선언과 조회 조건 파라미터 초기화

  • private DateTime _Today; 멤버 변수 정의 불필요. 필요시 GetServerDateTime() 메서드 호출로 날짜를 받아와 처리하는게 좀 더 명확

  • 조회 조건을 초기화 하는 ResetParameters 메서드를 정리하여 OnLoad 에서 호출

엑셀 파일 읽고 처리하기

단순히 파일 읽어와 GridControl에 바인딩하기

  • 읽어온 파일의 데이터를 GridView에 표현할 때 속도 저하를 개선한 예시

  • 코드 내 속도 저하 문제가 되었던 부분에 주석 확인

  • Util 클래스의 ConvertExcelToDataTable 메서드 확인

Last updated