나는 이런 식으로 일한다 (Struts2 + Hibernate) :
My Struts Actions는 웹 브라우저의 정보 표시 만 담당합니다. 생각하지 않습니다.
사용자-> 조치-> 서비스-> 저장소-> 데이터 액세스
또는:
보고 싶어요-> 보는 방법->해야 할 일-> 얻는 방법-> 어디로
따라서 첫 번째 레이어 (보기)에는 다음과 같은 것이 있습니다.
public String execute () {
try {
CourseService cs = new CourseService();
Course course = cs.getCourse(idCourse);
} catch (NotFoundException e) {
setMessageText("Course not found.");
} catch (Exception e) {
}
return "ok";
}
보시다시피, 나의 "보기"는 생각하지 않습니다. 특정 코스에 대한 서비스 (코스 관리)를 요청합니다. 이 서비스는 보고서, 뱀 등과 같은 많은 일을 더 많이 할 수 있습니다. 결과는 항상 목록 또는 특정 개체 (예 : 예)입니다. 서비스는 실제 머신이며 규칙을 적용하고 리포지토리에 액세스하여 데이터를 관리합니다.
따라서 서비스, 리포지토리 및 DAOS를 다른 라이브러리에 배치하면 텍스트 기반 프로그램이나 아무것도 변경하지 않은 Window 기반 데스크톱 시스템에서도 사용할 수 있습니다.
이 서비스는해야 할 일을 알고 있지만 보여줄 방법을 모릅니다. 보기는 표시하는 방법을 알고 있지만 수행 할 작업을 모릅니다. 서비스 / 리포지토리와 동일 : 서비스가 데이터를 보내고 요청하지만 데이터의 위치와 수행 방법을 모릅니다. 리포지토리는 서비스와 함께 작업 할 수 있도록 원시 데이터를 buisines 객체로 "구성"합니다.
그러나 리포지토리는 데이터베이스에 대해 아무것도 모릅니다. 데이터베이스 종류 (MySQL, PostgreSQL 등)는 DAO와 관련이 있습니다.
데이터베이스를 변경하려는 경우 DAO를 변경할 수 있으며 상위 계층에 영향을 미치지 않아야합니다. 데이터 관리를 업데이트하려는 경우 리포지토리를 변경할 수 있지만 DAO 및 상위 계층에는 영향을 미치지 않아야합니다. 논리를 변경하려는 경우 서비스를 변경할 수 있지만 위와 아래의 계층을 망칠 수는 없습니다.
또한 기술 (웹, 데스크탑, 텍스트)을 포함하여 모든 것을 볼 수 있지만 아래의 내용과 접촉해서는 안됩니다.
비즈니스 로직은 서비스입니다. 그러나 이것과 상호 작용하는 방법은 보는 것입니다. 지금 표시 할 단추는 무엇입니까? 사용자가이 링크를 볼 수 있습니까? 시스템이 콘솔 기반 프로그램이라고 생각하십시오. 잘못된 사용자 #> myprogram -CourseService -option=getCourse -idCourse=234
가 키를 눌러이 명령을 작성 하도록 선택 하거나 중지 해야하는지 거부해야 합니까?
웹 기반 시스템에서 말하기 (Struts + JavaEE) 별도의 GUI 컨트롤러 패키지가 있습니다. 작업보기에서 로그 된 사용자에게 클래스를 제공하고 클래스는 버튼 (또는 원하는 인터페이스 요소)을 제공합니다.
<div id="userDetailSubBox">
<c:forEach var="actionButton" items="${actionButtons}" varStatus="id">
${actionButton.buttonCode}
</c:forEach>
</div>
과
private List<ActionButton> actionButtons;
이를 서비스에서 멀리 보관하십시오. VIEW 항목입니다. Struts Actions에 유지하십시오. 인터페이스 상호 작용은 실제 비즈니스 코드와 완전히 분리되어야하므로 시스템을 이식하면 더 이상 필요하지 않은 것을 쉽게자를 수 있습니다.