2014-02-10 4 views
1

동일한 타사 장치의 두 C 라이브러리가 있습니다. 차이점은 다른 라이브러리 (라이브러리 B)보다 더 많은 기능을 가진 라이브러리 (라이브러리 A)입니다. 이 장치를 사용하는 두 개의 큰 플랫폼이 있습니다. 플랫폼 A는 라이브러리 A를 사용하고 플랫폼 B는 라이브러리 B를 사용합니다.자바 디자인 : Decouple JNI 라이브러리

더 많은 플랫폼과 시스템을 지원하려면 장치 기능 호출의 웹 서비스 (예 : SOAP)를 작성해야합니다. 그렇다면 기존 함수 인터페이스를 변경하지 않는 라이브러리를 변경하더라도 대형 플랫폼에서 다시 컴파일 할 필요가 없습니다. 또한 새로운 플랫폼이 도입되면 라이브러리와 웹 서비스를 재사용 할 수 있습니다. - SOAP -

플랫폼 <> 경량 웹 서버 < - JNI -> 장치 라이브러리

이 좋은 디자인 : 디자인은 같다? 어떤 단점이 있니?

두 개의 라이브러리가 있으므로 두 라이브러리를 모두 지원하는 단일 Java 클래스를 만들 수 있습니까? 그렇다면 어떻게 구현되지 않은 메서드를 처리 할 수 ​​있습니까?

미리 조언 해 주셔서 감사합니다.

답변

0

선언 종속성 관리 도구로 해결할 수있는 종속성 관리 문제와 비슷합니다.

DLL을 넥서스 같은 서버 종속성 도구에 별도의 아티팩트로 저장하는 것에 대해 생각해 보셨습니까? 그렇게하면 적절한 DLL 라이브러리 아티팩트가있는 maven-like 도구로 다른 배포 프로파일을 준비 할 수 있습니다 (공통 Java 코드베이스에 코드 변경이 없다고 가정).

이렇게하면 배포 시간에 모든 것을 해결할 수 있으며 런타임에 장치 라이브러리를 찾는 데 추가 웹 서비스가 필요하지 않습니다. 이로 인해 서비스 가용성 또는 시작을위한 게시 위치와 같은 다른 문제가 발생합니다 with)

+0

답장을 보내 주셔서 감사합니다. 접근 방식은 플랫폼 A -> 비즈니스 클래스 A -> JNI 클래스 A -> 라이브러리 A로 들립니다. 플랫폼 B-> 비즈니스 클래스 B-> JNI 클래스 B-> 라이브러리 B. 클래스 A와 B가 반복되어 코드 재사용에 위배됩니다. 또한 C 라이브러리를 직접 호출하는 것이 아니라 웹 서비스와 같은 표준 방식으로 다른 시스템을 통합 할 가능성이 높기 때문에이 접근법은 타사 프로그램을 처리 할 수 ​​없습니다. 우리의 상황은 기계의 수가 매우 많다는 것입니다. 웹 서비스에 대한 비평가가 유효합니다. 이 서비스를 처리하려면 서비스가 동일한 시스템에 설치되어 있고 부팅 할 때 시작해야합니다. –

관련 문제