퇴근5분전

 

 오늘 조회, 수정, 삭제 관련 폼 작업을 하며 코드를 정리하다가...

 

조회를 할때 동작전, 동작, 동작 후 세단계를 계속 거치는데, 이걸 코드에 표현해서 메서드로 나열하자니

놓치는게 있는 듯 하고 해서 이걸 묶어서 코딩하면 좀더 앞으로의 코딩이 줄것 같고 놓칠게 줄어들듯 하여

바꿔봤다!

 

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에서 넘어오는 반환값에 따라 이후 동작들이 연쇄 호출이 되는 셈!

적용해보니 괜찮은데... 이번 프로젝트는 이걸로 가볼까!!!