Top Banner
부부 : “ASP.NET MVC 부 부부부부 HOONS 부부” HOONS 부부 부부부부 부부부부 Part1. 부부부
35

HOONS닷넷 오픈소스 프로젝트 Part1.

Dec 07, 2014

Download

Documents

ASP.NET MVC로 구현하는 HOONS닷넷
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: HOONS닷넷 오픈소스 프로젝트 Part1.

부제 : “ASP.NET MVC 로 구현하는 HOONS 닷넷”

HOONS 닷넷오픈소스 프로젝트 Part1.

전호진

Page 2: HOONS닷넷 오픈소스 프로젝트 Part1.

전호진

HOONS 닷넷 시삽 (2010~)( 주 ) 필라넷

강사소개

[email protected]

http://crynut84.tistory.com

Page 3: HOONS닷넷 오픈소스 프로젝트 Part1.

진행순서 ASP.NET MVC 소개

MVC 의 장점 살리기

HOONS.NET 살펴보기

Page 4: HOONS닷넷 오픈소스 프로젝트 Part1.

ASP.NET MVC 소개

Page 5: HOONS닷넷 오픈소스 프로젝트 Part1.

ASP.NET 의 두가지 개발 모델

Page 6: HOONS닷넷 오픈소스 프로젝트 Part1.

WebForm VS MVC WebForm

- Winform 과 유사한 이벤트 기반의 프로그래밍- 도구상자의 Drag&Drop ( 서버컨트롤 )- ViewState 를 이용한 상태관리- 포스트백

MVC

- View Model Controller 로 관심의 분리- ViewState 가 없음 .- 원하는 HTML 코드 생성 ( 웹표준 )- RESTfull- 관심의 분리로 자동화된 단위 테스트 작성에 유리

Page 7: HOONS닷넷 오픈소스 프로젝트 Part1.

MVC 동작 원리

Page 8: HOONS닷넷 오픈소스 프로젝트 Part1.

라우팅 시스템- WebForm : http://hoons.kr/Board.aspx?page=2&Name=Free- MVC : http://hoons.kr/Board/Free/1- SEO 최적화 .- IIS 의 물리적인 파일 구조 노출안함 .

System.Web.Routing

routes.MapRoute( "BoardList", // 경로 이름 "Board/{BoardKindCode}/{Page}", // BoardIdx 는 글 읽을 때 해당 new { controller = "Board", BoardKindCode = "", action="List",Page = 1 }, new string[] { "HOONS.WEB.Controllers" } // 매개 변수 기본값);

Page 9: HOONS닷넷 오픈소스 프로젝트 Part1.

Razor 뷰엔진

Page 10: HOONS닷넷 오픈소스 프로젝트 Part1.

Razor 뷰엔진

Page 11: HOONS닷넷 오픈소스 프로젝트 Part1.

Razor 뷰엔진

Page 12: HOONS닷넷 오픈소스 프로젝트 Part1.

MVC 도 ASP 처럼 .

@구문을 이용한 스파게티 코드

Page 13: HOONS닷넷 오픈소스 프로젝트 Part1.

유지보수

Page 14: HOONS닷넷 오픈소스 프로젝트 Part1.

MVC 에서 주목한것은 ?

View Model Controller 로 관심의 분리

Page 15: HOONS닷넷 오픈소스 프로젝트 Part1.

MVC 의 장점을 살리자

Page 16: HOONS닷넷 오픈소스 프로젝트 Part1.

MVC 를 MVC 답게

Page 17: HOONS닷넷 오픈소스 프로젝트 Part1.

역할에 충실하자 ( 관계의 분리 )Model-View-Controller

뷰 모델 , 도메인 모델

HTTP 요청에 따라 모델을컨트롤 ( 비지니스 로직 ) 하여 뷰 선정

컨트롤러에서 전달 받은 Model 을 브라우저에 렌더링( 데이터를 표현하는 로직 )

Page 18: HOONS닷넷 오픈소스 프로젝트 Part1.

역할에 충실하자 ( 저장소 분리 ) 리파지터리 ( 저장소 ) - CRUD

Page 19: HOONS닷넷 오픈소스 프로젝트 Part1.

역할에 충실하자 ( 저장소 분리 ) 컨트롤러에서 리파지터리를 이용해 CRUD

/// <summary> /// 회원가입 /// </summary> /// <param name="account"></param> /// <param name="collection"></param> /// <returns></returns> [HttpPost] public ActionResult Join(Member account, FormCollection collection) { account.UserBirth = collection["txtYear"] + collection["txtMonth"] + collection["txtDay"]; account.UserPassword = CrytographyUtil.MD5Encrypt("0000");

memberRepository.AddMember(account); return RedirectToAction("JoinComplete", "Account"); }

Page 20: HOONS닷넷 오픈소스 프로젝트 Part1.

의존성을 제거하자

리파지터리로 DataSource 를 추상화 했더니 ..

웹 서비스로 바꿔 주세요 .

Page 21: HOONS닷넷 오픈소스 프로젝트 Part1.

리파지터리를 Interface 로 정의

public interface IMemberRepository { IQueryable<Member> Members { get; } bool AddMember(Member member); bool DeleteMember(Member member); bool UpdateMember(Member member); }

public class MemberRepository : IMemberRepository { public bool AddMember(Member member) { ... 생략 .... }}

Interface

실제 구현

Page 22: HOONS닷넷 오픈소스 프로젝트 Part1.

Controller 에서는 Interface 사용

IMemberRepository memberRepository;memberRepository.AddMember(account);

Controller

Con-troller

Con-troller

Con-troller

<inter-face>

Repository

<Con-crete>

Repository

느슨한 결합

Page 23: HOONS닷넷 오픈소스 프로젝트 Part1.

문제해결 ?

IMemberRepository memberRepository = new MemberRepository();memberRepository.AddMember(account);

Controller

Con-troller

Con-troller

Con-troller

<inter-face>

Repository

<Con-crete>

Repository

의존성

Page 24: HOONS닷넷 오픈소스 프로젝트 Part1.

문제해결 ? 직접 생성하지 않고 인터페이스의

구현객체를 얻을 순 없을까 ?

Page 25: HOONS닷넷 오픈소스 프로젝트 Part1.

DI(Dependency Injection) 의존성 주입

의존 객체를 외부에서 전달 받음

public class AccountController : Controller { // 멤버 리파지터리 인터페이스 private IMemberRepository memberRepository;

public AccountController(IMemberRepository memberRepository) { // 생성자를 통해 의존객체 전달 this.memberRepository = memberRepository; } //... 생략 ...

Page 26: HOONS닷넷 오픈소스 프로젝트 Part1.

DI(Dependency Injection)

Page 27: HOONS닷넷 오픈소스 프로젝트 Part1.

DI(Dependency Injection)

NInject Spring.NET

UnityCastle Windsor

- 의존성 관리 ( 생성자 , 세터 , 매개변수 )

- 개체 수명 관리 ( 싱글톤 , 트랜지언트 , 객체 풀 , HTTP 요청 )

Page 28: HOONS닷넷 오픈소스 프로젝트 Part1.

NInject 적용 하기

Page 29: HOONS닷넷 오픈소스 프로젝트 Part1.

NInject 적용이 쉽다 .

ControllerFactory 생성

public class HoonsControllerFactory : DefaultControllerFactory { private readonly IKernel kernel;

public HoonsControllerFactory() { this.kernel = new StandardKernel(); AddBindins(); }

protected override IController GetControllerInstance(RequestContext requestContext, Type controller-Type) { return controllerType == null ? null : kernel.Get(controllerType) as IController; }

private void AddBindins() { kernel.Bind<IMenuRepository>().To<MenuRepository>(); kernel.Bind<IMemberRepository>().To<MemberRepository>(); } }

Page 30: HOONS닷넷 오픈소스 프로젝트 Part1.

NInject 적용 하기

MVC Framework 에 등록 (Global.asax)

protected void Application_Start() { ... 생략 ... //MVC ControllerFactory 를 NInject 로 설정 ControllerBuilder.Current.SetControllerFactory(new HoonsCon-trollerFactory()); }

Page 31: HOONS닷넷 오픈소스 프로젝트 Part1.

의존성을 제거 했더니 ?

역할이 명확히 분리 ( 유지보수 !)

자동화된 테스트 작성이 쉬워짐

Page 32: HOONS닷넷 오픈소스 프로젝트 Part1.

Unit Test 자동화

- 요구사항 정의서에 따라 테스트를 구성하여 , 요구사항을 빠짐없이 구현

- 모듈 수정 시 테스트를 통해 기존 코드 안정성 확보

- 빠른 단위테스트

Page 33: HOONS닷넷 오픈소스 프로젝트 Part1.

훈스닷넷 프로젝트 살펴보기

Page 34: HOONS닷넷 오픈소스 프로젝트 Part1.

Q&A

Page 35: HOONS닷넷 오픈소스 프로젝트 Part1.

[email protected]

http://crynut84.tistory.com