2014-07-15 2 views
1

필자는 독립형 (웹이 아닌) 스프링 응용 프로그램을 레이어로 구성하는 방법에 대한 정보를 얻기 위해 Spring에서 응용 프로그램을 만드는 방법에 대한 자습서를 읽었습니다.Spring 애플리케이션에서 레이어와 책임을 구조화하는 방법은 무엇입니까?

상황 - 내 응용 프로그램에서 일부 데이터를 처리하고 일부 계산을 수행합니다. 데이터는 다른 데이터 소스 (PostgreSQL 및 RESTful API)에서 저장되고 읽혀집니다.

나는 내 응용 프로그램을 구성하는 방법을 생각해야 :

  • 도메인 (com.example.domain) 객체 - 등 제품, 주문, 고객과 같은 간단한 POJO 클래스를
  • 서비스 층 (com.example.service) - 이 클래스들은 비즈니스 로직을 처리 할 것이고 컨트롤러와 DAO 객체와 협력 할 것이며 몇몇 인터페이스 (ProductManager, OrderManager, ...)의 구현이 될 것입니다.
  • DAO/저장소 계층 () - 원시 데이터 조작을 정의하는 인터페이스 (ProductDao, OrderDao). 특정 데이터 소스 (PostgreSQLProductDao 등)에 대해 이러한 인터페이스가 구현됩니다.

질문 :

  1. 이가 나누어 올바른 당신에게 의미가 있습니까?

  2. 다른 DAO 구현을 사용할 때 서비스 클래스에 영향을주지 않고이 스위치를 수행해야합니까? 데이터 처리가 다른 데이터 구조로 인해 다른 방식으로 처리되기 때문에 나는 묻는다. 예를 들어 다른 프로젝트 인스턴스에서 동일한 데이터베이스 (PostgreSQL)를 사용하고 데이터가 다른 형식으로 저장되는 경우 다른 계산을 수행해야합니다 (DAO 레이어에서 다른 메서드를 호출하여 다른 작업을 데이터로 수행해야합니다). 그것은 서비스 계층 또는 DAO 계층에서 수행되어야합니까? 각 프로젝트 및 데이터 소스에 대해 더 많은 서비스 계층 구현을해야합니까?

예 : PostgreSQL 데이터베이스에는 고객이 있으며 그 중 일부는 행에 모든 정보가 없습니다. 따라서이 데이터베이스의 경우 고객이 데이터 소스에서 읽은 후에 이러한 누락 된 정보를 얻어야합니다. 그리고 내 관점에서 볼 때 DAO는 기본적인 작업 (CRUDL과 같은) 만 수행해야하므로 DAO 계층이나 서비스 계층에서 수행해야하는지 확실하지 않습니다.

많은 기사를 읽었지만 이러한 질문에 대한 명확한 답변을 찾지 못했습니다. 감사.

+0

독립형 응용 프로그램의 경우 [Spring Boot] (http://projects.spring.io/spring-boot/)에서 응용 프로그램을 부트 스트랩하고 [Spring IO] (http : // 플랫폼)을 살펴 보시기 바랍니다.spring.io/platform/)을 사용하십시오. 전염병과 같은 모든 XML을 피하십시오. 너의 구조는 좋아 보인다. –

답변

0

이 구분은 많은 의미가 있습니다.

전용 레이어에서 데이터 액세스 코드 분리의 목표 중 하나는 사용자가 요구하는 문제를 해결하는 것입니다. 서비스 계층은 고객이 어디에 그리고 얼마나 정확하게 저장되는지, 필요한 모든 필드를 올바르게 얻는 방법에 대해 신경을 써서는 안됩니다. 이것은 DAO의 책임입니다.

그래서 DAO 구현은 기본 데이터 소스에서 엔티티를 가져와야합니다.

+0

그렇다면 서비스 계층은 하나 일 뿐이고 서비스에 모든 정규화 된 데이터를 제공하는 것은 DAO 구현의 책임입니다. 내 상황에서 인터페이스 정의 서비스의 또 다른 구현을 생성하는 적절한 사용 사례는 무엇일까? – user2148736

+0

응용 프로그램이 실제로 무엇을 하느냐에 따라 달라질 수 있습니다. * 생산 코드 *에 대한 각 서비스의 단일 구현 만있을 수 있으며 그것에 대해 아무런 문제가 없을 수도 있습니다. 그러나 일부 서비스의 간단한 구현 (스텁 또는 더미라고 생각할 수 있음)을 만들어 다른 서비스를 테스트 할 수 있어야합니다. –

관련 문제