내구성이 서블릿보다 객체 자체에 더 많이 연결되어야한다고 생각합니다.
는 둘 다 기본적으로, 우리는 제대로 즉, 우리가 섞어 안되는 응용 프로그램을 계층에 올바른 필요하지 않습니다 모두 프런트 엔드 (사용자 인터페이스) 우려와 비즈니스 로직 및 웹 응용 프로그램을 레이어링에 대한 자세한 설명은 아래 확인 .
DB 기능을 Person obj에 넣어야합니까? 또는 그것을 처리하기 위해 어떤 새로운 "thing"을 만드시겠습니까?
아니요, 아니요, DAO (데이터 액세스 개체) 또는 저장소 계층을 사용하는 것과 같이 별도로 데이터 액세스 계층을 처리해야합니다. 일반적으로
는 웹 애플리케이션 아키텍처는 다음과 같이 작동합니다
HTML/JSP -> 서블릿 & 컨트롤러 클래스 -> 서비스 레이어 -> DAO 레이어 -> 데이터베이스
이 층의 각 하나를 자체적 인 이유로 예정되어 있으므로 우려를 섞어서는 안됩니다.
이제는 DAO 레이어에 대해 구체적으로 살펴 보겠습니다. (여기는 DAO 패턴이 어떻게 보이는지) 다양한 작업을 쉽게 수행 할 수있는 프레임 워크가 있으며 ORM (Object Relational Mapping)이 관심있는 개념입니다. 인기있는 ORM 프레임 워크는 Hibernate과 Spring data JPA입니다.
UPDATE :
그래서, 서블릿이 요청을 받아들이는 JSON 스키마와 일치 일부 데이터 바인딩 클래스에 데이터를 역 직렬화. 그런 다음 어떤 종류의 조작을 수행하는 일부 "서비스 계층"을 에 전달하고 표 구조와 일치하는 DAO 객체를 생성하고 저장합니다. 당신은 거의가
, 당신이없는 유일한 것은 DAO 객체는 싱글 클래스는 (그들은 단지 그들이 데이터베이스에 액세스하는 방법을 제공, 데이터를 보유하지 않는 것) 모델/엔티티 빈은 정말이다 데이터를 저장하는 데 사용됩니다.
당신은 아래의 간단한 예는 데이터베이스에
PRODUCT
테이블에 액세스하는 것을 가정 참조 할 수 있습니다
:
ProductDAOImpl 클래스 (싱글 톤 객체) :
public class ProductDAOImpl implements ProductDAO { //or ProductRepository
public boolean save(Product product) {
//add implementation
}
public List<Product> queryProducts() {
//add implementation
}
public Product queryUniqueProduct(String productId) {
//add implementation
}
//etc...any other methods you would like
}
제품 클래스 (하나의 객체에 대한 클라이언트/사용자로부터의 각 요청) :
요청과 데이터 모델이 일치하지 않으면 어떻게됩니까?
항상 프리젠 테이션 계층 Bean과 Entity (데이터베이스) 모델 콩 두, 즉 분리되어야 있도록, 하나의 비즈니스 로직을 처리하고 다른 하나는 때문에이 두 층에 걸쳐 콩을 공유 할 수 하지 않는 것이 좋습니다 사용자 인터페이스 (프론트 엔드)의 경우 모두 이 느슨하게 결합 된이어야합니다.
그래서 서블릿은 요청을 받아들이고 json 스키마와 일치하는 일부 databind 클래스에 데이터를 deserialize합니다. 그런 다음 어떤 종류의 조작을 수행하고 테이블 구조와 일치하는 DAO 객체를 생성하고 저장하는 "서비스 계층"으로 전달합니다. – MichaelB
예제를 추가했습니다. 위를보세요 – developer
요청과 데이터 모델이 일치하지 않으면 ... "사람"json과 같은 POST를 수신합니다. "{name : joe, age : 21, address : {street : 가짜, 도시 : 시애틀}}이 "Person"컨트롤러를 만든 다음 "Person"POJO를 만들고 "PersonDAO"는 "AddressDAO"를 사용하여 데이터 조작을 수행합니다. – MichaelB