Написание библиотеки Java для Java ME и Java SE с максимально возможным количеством общего кода - PullRequest
1 голос
/ 22 февраля 2011

Я понимаю, что две версии Java существенно различаются, но библиотека, которую я ищу, использует стандартную сеть HTTP / TCP и сбор данных для выполнения своей задачи. Это две возможности, которые предоставляют обе платформы, хотя и для разных областей. Я предполагаю, что мог бы написать библиотеку, которая работает с наименьшим общим знаменателем, но было бы идеально иметь версию Java SE, которая использует преимущества обобщенных шаблонов и, как минимум, более обширные коллекции данных.

Я надеюсь, что смогу поддерживать базу кода, которая разделяет как можно больше кода между двумя версиями библиотеки, используя сценарий сборки для создания отдельной библиотеки для каждой из платформ Java. Очевидно, что API-интерфейсы будут немного отличаться, но если основная бизнес-логика библиотеки может быть разделена, это сэкономит время и усилия.

Могут ли они использовать какой-либо сценарий сборки / предварительной обработки / другие методы для достижения этой цели? Это больше хлопот, чем стоит?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Это больше хлопот, чем стоит?

Вероятно, да.

Предварительная обработка обычно не одобряется в мире Java. Препроцессоры существуют, но вы обнаружите, что они не очень хорошо поддерживаются в IDE, инструментах сборки и т. Д.

Для чего-то подобного я бы рекомендовал следующий подход:

  1. Выясните, насколько в действительности должны быть различия между версиями кода SE и ME. С точки зрения долгосрочного технического обслуживания, вы, вероятно, вообще не хотите никаких различий.

  2. Если есть вещи, с которыми вы просто не можете справиться, используя метод наименьшего общего знаменателя, то выделите их и спроектируйте / внедрите внутренний API, который скрывает различия в платформе. От руки.

Также подумайте о переносе полезных библиотек с SE на ME. Например, если вам действительно нужен полный стек коллекций, посмотрите, можете ли вы найти порт платформы SE Collections для ME. (Но обратной стороной этого, вероятно, будет раздувание кода на ME ... и это не сделает вас популярным.)

0 голосов
/ 22 февраля 2011

Вам нужно определить, что вы подразумеваете под JavaME.Платформа JavaME состоит из конфигураций и профилей, которые объединяются для формирования поддержки библиотеки.Например, JavaME Personal Profile 1.1 поверх конфигурации подключенного устройства (CDC) является урезанной JavaSE 4. У меня есть большое клиентское приложение, которое работает без изменений как на JavaSE 4, так и на JavaME PP 1.1, хотя мне пришлось отказаться очень мало API, доступных в SE, но не в PP 1.1.

Большой вопрос в том, доступны ли вам функции , доступные в обеих JVM.

В последнее время мы рассматриваем возможность запуска одного и того же клиента под Android, что аналогично.При условии, что функции существуют в обеих, я планирую скрыть различия в моей собственной библиотеке API и реализовать тонкий слой совместимости для обеих JVM, которые реализуют этот API.

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

...