Как правильно подходить к написанию приложений для Android и J2ME путем максимального повторного использования кода? - PullRequest
2 голосов
/ 09 февраля 2011

Большинство людей спрашивают о переходе с J2ME на Android. Я не. Я хотел бы разработать приложения и заставить их работать как на Android, так и на J2ME. Очевидно, что для каждого приложения у меня будет проект Android и проект J2ME, и оба будут исходить из общего зависимого проекта, который будет иметь общий код.

Я хотел бы знать, что люди думают, что правильный подход к дизайну должен быть максимизировать повторное использование кода (максимизировать код в общем проекте).

В моем типичном приложении J2ME есть контроллер / модель и несколько представлений.
Таким образом, каждое представление содержит ссылку на контроллер, и когда пользователь взаимодействует с представлением, представление вызывает метод контроллера, и контроллер решает, какое представление должно отображаться следующим, и какие данные должны иметь в нем. Взгляды не знают друг о друге. Я ожидаю, что код контроллера / модели должен быть в основном многократно используемым, если он написан правильно.

Вопрос в том, как этот 1 контроллер для многих представлений переводится на Android, где каждое действие выполняет подмножество всего приложения?

Один из подходов состоит в том, чтобы иметь одно действие (код контроллера в нем).
Это означает, что приложение должно обрабатывать Back (как в любом случае для J2ME).
Это также означает, что при вызове onAddContextMenu необходимо знать, какая страница отображается в данный момент, чтобы добавить контекстное меню для конкретной страницы.

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

Какие мнения лучше? другие подходы?

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Я предложил использовать LWUIT framework. Вы можете разработать приложение для Android, Blackberry и Midlet с небольшими изменениями, используя LWUIT . Но в Android вы не можете использовать концепцию RMS, PIM API и JSR 172 и некоторые API. Таким образом, вы должны изменить только эти вещи. LWUIT поддерживает мобильные и сенсорные телефоны.

И еще одна информация, вы можете использовать чистую Java-функциональность на платформе Android. Поскольку обычно у java-me нет Map, Set, ArrayList, некоторых строковых функций и т. Д. В Android вы можете использовать все вышеперечисленное. Его не нужно менять, но это уменьшает сложность кода.

0 голосов
/ 18 февраля 2012

Хорошо, теперь, когда у меня есть некоторый опыт разработки приложений для обеих платформ (фактически 2 приложения для каждой платформы), я могу ответить на свой вопрос. Прежде всего, я должен отметить, что Различия между платформами - это не только пользовательский интерфейс. Есть много вещей, которые выполняются по-разному, например, Bluetooth, локализация, уведомления, хранение и т. д. '.

1) Я использовал один контроллер, который переключается между многими представлениями, но я думаю, что способ Android лучше, другими словами, контроллер должен быть разбит на более мелкие субконтроллеры, чтобы он больше соответствовал действиям Android. Это гарантирует, что запускается только необходимый код, а не весь контроллер в памяти, когда приложение активно.
2) Я использовал ссылки на источники, а не на зависимости проекта. Каждое мое приложение - это проект, который тянет в несколько исходных папок (используя связанные источники). Например, приложение Android указывает на папку Impl для платформы Android, общую папку платформы, папку Impl для Android Bluetooth, общую папку Bluetooth, папку Impl для Android Storage, универсальную папку хранения, универсальную папку контроллера и папку контроллера, специфичную для Android и аналогично для хранения ... (приложение J2me извлекает все общие папки, но извлекает папки J2me, а не папки android) каждая исходная папка содержит несколько пакетов ... 3) Я использую фабрики, поэтому у меня есть фабрики Android, которые реализуют универсальные интерфейсы, которые создают объекты Android (которые приходят из исходных папок Android), и фабрики j2me, которые создают объекты j2me (которые исходят из исходных папок j2me), и, конечно, все созданные объекты реализуют общие интерфейсы (которые приходят из общих исходных папок) 4) я узнал, как обрабатывать Bluetooth, уведомления, хранилище и т. Д. На каждой платформе, и самое интересное было абстрагировать различные способы работы на каждой из платформ в общий абстрактный способ, применимый к обеим платформам.

Преимущества такой работы (связывание с источником):
1) У меня есть все проекты / приложения в одной рабочей области (теперь у меня есть семейство приложений j2me и другое из приложений Android). я вижу весь общий код в каждом проекте и могу легко изменить его, работая над каким-то проектом, и, очевидно, он сразу же влияет на все другие проекты, которые он использует.
2) рефакторинг тоже работает очень хорошо. я могу легко перемещать классы из одной исходной папки в другую.
3) Что интересно делать так, так это то, что обычно программисты пишут базовый класс и специализируют его на подклассах. Но, связывая разные исходные коды, вы можете получить некоторый класс, расширяющий два разных суперкласса. Другими словами, у меня может быть класс X, расширяющий класс Y, но в двух разных проектах класс Y отличается. это позволяет мне иметь два разных базовых класса для конкретной платформы для одного и того же универсального класса ... (это должно быть очень запутанным для читателя)

так что, хотя каждый из моих проектов ссылается на общий код и уникальный код, все мои источники находятся в одном месте, а двоичные файлы каждого проекта находятся в пространстве проекта. поэтому общий файл .class может дублироваться в каждом проекте, который их использует. Итак, что абстрагировало всю работу в общие абстрактные классы, и мой контроллер имеет с ними дело. Абстрактные классы обычно реализуются специфичным для платформы способом, прозрачным для моего абстрактного / универсального контроллера.

хорошо, извините, что этот ответ очень абстрактный, поэтому позвольте мне привести еще один конкретный пример:
так что теперь у меня есть, например, что-то под названием BluetoothController. это абстрактная сущность, которая имеет реализацию в J2ME и Android. в будущем, если мне понадобится использовать Bluetooth в новом проекте Android, я просто добавлю общий код и код для Android для Bluetooth. аналогично для j2me, если я хочу разработать мидлет. мой повторно используемый компонент состоит из общих и платформо-зависимых объектов.

Я надеюсь, что этот ответ поможет людям, которые пытаются разработать приложение для J2ME и для Android (или какой-либо другой будущей платформы Java)
Если у вас есть какие-либо вопросы, вы можете попробовать связаться со мной ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...