Подтвердить что ты не робот

Хранители времени Java

Я нахожу характер этого вопроса вполне подходящим для практических людей в переполнении стека.

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

Я пишу, чтобы спросить вас, какие ярлыки, о которых я, возможно, не думаю, помогут со сложным проектом на Java. Конечно, я планирую пойти на него в Eclipse и, вероятно, использовать SWT для графического интерфейса. Тем не менее, я знаю, что у Java есть, к сожалению, качество перенапряжения всего, и я не хочу застревать.

Прежде чем вы скажете мне, что я хочу сделать это на Python или тому подобное, я просто хочу повторить, почему я бы выбрал Java:

  • Больше опыта с алгоритмами в Java, и их будет немного.
  • Хотите расширить библиотеку API для расширения функциональности. ANTLR, базы данных, библиотеки для работы с определенными форматами.
  • Хотите запустить его в любом месте с достойной производительностью

    Я открыт для всех технологий (большинство из них знакомы с Java, perl, sql, немного функциональными).

EDIT. На данный момент я даю его djna (хотя и низкие голоса). Я думаю, что все ваши ответы определенно полезны в некотором отношении.

Я думаю, что djna поражает все, что мне нужно, чтобы следить за новичком-программистом, признавая, что я не принимаю ярлыки, а стараюсь не испортить. Что касается предложений больших рамок, особенно. J2EE, это слишком много в этой ситуации. Я пытаюсь предложить самое простое решение, и тот, в котором мой API может быть расширен кем-то, кто не является экспертом J2EE/JDBC.

Спасибо, что подняли Apache Commons, хотя я уже знал. Все еще запутался в SWT против Swing, но каждая программа Swing, которую я использовал, была уродливой. Как я уже упоминал в сообщении, мне захочется больше всего сосредоточиться на обмене файлами и ограниченных функциях БД, которые я должен реализовать сам (но буду осторожен - я знаю проблемы concurrency и ACID).

Еще одна вики сообщества для улучшения.

4b9b3361

Ответ 1

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

1). Разложение и разделение проблем. Вы уже определили куски высокого уровня (пользовательский интерфейс, уровень сохранения, парсер и т.д.). Определите интерфейсы для классов провайдера как можно скорее, и все зависимые классы работают против этих интерфейсов. Обращайте большое внимание на удобство использования этих интерфейсов, чтобы их было легко понять, - имеет значение вопрос. Даже что-то такое же простое, как разница между setShutdownFlag (true) и requestShutdown(), вторая имеет явный смысл и, следовательно, я предпочитаю его.

Преимущества: Простота обслуживания. Даже во время начального развития происходит "обслуживание". Вы захотите изменить код, который вы уже написали. Упростите это, убедившись в сильной инкапсуляции.

2). Ожидайте итеративного развития, чтобы уточнить и перепроектировать. Не ожидайте "закончить" какой-либо один компонент в изоляции, прежде чем использовать его. Другими словами, вы не берете чисто подход к разработке ваших компонентов. По мере их использования вы узнаете больше информации, так как вы их реализуете, вы узнаете больше о том, что возможно.

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

3). Тест рано, часто проверяйте. Используйте JUnit (или эквивалент). У вас есть издевательства над компонентами вашего низкого уровня, чтобы вы могли их протестировать.

Субъективно, я чувствую, что лучше писать код, когда у меня есть "тестовая шляпа".

4). Определите стратегию обработки ошибок спереди. Обеспечьте хорошую диагностику при обнаружении ошибок.

Преимущества: намного легче получить ошибки.

5). Следуя обработке ошибок - используйте диагональные отладочные операторы. Посыпать их либерально во всем коде. Не используйте System.out.println(), вместо этого используйте средства отладки вашей библиотеки ведения журнала - используйте java.util.logging. Интерактивные отладчики полезны, но не единственный способ анализа проблем.

Ответ 2

Изучите/используйте Spring и создайте свой проект, чтобы он работал без конфигурации Spring (эти вещи, как правило, работают вне контроля), сохраняя при этом возможность настройки параметров вашей среды на более позднем этапе. Вы также получаете единый способ интеграции других фреймворков, таких как Hibernate, Quartz,...

И, по моему опыту, держаться подальше от разработчиков GUI. Это может показаться неплохим, но мне нравится постоянно контролировать мой код.

Ответ 4

Apache Commons имеет много времени, экономящий код, который вам, скорее всего, понадобится и сможет повторно использовать.

http://commons.apache.org/

Ответ 5

  • Joda Time для всех манипуляций даты и времени.

  • Один из Hibernate или iBATIS для управления данными в базе данных

  • Не забудьте IDE: Eclipse, Netbeans или IDEA, если у вас есть наличные и как это

Ответ 6

Разумная платформа построения и конфигурации поможет вам в этом, Ant:

http://ant.apache.org/

или Maven (предпочтительно):

http://maven.apache.org/

Тем более, что размер проекта и количество модулей в проекте увеличиваются.

Ответ 7

Не скидывайте Swing для графического интерфейса. Существует много хороших сторонних библиотек Swing (с открытым исходным кодом и коммерческих) в зависимости от ваших потребностей, например.

Ответ 8

Используйте фреймворк регистрации (т.е. Log4J) и планируйте его. Надежная система каротажа экономит много времени при исправлении ошибок.

Ответ 9

Для меня большие сбережения времени:

  • использовать управление версиями (Subversion/ Git)
  • использовать автоматические сборки (Ant/Make/Maven)
  • использование непрерывной интеграции (Hudson/CruiseControl)
  • apache-commons-libraries очень полезны

Ответ 10

Разработка, управляемая тестированием

Выясните функциональность, которую вы хотите, и напишите тесты, чтобы продемонстрировать функциональность. Затем напишите достаточно кода для прохождения тестов. Это будет иметь большие побочные эффекты:

  • Написав достаточно кода, чтобы удовлетворить ваши требования, вы не соблазнитесь перестройкой, что должно уменьшить сложность и сделать ваш код более чистым.
  • Тестирование позволит вам "реорганизовать с уверенностью" и внести изменения в код, зная, что вы не нарушаете другую часть системы.
  • Вы строите качество. Не только у вас есть уверенность в том, что вы кодируете "работает", но если вы действительно хотите использовать этот код как своего рода "резюме" для потенциальных работодателей, это покажет им, что вы размещаете много ценности по качеству кода. Это само по себе выделит вас отдельно от большинства разработчиков.

Кроме того, я согласен с тем, что другие большие вкладчики Spring, имеющие автоматическую сборку (Maven) и использующие какую-либо форму управления версиями.

Ответ 11

Для сохранения данных, если вы не уверены, что вы должны использовать SQL, вы должны взглянуть на альтернативные библиотеки хранения данных:

  • Prevayler: в системах баз данных памяти, используя такие идеи, как "только компоненты сбоя", которые делают его простым в использовании и очень реалистичным. Может использоваться даже для простых приложений, где вам просто нужно сохранить состояние. Он имеет лицензию BSD.
  • BerkleyDB Java Edition: система хранения с различными уровнями абстракции, поэтому ее можно использовать как базовое хранилище ключей (почти хэш-таблицу на диске) для полностью транзакционной системы ACID. Взгляните на информацию о лицензировании, потому что даже какое-то коммерческое программное обеспечение может использовать ее бесплатно.

Имейте в виду, что они имеют компромиссы по сравнению друг с другом или со стандартной базой данных SQL! И, конечно, вокруг могут быть и другие подобные варианты, но это те, которые я знаю и люблю.:)

PS: Мне не разрешалось публиковать соответствующие ссылки, потому что я новый пользователь. Просто Google для них; первые хиты являются правильными.

Ответ 12

Вы можете сэкономить время между перезапусками, используя JavaRebel (коммерческий). Вкратце, этот инструмент позволяет вам писать свой код в Eclipse и мгновенно получать изменения кода.

Ответ 13

Spring Roo может не только быстро запустить ваш проект (используя звуковую архитектуру), но и сократить текущее обслуживание. Если вы думаете использовать Spring, сервлеты и/или JPA, вы должны обязательно их рассмотреть. Он также легко накладывается на такие вещи, как безопасность.