2017-10-26 3 views
0

우리는 거대한 프로젝트를 더 작은 모듈로 분할합니다.큰 응용 프로그램을 작은 모듈로 분할 - maven

예 : 하나의 앱에있는 A, B 모듈을 독립적으로 만들고 독립적으로 컴파일하려고합니다. 많은 상호 참조가 있습니다.

종속성을 분할하는 가장 좋은 방법은 무엇입니까? 현재 인터페이스를 작성하고 각 인터페이스에 대한 서비스로 공개하려고합니다. AImpl (B에 의해 호출되어야하는 일부 클래스) 그리고 B는 class.forName에 의해 그것을 사용하고 AImpl에 타입 변환을 사용합니다. 런타임 중에는 작동합니다.

많은 재 작업이 필요합니다. 이 올바른 접근법인가?

감사합니다.

답변

0

나는 적어도 똑 바른 포크를 고려할 것입니다. 이를 통해 개별 프로젝트를 독립적으로 발전시킬 수 있습니다. 사용하지 않는 비트는 정리할 수 있습니다. 공유 라이브러리가 필요하다면 필요에 따라 나중에 식별하고 리팩토링하여 필요할 때 사용할 수 있습니다.

나는 과거에 이런 식으로했을 때 "의존성"이 내가 생각하는 것만 큼 공통적이지 않다는 것을 알았고, 나는 그것들을 같은 것으로 구속했다는 것을 발견했다. 모양을 수년에 걸쳐.

예를 들어, 모듈 A (청구라고하겠습니다)에는 신용 조건, 미결제 잔액 등이있는 고객이 있습니다. 모듈 B (지원 전화)에서는 동일한 고객 그러나 소프트웨어 버전이나 지원 내역과 같이 완전히 다른 특성을 갖습니다.

둘 다 "사용자"라고 불리는 것 이외에 공통된 ID 값을 가지지 만 서로에게 아무런 관련이 없으며 실제로 같은 클래스에 속하지 않습니다. 모듈 A가 모듈 B에서 분기되면 바로 User 객체가 훨씬 작아지고 집중됩니다.

사람들이 마이크로 서비스에서 만드는 동일한 발견입니다. 그들이 공유해야 할 필요가 있다고 생각되는 것들은 정말로 공유 할 필요가 없었으며, 실제로 그것들을 분해함으로써 이익을 얻었습니다. 치료법이 아닙니다. 때로는 실제로 정말로 공유되는 복잡한 대상이 있지만, 생각만큼 일반적이지는 않습니다. 종종 동일한 "이름"을 가지며 동일한 클래스/모듈에 포함되는 두 가지 다른 사물의 문제 일뿐입니다.

+0

A와 B는 서로 관련이 없다고 가정하고 있지만 서로의 기능을 호출해야합니다. 오늘, 그들은 직접 전화를합니다. 포크 후 가장 좋은 방법은 무엇입니까? B는 그것의 구현을 인터페이스로 노출시키고 A는 class.forName을 사용하고 그것을 구현 인터페이스로 던지고 그것을 사용한다. – cloudpre

관련 문제