2010-08-30 4 views
0

Пришло время разделить платформу, которую я разрабатываю, и я ищу совет по обработке кросс-компонентных зависимостей. У меня много случаев, поэтому я приведу пример.Устранение зависимостей в java-пакетах

У меня есть класс класса, который я хочу сделать видимым для разработчиков. На него также ссылаются классы в my.Contacts, my.Appointments и my.Location пакеты - каждый из которых я хочу отдельно компилировать, jar-d и доставлять. Конечно, я хочу, чтобы Address был единственным классом - адрес работает через эти компоненты платформы прозрачно.

Как следует упаковывать, строить и поставлять адрес?

Спасибо!

ответ

3

Две мысли:

  1. Address звучит как обычный компонент, который может быть использован в различных результатов и поэтому они должны быть доступны в некоторых общей или ядра библиотеки
  2. Это может иметь смысл для вашего компоненты для связи с интерфейсом Address, и реализация может быть предоставлена ​​отдельно (например, предоставить интерфейс Address и реализацию AddressImpl). Это уменьшит количество привязки между основной библиотекой и библиотекой, которую разработают ваши разработчики.
+0

благодарит Брайана за консультацию по интерфейсу – DJC

+0

Пожалуйста, назовите его 'DefaultAddress', а не' AddressImpl'. '* Impl' подразумевает, что это единственная (и единственная) реализация, которая делает использование интерфейса, ну ... бессмысленным. 'По умолчанию *' указывает, что это такое, по умолчанию. – whiskeysierra

2

В этом случае адрес является частью библиотеки, которая заслуживает собственной банки. Если вы создадите класс с именем Address в my.Contacts, my.Appointments и my.Location, и вы хотите использовать все тезисы в одном приложении, у вас будет конфликт для вашего класса Address.

+0

благодарит Колина, оцените его – DJC

1

Предлагаю вам не «доставлять» эти банки отдельно. Java имеет очень тонкие проблемы с версиями, с которыми вы не хотите сталкиваться. Создавайте все вместе и упаковывайте в одну или две банки и всегда доставляйте как банки, так и собирайте их вместе и доставляйте подмножество банок (но никогда не объединяйте новые и старые банки), просто не пытайтесь отправить одну банку в качестве обновления).

Если вы должны самостоятельно их раздельно знать, что окончательные константы скомпилированы и не указаны, поэтому, если вы измените их и доставьте новую банку, любые ссылки из более старой банки не будут обновляться.

Также подписи методов, которые будут изменены, будут иметь странные, непредсказуемые результаты.

Звучит так же, как и интерфейс разработчика - это может быть набор интерфейсов и классов, которые находятся в отдельной банке. Если вы сделаете эту банку достаточно хорошо, чтобы вам никогда не приходилось ее пересматривать (и, конечно же, без ссылок на внешние константы), вы, вероятно, можете уйти от нее, не обновляя ее, что не позволит получить расширения вашего клиента.

+0

Спасибо, Билл за то, что спас мне какое-то несчастье :) – DJC

Смежные вопросы