2017-04-11 1 views
1

json POST를 허용하는 servlet doPost가있는 java webapp가 있습니다. 그것을 "사람"이라고 부를 수 있습니다. 그래서 {name : "조", 나이 : 35}와 같은 것을받습니다. 그럼 현재 DB 물건은 서블릿 클래스 내부에서 일어나고있는이 캡처 잭슨에 대한 데이터 바인딩 클래스 ... 같은Java 서블릿 및 지속성 구조

public class Person { 
    public String name; 
    public int age; 
} 

도있다. 따라서 서블릿은 요청을 받고 Person 객체로 deserialize 한 다음 결과 객체를 가져 와서 JDBC 연결을 만들고 insert를 실행합니다. 이것을 구조화하는 가장 좋은 방법은 무엇입니까? 이거 괜찮 니? 지속성이 서블릿보다 객체 자체에 더 많이 연결되어야한다고 생각합니다. DB 기능을 Person obj에 넣어야합니까? 또는 그것을 처리 할 새로운 "물건"을 만드시겠습니까?

답변

1

내구성이 서블릿보다 객체 자체에 더 많이 연결되어야한다고 생각합니다.

는 둘 다 기본적으로, 우리는 제대로 즉, 우리가 섞어 안되는 응용 프로그램을 계층에 올바른 필요하지 않습니다 모두 프런트 엔드 (사용자 인터페이스) 우려와 비즈니스 로직 및 웹 응용 프로그램을 레이어링에 대한 자세한 설명은 아래 확인 .

DB 기능을 Person obj에 넣어야합니까? 또는 그것을 처리하기 위해 어떤 새로운 "thing"을 만드시겠습니까?

아니요, 아니요, DAO (데이터 액세스 개체) 또는 저장소 계층을 사용하는 것과 같이 별도로 데이터 액세스 계층을 처리해야합니다. 일반적으로

는 웹 애플리케이션 아키텍처는 다음과 같이 작동합니다

HTML/JSP -> 서블릿 & 컨트롤러 클래스 -> 서비스 레이어 -> DAO 레이어 -> 데이터베이스

이 층의 각 하나를 자체적 인 이유로 예정되어 있으므로 우려를 섞어서는 안됩니다.

이제는 DAO 레이어에 대해 구체적으로 살펴 보겠습니다. (여기는 DAO 패턴이 어떻게 보이는지) 다양한 작업을 쉽게 수행 할 수있는 프레임 워크가 있으며 ORM (Object Relational Mapping)이 관심있는 개념입니다. 인기있는 ORM 프레임 워크는 HibernateSpring 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 (데이터베이스) 모델 콩 두, 즉 분리되어야 있도록, 하나의 비즈니스 로직을 처리하고 다른 하나는 때문에이 두 층에 걸쳐 콩을 공유 할 수 하지 않는 것이 좋습니다 사용자 인터페이스 (프론트 엔드)의 경우 모두 이 느슨하게 결합 된이어야합니다.

+0

그래서 서블릿은 요청을 받아들이고 json 스키마와 일치하는 일부 databind 클래스에 데이터를 deserialize합니다. 그런 다음 어떤 종류의 조작을 수행하고 테이블 구조와 일치하는 DAO 객체를 생성하고 저장하는 "서비스 계층"으로 전달합니다. – MichaelB

+0

예제를 추가했습니다. 위를보세요 – developer

+0

요청과 데이터 모델이 일치하지 않으면 ... "사람"json과 같은 POST를 수신합니다. "{name : joe, age : 21, address : {street : 가짜, 도시 : 시애틀}}이 "Person"컨트롤러를 만든 다음 "Person"POJO를 만들고 "PersonDAO"는 "AddressDAO"를 사용하여 데이터 조작을 수행합니다. – MichaelB