문제

도메인 객체의 ID를 수신하는 간단한 스프링 MVC 컨트롤러를 가정하자. 컨트롤러는 해당 도메인 객체로 무언가를 해야하는 서비스를 호출해야합니다.

도메인 객체의 ID를 데이터베이스에서로드하여 도메인 객체의 ID를 도메인 객체로 어디서 변환합니까? 컨트롤러가 수행해서는 안됩니다. 따라서 서비스 메소드 인터페이스는 수락을 사용해야합니다. ID도메인 객체 도메인 객체 자체 대신. 그러나 도메인 객체를 매개 변수로 사용하면 서비스의 인터페이스가 더 좋습니다.

이 일반적인 사용 사례에 대한 당신의 생각은 무엇입니까? 이것을 어떻게 해결합니까?

도움이 되었습니까?

해결책

컨트롤러는 ID를 서비스 계층으로 전달한 다음 나머지 HTTP 응답을 렌더링하는 데 필요한 모든 것을 되 찾아야합니다.

그래서 -

Map<String,Object> doGet (@RequestParam("id") int id) {
     return serviceLayer.getStuffByDomainObjectId(id);
}

다른 것은 단지 웹 계층을 오염 시키려고 할 것입니다. 이는 지속성에 대해 전혀 신경 쓰지 않아야합니다. 서비스 계층의 전체 목적은 도메인 객체를 가져 와서 비즈니스 로직을 수행하도록 지시하는 것입니다. 따라서 데이터베이스 호출은 서비스 계층에 있어야합니다.

public Map<String,Object> getStuffByDomainObjectId(int id) {
    DomainObject domainObject = dao.getDomainObjectById(id);
    domainObject.businessLogicMethod();
    return domainObject.map();
}

다른 팁

내 프로젝트에서 나는 서비스 계층을 사용했습니다.

class ProductService {

    void removeById(long id);

}

나는 이것이 서비스가 원격인지 로컬인지에 달려 있다고 생각합니다. 원칙적으로 가능한 경우 원격 서비스에 ID를 전달하려고하지만 로컬 서비스의 객체를 선호합니다.

이에 대한 이유는 원격 서비스에 필요한 것을 전송하고 지역 서비스에 대한 DAO에 대한 여러 통화를 방지함으로써 네트워크 트래픽을 줄이기 때문입니다 (최대 절전 모드 캐싱을 사용하면 지역 서비스의 음소거가 될 수 있습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top