MVC의 정의, MVC의 등장 이유, MVC의 문제점과 MVC를 지키며 코딩하는 방법을 정리한 포스트입니다.
MVC는 Model View Controller 약자이다.
mvc는 코드 로직들을 model, view, controller 의 특성에 맞게 분리해 놓은 것이다.
등장이유는 간단히 생산성이 좋기 때문이다.
생산성은 크게 4가지로
MVC 이전의 JSP Model1
에서는 하나의 클래스에 로직 + 출력이 같이 존재 했고
유지보수가 어려운 단점이 있었다.
MVC를 적용하며 Model(로직)과 View(출력)가 분리 되었고 협업도 용이해 지게 되었다.
Model (데이터 관리)
View (UI)
Controller (View와 Model의 중개자)
처음 패턴을 적용해 코딩을 하면 내가 MVC를 잘 지키고 있는지 알기가 힘든경우가 굉장히 많다.
공부하던 중 굉장히 좋은 적용방법이자 점검방법을 영상을통해 알게 되어 정리해 보았다.
Model
은 Controller
와 View
에 의존하면 안된다.
👉 Model
내부에 Controller
와 View
에 관련된 코드가 없어야한다(Import 금지)
View
는 Model
에만 의존하고 Controller
엔 의존하면 안된다.
👉 View
내부에 Model
의 코드만 있을 수 있고, Controller
코드는 있으면 안된다.
View
가 Model
로 부터 데이터를 받을때는 사용자마다 다르게 보여줘야하는 데이터만 받아야한다.
👉 ex) 배달될 주소, 사용자 이름⭕ , 홈페이지 이름, 공통 메세지("자동차이름을 입력하세요")❌
Controller
는 Model
과 View
에 의존해도 된다.
👉 Controller
내부에는 Model
과 View
의 코드가 있을 수 있다.
View
가 Model
로 부터 데이터를 받을때, 반드시 Controller
에서 받아야한다.
👉 Controller
가 두 코드를 중개한다. (1번과 2번을 잘 지키면 5번도 잘지켜진다)
MVC를 개선하기 위해 MVC가 녹아있는 5-Layer 구조가 나타났다.
Presentation Layer
는 MVC에서 View
의 기능을 한다.
Control Layer
는 MVC에서 Controller
의 기능을 한다.
Business Logic Layer
는 Service
와Domain
을 가진다.
애플리케이션에서 가장 재사용 가능성이 높은 계층이다.
👉Service
의 역할
Control
과 Persistance
계층을 연결한다
클래스간의 관계를 관리한다
상태의 흐름이 들어가있어 각각의 상태를 저장한다
트랜잭션 관리(상태의 흐름과 관련)
👉 Domain
의 역할
데이터와 행위를 갖는 객체(MVC의 Model
역할)
Persistance
에 맵핑된다.
Persistance Layer
는 데이터 처리(CRUD)를 한다
DAO 패턴,ORM
Domain Model Layer
의 역할
각 계층 사이에서 전달되는 객체임
DTO 패턴
대부분 도메인 모델을 DTO로 사용한다.
MVC패턴의 대안으로 MVP , MVVN이 있다.