2011-12-29 2 views
3

같은 내 다오의 아르 설정 :내 Dao 메소드를 내 서비스 계층에 공개하는 방법은 무엇입니까?

UserDao 
UserDaoImpl 

내 비즈니스 계층과 같은 서비스 클래스에 : 지금

UserService 
UserServiceImpl 

내 다오의

등, 업데이트, 얻을 저장 등의 기본 조작이 각 서비스 인터페이스에 이러한 메소드를 수동으로 추가하지 않고도 이러한 메소드를 서비스 클래스에 표시하려고합니다.

어떻게하면됩니까?

답변

2

서비스가 CRUD 작업 외에 다른 작업을 수행하지 않고 다른 서비스에서 해당 DAO를 필요로하지 않는다면 서비스 구현에 이러한 작업을 넣고 DAO를 배포 할 수 없습니다.

그냥 통과로 서비스를 사용하는만큼 쉽게 :

public interface GenericRepository<V, K extends Serializable> { 
    V find(K key); 
    List<V> find(); 
    K save(V value); 
    void update(V value); 
    void delete(V value); 
} 
+0

예.하지만 10 개의 서비스 클래스가있는 경우 작성해야 할 코드가 있습니다. 여하튼 일부 OOP/제네릭을 사용하여 무료로 얻을 수있는 방법이 있기를 바란다. – codecompleting

+1

@codecompleting : 제네릭 저장소와 유사한 제네릭 기본 클래스를 만들고 일반 DAO에 위임하십시오. –

+0

일반 저장소가 있지만 최대 절전 모드를 사용할 때 매개 변수로 클래스 유형을 전달해야합니다. 다음은 그 예입니다. http://code.google.com/p/hibernate-generic-dao/source/browse/trunk/dao-hibernate/src/main/java/com/googlecode/genericdao/dao/hibernate/GeneralDAOImpl .java 나는 내가 할 필요가 없었 으면 좋았을 텐데, 어쩌면 나는 클래스 타입을 매개 변수로 가지지 않고 대신 설정하는 각각의 Dao에 private 속성을 가질 수있다. 어떻게 생각하니? – codecompleting

0

예이 어댑터 패턴

의 변화의 종류는 다음과 같습니다

public interface FooService { 
    Foo find(Long id); // Same as DAO signature 
} 

@Service 
public class FooServiceImpl implements FooService { 
    @Resource(name = "fooRepository") 
    private FooRepository fooRepository; 

    public Foo find(Long id) { return this.fooRepository.find(id); } 
} 

그것은 일반적인 DAO를 작성 가능

UserDaoImpl을 UserServiceImpl로 확장 할 수도 있습니다 (예 :

).
+0

콘크리트 상속은 여기? 추한. 단순히 위임을 사용하지 않는 이유는 무엇입니까? – Saish

+0

그렇습니다. 전략 패턴은 여기에 있습니다. – Jyotirup

+1

전략은 상속이 아닌 위임으로 표준 적으로 구현됩니다. http://en.wikipedia.org/wiki/Strategy_pattern – Saish

3

서비스가있는 요점은 트랜잭션 내에서 DAO 메소드를 집계하고 비즈니스 로직을 추가하는 것입니다. 모든 서비스가 개별 DAO 메소드를 래핑하는 경우에는이를 유지할 필요가 없습니다. Grails (또는 Play와 같은 일부 프레임 워크를 사용하여 필요에 따라 Java를 계속 사용할 수 있으므로 데이터 액세스 방법이 도메인 객체에 동적으로 추가되므로 컨트롤러에서 호출하고 CRUD 코드를 사용하지 않아도됩니다 나중에 필요할 때 옵션으로 서비스를 제공합니다.)

+0

동의했습니다. 그러나 비즈니스 로직은 기본적인 get/update/delete 메소드가 아닐 것입니다. 필요한 경우 덮어 씁니다. – codecompleting

관련 문제