before, do, after를 묶어보자!!
오늘 조회, 수정, 삭제 관련 폼 작업을 하며 코드를 정리하다가...
조회를 할때 동작전, 동작, 동작 후 세단계를 계속 거치는데, 이걸 코드에 표현해서 메서드로 나열하자니
놓치는게 있는 듯 하고 해서 이걸 묶어서 코딩하면 좀더 앞으로의 코딩이 줄것 같고 놓칠게 줄어들듯 하여
바꿔봤다!
public delegate void DoAction(Func<bool?> beforeaction, Action doaction, Action afteraction);
대리자로 이렇게 동작을 연결짓는 매개체로 삼고
protected DoAction SearchAction = (beforeaction, doaction, afteraction) =>
{
if (beforeaction == null || (beforeaction() ?? true))
{
// progress
if (doaction != null) doaction();
if (afteraction != null) afteraction();
}
};
이렇게 SearchAction을 만들었다.
우선은 별게 없다!
조회버튼이 클릭했을 때...
if (SearchAction != null)
{
SearchAction(
beforeaction: () =>
{
// todo : 조회 조건 체크
return true;
},
doaction: () =>
{
// todo : 조회 동작 처리
},
afteraction: () =>
{
// todo : 조회 후 동작 처리
});
}
이렇게 연쇄적으로 호출할 수 있다면 어떨까 해서 ... 만들었다.
특정 동작에 대한 전 후 동작을 같은 곳에 표현할 수 있게 된다.
이건 저장 동작에 대한 틀이다.
protected DoAction SaveAction = (beforeaction, doaction, afteraction) =>
{
if (beforeaction == null || (beforeaction() ?? true))
{
DialogResult confirmDialogResult = MessageBox.Show("저장하시겠습니까?", "Save", MessageBoxButtons.OK, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (confirmDialogResult == DialogResult.OK)
{
// progress
if (doaction != null) doaction();
if (afteraction != null) afteraction();
}
}
};
저장 버튼이 클릭했을때!
if (SaveAction != null)
{
SaveAction(
beforeaction: () =>
{
// todo : 저장전 유효성 체크
return true;
},
doaction: () =>
{
// todo : 저장 동작 처리
},
afteraction: () =>
{
// todo : 저장 이후 동작 처리.
});
}
우선 beforeaction에서 넘어오는 반환값에 따라 이후 동작들이 연쇄 호출이 되는 셈!
적용해보니 괜찮은데... 이번 프로젝트는 이걸로 가볼까!!!
'# 1) 프로그래밍' 카테고리의 다른 글
app.config Section 작성 변환기... (0) | 2014.11.05 |
---|---|
비동기 처리] IAsyncResult 를 이용함. (0) | 2014.10.30 |
ExtJs > ExtNet 변환 툴!!! (0) | 2014.07.10 |
Directory.Create 관련... (0) | 2014.06.09 |
C#] 프로세스의 파일경로 읽어오기. (0) | 2014.05.30 |