Последнее время проектирую и разрабатываю десктоп приложение на Java. После нескольких лет разработки веб/мобильных решений было очень интересно вернуться к десктопу. Сейчас, в эпоху расцвета различных веб-фреймворков (только среди Java: Spring MVC, GWT, JSF, Tapestry, Wicket, Vaadin и т.д.), для разработки десктопных приложений на Java не такой уж большой выбор.
На мой взгляд, на данный момент есть всего три более-менее популярных подхода:
0. Чистый Swing/JavaFX
1. Использовать Eclipse RCP (Rich Client Platform)
2. Netbeans Platform
Поскольку с самого начало было понятно, что предстоит разработать сложную систему с несколько десятков различных формочек, множеством сложных таблиц с группировкой/сортировкой данных, а в перспективе графики, схемы и другие компоненты, то естественно у меня не было желание использовать чистый Swing/JavaFX, а воспользоваться какой-нибудь из платформ.
Первым делом были мысли использовать все-таки Eclipse (в прошлом у меня был опыт работы с ним). Конечно впечатления были не самые лучшие, но прошло больше 8 лет с тех пор как я имел с ним дело и многое могло измениться. Просмотрел изменения и одновременно начал опрашивать друзей, писал ли кто-нибудь в последнее время для Eclipse RCP. В итоге про Eclipse я услышал мало хорошего. Если резюмировать, главный вывод, который можно было сделать после бесед с друзьями — Eclipse RCP использовать можно, но скажем деликатно, без особого удовольствия. В конечном счете я решил переключиться на Netbeans, к которому присматривался уже давно.
Забегая вперед скажу, что в целом мне платформа пока нравится.
Впечатления
В итоге, спустя больше месяца разработки, можно подвести какие-то промежуточные итоги и общие впечатления.
1. Про исходный код. Он в открытом доступе можно скачать и посмотреть, что я и сделал. Исходники мне очень понравились, аккуратные и прилично оформлены, большинство основных классов с которыми я сталкивался хорошо прокомментированы.
Нельзя сказать, что исходный код тотально покрыт javadoc-ами — местами оформлен лучше, а где-то хуже, но в целом почти нет этих постоянно повторяющихся бессмысленных /* (non-Javadoc) */ .
2. Про учебные материалы. Хорошая документация по API.
На DZone есть шпаргалки по Netbeans Platform.
На сайте NetBeans можно найти огромное количество ссылок на различные учебные материалы. Рассмотрено несколько различных стандартных приложений: “строим приложения для работы с БД”, “рисовалка схем/диаграмм” и т.д. В целом учебники на сайте Netbeans многословные и если честно довольно нудные, зато подробные. Другими словами много “усыпляющего” чтива, советую пополнить запасы кофе перед началом обучения.
3. Про сообщество. Кроме stackoverflow, в случае NetBeans имеет смысл подписаться на почтовую рассылку. Очень активная группа, даже был приятно удивлен сообществом, на многих форумах людей тупо бы послали или отправили читать документацию (п. 2).
В целом мне платформа нравится, но не могу сказать, что сразу всё стало получаться. Где-то больше недели ушло на то, чтобы понять связи базовых объектов, модульной структурой.
Более того пока не могу сказать, что на все 100% разобрался с внутренней архитектурой. Тем не менее, самый главный плюс в том, что можно раскопать по шагам как и что работает внутри на самом деле. Грубо говоря открыть исходники, посмотреть реализацию, документацию и понять что с чем связано или запустить под дебагом.
Для сравнения, с Eclipse у меня так и не сложилась четкая схема как в нём всё устроено. Любые изменения и доработки требовали огромных усилий и тратить часы поиска в интернете подходящих примеров/решений.
Другим большим плюсом в Netbeans – использование стандартного Swing-a. При наличии опыта работы со стандартными Java графическими компонентами, можно вообще никак не зависеть от API Netbeans при разработки какого-то отдельного компонента, сделать самому сложные решения на Swing-е и потом его внедрить уже в конечный продукт.
Детали.
По ходу работы накопились некоторые моменты и факты, про которые хотелось упомянуть.
0. Этот совет касается не столько разработки под Netbeans, а вообще любых проектов. На этапе согласования бизнес-требований явно обозначить и утвердить системные требования к оборудованию, на котором будет использоваться приложение. Нужно для того, чтобы исключить запуск приложения на древних нетбуках. Думаю многие, кто работал на Netbeans знает, что для комфортной работы на нем желательно иметь хорошее железо.
1. Про мaven. Я использую его по привычки. На самом деле не рекомендую, т.к. есть определенные сложности. Вполне можно использовать базовую структуру, а поскольку в Netbeans проекты строятся уже много лет на базе ant-а , то с автоматической сборкой из командной строки проблем в любом случае не будет. По большому счету, разница ant или maven не такая существенная по сравнению “какой-то не понятный .project-файл” или maven.
Если всё-таки планируете использовать Maven,то главное в первую очередь нужно разобраться, что такое cluster и suite в терминых Netbeans Platform.
Обратить внимание на параметр “netbeans.installation”.
2. Интересный компонент Outline (древо-таблица).
Реализация древо-таблицы (TreeTable) есть еще в JavaFX, но он планируется в восьмерке, а она еще не выпущена. В тоже время Outline уже готова и ею многие используют. Тестировал приблизительно на древо-таблицах суммарно с 70 столбцами x 1000 строк с глубиной дерева в три уровня.
Отрисовка заметно не тормозила, скроллирование плавное. Наблюдались небольшие проблемы с отображением выделенных строк при скроллировании, после переписывания рендерера проблема исчезла.
3. Компонент PropertySheet — готовый “из коробки” компонент для редактирования бинов (JavaBean).
4. Важно сразу понять и прочитать про TopComponent, Lookup, а также про остальные ключевые компоненты (они приведены в шпаргалке от DZone).
5. Последний совет – набраться терпения. API довольно богатое, много своих концепций и подходов.