Model
모델은 어플리케이션의 비즈니스 데이터들을 표현하고 실제 엔티티와 유사해야 한다.
어플리케이션에서 모델 컴포넌트들은 비즈니스 엔티티와 데이터에 접근하고 수정할 수 있는 기능을 담당하는 규칙들을 포함한다.
모델 컴포넌트는 어떤 타입의 클라이언트나 프레임워크가 모델을 사용하는지 알아서는 안 된다.
"의존성은 하위 구조와 연결되고 데이터는 상위 구조로 향한다." 즉 상위 계층은 하위 계층에 의존하지만,
하위 계층은 상위 계층에 의존하지 않는다는 뜻이다.
만약 모델 클래스에서 Anyframe Web의 패키지나 클래스를 임포트(import)하는 부분이 있다면 위의 규칙을 위반하는 것이다.
Model의 역할
- 정보의 구조와 서로간의 관계를 표현
- DB에서 관리하는 정보와 직접 관련되어 있는 경우가 많음
- 비즈니스 객체들로 구성됨
- 어플리케이션 기능의 중요한 부분을 포함
- 어플리케이션의 상태를 가지고 있음
- 비즈니스로직을 제어하는 규칙을 가짐
- DB의 데이터의 지속성을 관리
- 모델은 비즈니스 객체(Business Object)의 집합으로 정의될 수 있고, 모든 비즈니스 기능을 제공
- 모델은 여러 개의 뷰와 컨트롤러를 가질 수 있으나 하나의 비즈니스는 반드시 하나의 모델을 가짐
- 모델은 비즈니스적인 이유로만 변경될 수 있음. 기술적인 이유나 뷰 개선의 목적으로는 변경될 수 없음
'모델'은 다양한 의미를 내포한다. 일반적으로 모델은 물건을 사고 파는 가게, 경매가 이루어지는 경매소,
태풍의 위치를 예측하는 방법 등 실제적인 개념에 기반을 둔 것들을 표현한다.
모델을 만드는 가장 중요한 목적은 현실 세계의 작업들을 이해하고 기술하거나 흉내 내는 것을 돕는 것이다.
소프트웨어 개발에서 모델은 현실 세계의 엔티티들에 대한 논리적인 표현과 프로그램에 사용할 수 있는 클래스 및 인터페이스와
같은 물리적인 자원들을 가리킨다. 모델을 개발하는 단계는 다음과 같다.
Model의 개발 단계
- 요구사항 분석
- 개념 모델 (conceptual model)
- 디자인 모델
어플리케이션에 알맞게 모델을 디자인하는 방법은 이 매뉴얼의 범위를 넘어서므로 분석과 디자인에 대한 다른 Resources 들을 참고하기 바란다.
참고로 모델을 구성하는 비지니스 객체(Business Objects)는 현실 세계의 엔티티를 대변하며
속성과 관계, 메소드를 가진 자바 클래스로 표현 가능하다.
비지니스 객체의 종류는 다음과 같다.
비지니스 객체의 종류
- 영속성을 지닌것 (ex. EJB의 엔티티 빈)
- 비지니스 프로세스에 관한 것 (ex. EJB의 세션 빈)
- 비지니스 이벤트에 관한 것 (ex. EJB의 메시지 드리븐 빈)
Struts Framework는 사실 모델 컴포넌트를 제공하지 않는다. 이미 EJB, JDO, JavaBeans, ORM 등 많은 프레임워크와
컴포넌트 모델이 존재하며 Struts의 장점중의 하나는 어떤 모델을 사용해도 제약이 없다는 것이다.
Anyframe Web에서는 Anyframe 서비스(Spring Container 기반)의 비즈니스 오퍼레이션을
invoke 하고 데이터를 주고 받는데 최대한 중점을 둔다.
다음은 Anyframe 서비스를 호출하는 Action 코드의 일부이다.
...
ApplicationContext ctx = getWebApplicationContext();
UserService userService = (UserService) ctx.getBean("userService");
UserVO userVO = new UserVO();
UserForm userForm = (UserForm) form;
BeanUtils.copyProperties(userVO, userForm);
userService.updateUser(userVO);
return mapping.findForward("success ");
...