본문 바로가기

.NET/ASP.NET

Left Login Menu만들기 By FactoryPattern

오늘 업무중에 유저의 타입별로

왼쪽 로그인 부분을 달리 보여 달라는 요청이 있었다.

전에는 html에서 비지니스 로직을 구현하였는데

이번에 내가 구현한건 아래와 같다.

각 페이지별 UserControl을 만든다.
1) AUser.ascx , BUser.ascx , CUser.ascx 

2)그런 다음 아래와 같이 UserLoginFactory를 만든다. 

 public class UserLoginFactory
{    
public UserLoginFactory()
{
        
}

    public static UserControl GetInstance(UserType type) 
    {
        Control result= null;
        Page page = new Page();
        switch (type)
        {
            case UserType .NonStudent:
                result = page.LoadControl("~"/UserControl/A.ascx);
                break;
            case UserType .Parent:
                result = page.LoadControl("~"/UserControl/B.ascx);
                break;
            case UserType .ParentAndStudent:
                result = page.LoadControl("~"/UserControl/C.ascx);
                break;
            case UserType .StudentAndNonParent:
                result = page.LoadControl("~"/UserControl/D.ascx);
                break;
            case UserType .Student:
                result = page.LoadControl("~");
                break;
            default:
                break;
        }

        return result as UserControl;   
    }
}

}

3)Master.master에 아래와 같이 html 코드를 삽입한다.
<asp:PlaceHolder ID="leftLogin" runat="server"></asp:PlaceHolder>
 
4) Master.master.cs 에 아래와 같이 코딩한다.
leftLogin.Controls.Add(UserLoginFactory.GetInstance(userType));

 
내가 왜 이렇게 했을까? 나도 모르겠다. 이렇게 함으로써 장단점이 확연히 들어나게 되는데

일단 소스를 볼때 좀더 직관적이고 html에 비즈니스 로직이 없어서 좋다.

단점 공통적으로 태그및 Text가 추가될시 모든 ascx에 업데이트 해줘야한다 (이런걸 방지하기 위해  좀더 돌려치는 방법이 있지만 일단 오늘은 여기까지)

선택은 자유다.....