Разделенные API и структура проекта реализации

структура проекта parent-api-impl является для меня чем-то новым. Наша структура проекта Java maven выглядит так:

> com.sample.myproject
> com.sample.myproject.api    
> com.sample.myproject.impl

мои вопросы:

  1. Как создать такой проект в Eclipse таким образом, чтобы они были связаны друг с другом?

  2. когда такой вид структуры целесообразно?

  3. есть ли какой-либо сайт или ссылка, на которую я могу ссылаться, которая обсуждает такую структуру? Ля учебник или руководство, возможно?

2 ответов


1) в eclipse вы создаете проект 3 и делаете pom.xml-файл для каждого для управления maven. После этого, вы должны сделать:

  • родитель зависит от api
  • impl зависит от родителя и api

таким образом, плагин eclipse m2eclipse подключит проекты друг к другу.

2) эта структура проекта рекомендуется только в том случае, если вам когда-либо понадобится изменить всю реализацию определенного api. Это позволяет разместить другую банку с другой реализация на легко приложения, без modifiing любой Java-код. Конечно, это применимо только в том случае, если вы ссылаетесь только на api, а не на реализацию. Его можно выполнить с EJB или весной.

3) я не могу думать о каких-либо учебниках или сайтах там, извините.


Я думаю, что было бы разумнее ответить на ваши вопросы в обратном порядке...

поскольку у вас есть API,Фасад Шаблон Данных может быть хорошей точкой для начала. Цель этого шаблона состоит в том, чтобы обеспечить интерфейс, к которому могут подключаться внешние пользователи.

этот тип структуры обычно желателен, когда вы хотите выставить ряд функций (API), не разглашая, как вы на самом деле, когда о реализованных таких функциях. Так, например, вы просто выставляете public BigDecimal calculateTax(BigDecimal amount, double percentage) для ваших пользователей, не показывая, как вы пошли и реализовали свой метод.

наконец, вот как я бы сделал это:

  • com.sample.myproject будет моим основным проектом, и в нем я помещу любые основные функции, такие как сохранение объектов.

  • com.sample.myproject.api будет по существу проекта с Interfaces и другие вещи, которые я хочу раскрыть.

  • com.sample.myproject.impl будет осуществлять два проекта выше, используя основной проект и некоторую дополнительную логику, чтобы показать, какой уровень API делает доступным.