블로그 이미지
내게 능력 주시는 자 안에서 내가 모든것을 할수 있느니라 - 빌립보서 4 : 13 - happydong

카테고리

Happydong (1363)
프로그래밍 (156)
MUSIC (16)
인물 (3)
Utility (10)
세미나 소식&내용 (22)
IT뉴스 (18)
운동 (830)
CAFE (10)
Life (282)
Total
Today
Yesterday



예전에 "#if#end 또는 Conditional Attribute의 적절한 사용"라는 내용으로 블로 포스팅 한적이 있다. #if #endif의 사용법은 해당 포스팅을 참고하면 좋을 것이다. 이번에는 ASP.NET MVC 개발을 하면서 View에 디버깅 모드를 분리하는 방법에 대해  알아 보도록 하겠다.

@{

#if DEBUG

    // 해당 코드

#else

    // 해당 코드

#endif

}

[코드 1 - Index.cshtml 파일]


 위 [코드1]은 View에서 서버 코드를 작성 할때 처럼 "@{ }"를 이용해서 디버깅모드 설정을 한 것이다. 그러나 이건 마크업형태로 디버깅하기에는 매우 불편한 방법이다. 그래서 좀더 스마트 한 방법을 알아 보도록 하겠다. 이 방법을 사용하려면 기본적으로 "확장메서드(Extension Methods)"의 개념을 알고 있을 필요가 있다. 사용법 모른다면 일전에 제가 블로그 포스팅한 내용 "확장메서드(Extension Methods) 사용법" 참고 하길 바란다.

 

public static class ExtensionMethods

{

    public static bool IsDebug(this HtmlHelper htmlHelper)

    {

#if DEBUG

            return true;

#else

        return false;

#endif

    }

}

[코드 2 - cs파일에 HtmlHelper의 확장 메서드]

 위 [코드 2]처럼 HtmlHelper의 확장메서드를 만든다. 이는 간단하게 디거깅 모드인지 아닌지를 확인하는 메서드이다.



@if (Html.IsDebug())

{

    <div>Debug 모드</div>

}

else

{

    <div>Release 모드</div>

}

 

[코드 3 - Index.cshtml 파일]


 위 [코드 3]은 [코드 2]에서 만든 확장메서드를 사용하는 방법을 나타낸 것이다. 


 View에서 디버깅모드를 체크할때에는 [코드 1]을 이용하는 것 보다 확장 메서드를 이용하는 것이 좀더 스마트 한 방법이 아닐까 생각이 든다. 

Posted by happydong
, |



ASP.NET MVC로 개발하다보면 RenderBody라는 녀석을 많이 봤을 것이다. 이와 비슷한게 RenderSection과 RenderPage가 있다. 이녀석들은 WebPageBase 클래스에 포함된 메소드들 이다. 

그럼 
RenderBody는 MVC템플릿으로 프로젝트를 생성하면 자동으로 _layout.chhtml 파일에 body태그에 들어가 있는 것을 봣을 것이다. 이는 많이 봤을 테니 따로 설명은 하지 않겠다. 그리고 RenderPage라는 녀석은 Html.RenderPartial과 같은 역활을 한다. 다만 다른건 RenderPage은 페이지가 있는 경로로 파일을 부르고, Html.RenderPartial은 파일이름으로 찾아 뿌려준다. 아래 예제를 보면 감이 올 것이다. 

@RenderPage("test.chhmlt");

@Html.RenderPartial("test"); 

[소스 1 - RenderPage와 Html.RenderPartial 사용법]

(** Html.RenderPartial에 대한 내용 설명은 MSDN을 참고 하길 바란다.)


자 그럼 RenderSection은 어떻게 사용하는가? 어떻게 사용할까에 대해서 생각해 보자. 일단 저 이렇게 사용 할 수 있을 것같다. 우리가 웹페이지들을 개발하다 보면, 어쩔수 없이 body태그 안에 스크립트문을 넣어야 하는 일이 많이 생길 것이다. 누가 그랬는가...body 태그 중간에 스크립트가 들어가있으면 페이지 렌더링 되는데 시간이 걸린다고.... 그럼 RenderSection녀석을 이용해서 해결해 보자!!


[그림 1]

위 [그림 1]과 같이 어쩔수 없이 body태그 중간에 스크립트가 들어가 있는 모습이다.

[그림 2]


 위 [그림 2]는 ASP.NET MVC로 개발해 봤던 분이라면 금방 이해할 수 있을 것이다.
일단 _Layout.cshtml 부분에 @RenderSection 선언해주고, 이름과 필수 요소를 할지를 정의 한다. 첫번째 파라미터가 이름이고, 두번째 파라미터가 필수 요소이다. 필수 요소를 true로 지정하면, Layout을 참조하는 페이지는 모두 RenderSection 선언한 section 블록을 만들어야한다(안그러면 에러난다.). false로 하면 있으나, 없으나 상관없다.



[그림 3]


[그림 3]은 [그림2]를 실행 시켜 소스보기를 해서 본 화면이다.


사용이 아주 간단해서 더이상 말할게 없다. 

스크립트 블록을 나누는거 외에도 이를 이용하면 좀더 View를 세부적으로 나누기가 편할것 같다.






Posted by happydong
, |




 오랜만에 윈폼(WinForm)프로젝트를 하면서, 사용한 설계패턴이다. MVP(Model-View-Presenter) 패턴이 생소 했는데, 익숙해 지니깐 여러므로 편하고, 관리하기 쉬웠다. 그럼 MVP 패턴에 대해 간단하게 정리 하도록 하겠다. 


 MVP 패턴은 1990년대 초기에 등장한 패턴으로 마이크로소프트가 사용해 가장 많이 알려진 패턴으로, 이 패턴은 MVC(Model-View-Controller)패턴을 기반을 둔 GUI(Graphical User Interface)를 만들기 위한 설계패턴이다. 즉, MVC 패턴의 여러 패턴 중 하나이다.
( 참고 : MVC 패턴은 너무나 잘 알려진 설계패턴으로 1979년에 제록스 팰러앨토 연구소에서 스몰토크 관련 일을 하던 Trygve Reenskaug에 의해 처음 설명되었으며, 아직까지도 가광을 받고 있는 패턴이다.)

 MVP 패턴은 View와 Model 간의 결합도를 낮추는데 있으며, Presenter는 Model의 데이터를 View에 출력할 수 있도록 할 뿐만 아니라, 이벤트(Event)를 View에서 받아 Model의 데이터를 갱신하도록 한다. 실제 구현에서는 Presenter는 View와의 결합도를 감소 시키기 위해서, Interface를 참조한다. 이를 통해 Presenter는 View의 실제 UI요소가 어떻게 구현되는지에 관계없이 데이터를 올바르게 표현 하도록 하는 것 이다. 아래 그림을 참고하면 이해가 쉬울 것이다.


 View  View Interface의 Display 맴버(Properties, Display Methods)를 구현하여 실제적인 UI요소를 그려준다.
 View Interface  Presenter에서 Concrete View를 지접 참조하지 않고 View Interface를 참조함으로써 Concrete View와의 커플링을 감소시키고, View의 실제 UI 요소가 어떻게 구현되는지 몰라도 데이터를 올바르게 표현할 수 있도록 해준다.
 Presenter  View와 Model간의 상호작용을 담당하며, Model의 데이터를 View Interface를 통해 Concrete View에 출력(바인딩)해주고, 사용자의 이벤트를 View에서 구독하여(실제적인 이벤트 핸들러 구현) Model의 데이터를 갱신하는 역할을 수행한다. Presenter를 통해 View와 Model간의 의존관계를 없앨 수 있다.
 Model  데이터와 상태를 유지하며, 데이터 처리 로직을 포함한다.

예제 코드는 첨부된 파일을 확인하면 되겠다.


위 그림은 샘플프로젝트의 구성인데, 크게 MultiLayer폴더와 SingleLayer폴더가 보일 것 이다. 이는 MVP 패턴을 멀티/싱로 해서 두개의 샘플을 구성한 것이다. 그리니 스타트 프로젝트를 happydong.SingleLayer.MVP 또는 happydong.MVP.View로 잡아서 실행 시켜보면 될 것이다.

Posted by happydong
, |