hoons닷넷 오픈소스 프로젝트 part1

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

Upload: -

Post on 07-Dec-2014

2.273 views

Category:

Documents


0 download

DESCRIPTION

ASP.NET MVC로 구현하는 HOONS닷넷

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