2011-08-09 5 views
2

우리는 현재 클라이언트 측에서 Eclipse를 사용하고 서버 측에서 Spring Framework를 사용하여 풍부한 응용 프로그램을 개발하고 있습니다.Spring : 다른 응용 프로그램에서 서비스를 공유하는 방법

내 과제는 서로 다른 응용 프로그램에서 동일한 비즈니스 기능 (서비스)을 공유함으로써 구현 노력을 줄이는 것입니다. 이러한 비즈니스 기능 (예 : 문서 관리 컨텍스트의 체크인/체크 아웃 서비스)은 특성이 다를 수 있습니다 (예 : 체크인 자체는 동일하지만 한 응용 프로그램에서는 체크인 후에 파일이 삭제되고 다른 응용 프로그램은 아무 것도하지 않습니다). 이 경우 복사 할 코드 &을 복사하여 새로운 요구 사항에 적용하거나 loc과 유지 관리 노력을 줄이기 위해 또 다른 멋진 솔루션 (예 : 콜백 재사용 코드)을 찾습니다.

그런 시나리오에서 어떤 경험이 있습니까? 스프링은 하나의 플랫폼에서 이러한 다중 애플리케이션 접근법을위한 솔루션을 제공합니까?

답변

0

물론 사실, Spring (일반적으로 IoC)은 그러한 솔루션을 위해 만들어졌다. 먼저 기술 단계 : 다른 프로젝트에 드롭 할 수있는 라이브러리로 공유되는 서비스를 추출하십시오.

이제 재미있는 부분이 있습니다. 일부 논리는 다르지만 나머지는 동일하면 종속성 주입과 전략 패턴을 사용하십시오!

@Service 
public class CheckInService { 

    @Resource 
    private CheckInCleanup checkInCleanup; 

    public void checkIn(Doc doc) { 
    //... 
    checkInCleanup.checkIn(doc) 
    } 
} 

이제 모든 응용 프로그램마다 다른 CheckInCleanup 인터페이스의 두 가지 독립적 인 구현을 만듭니다. 하나는 파일을 지우고 하나는 아무것도하지 않습니다. 한 응용 프로그램에서 전자는 주입되고 두 번째 응용 프로그램에서는 후자가 주입됩니다. CheckInCleanupCheckInService을 포함한 라이브러리의 일부이지만 구현은 입니다. Spring은 시작할 때 자동으로 시작하여 자동으로 주입합니다.

게다가 당신은 관심사의 좋은 분리를 도입하고 테스트 가능성을 증가 시켰습니다.

+0

다른 응용 프로그램 컨텍스트 등으로 별도의 응용 프로그램을 개발하는 것이 좋습니다? 내 첫 번째 아이디어는 런타임 동안 IoC를 사용하여 모두 한 맥락에서 실행하는 것이 었습니다 - 눈에 보면 좋은 접근 방법입니까? – Philipp

+0

동일한 서비스를 다시 사용하려는 응용 프로그램 A와 B가 있습니다. 'CheckInService'와'CheckInCleanup'을 JAR 라이브러리에 추출하여 A와 B에 포함시킵니다. A와 B는 모두'CheckInCleanup'의 다른 구현을가집니다. 예, 저는 A와 B 모두 Spring을 사용한다고 가정했지만, 그 중 일부에서는 IoC를 사용하지 않고 쉽게 벗어날 수 있습니다. –

관련 문제