Действительно ли использование Java является надлежащим языком/платформой для разработки основанного на GUI приложения учета?

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

Я надеюсь разрабатывать приложение учета, предназначенное для определенного сегмента рынка (думайте Quickbooks, но настроил). Большая часть приложения будет доступными для редактирования таблицами, которые связаны с данными DB и некоторым основным созданием отчетов и графической функциональностью.

Это должно быть межплатформенным (OS X и Windows).

Это будет взаимодействовать через интерфейс с локальным DB. (SQLite или Derby или безотносительно)

Скорость не является "огромной" проблемой. Это должно быть довольно быстро реагирующим (я не знаком со скоростью Java по сравнению с C/C++).

Я сузил его действительно к между C++ с QT и Java. Я только знаю очень мало суммы Java, но работу с C++ регулярно. Однако Java до сих пор появляется к лучшему полному решению, и сумма книг/документации огромна, который является плюс.

  1. Насколько легкий интеграция с GUI Java и DB? NetBeans делает этот процесс легким, или я должен использовать Eclipse вместо этого? Я ищу опыт, подобный C# с Visual Studio.
  2. Является целое "Большое Десятичное" округление проблемы в Java главной проблемой, или действительно ли легко работать вокруг? (извините, если я звучу необразованным по теме, но я действительно не знаком с Java),
  3. Есть ли какой-либо реальный showstopper с Java, о котором я не могу думать здесь или никакая реальная веская причина, я должен использовать C++ с QT по нему?
  4. Если я в конечном счете хотел портировать некоторых или все это к сети, Java на рабочем столе помогают портированию позже?
10
задан Awaken 5 February 2010 в 18:17
поделиться

13 ответов

Первое, что я должен сказать, это «здесь нет правильного ответа».

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

В Java также есть отличная структура подключения к БД. С помощью инструментов объектно-реляционного сопоставления (ORM) (Hibernate и др.) Довольно легко получить данные из БД, поместить их в объекты, манипулировать ими и вернуть их в базу данных. Инструменты ORM также упрощают подключение объектов данных непосредственно к графическому интерфейсу пользователя и использование правил в этих объектах для защиты данных от повреждения.

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

10
ответ дан 3 December 2019 в 14:34
поделиться

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

Если вы не знаете Java, вы также можете попробовать Mono. Вы можете создавать с его помощью приложения WindowsForms и запускать их как на Mac, так и на Windows, или если вы идете по веб-маршруту и ​​используете ASP.NET в Mono. Я все еще думаю, что RubyOnRails даст вам более короткое время разработки, чем ASP.NET, но это вариант.

0
ответ дан 3 December 2019 в 14:34
поделиться

Что ж, если вы хорошо знаете C ++, то это причина номер один, чтобы использовать его. QT - очень хороший инструментарий, и вы будете работать с ним гораздо продуктивнее, чем с Java (как вы хорошо знаете C ++). Кроме того, благодаря этому опыту у вас больше шансов сделать приложение лучше.

Так что, если вы не отчаянно хотите получить опыт работы с Java (а в настоящее время это уже не такой большой плюс, как раньше), придерживайтесь C ++ / QT и развивайте некоторые кроссплатформенные навыки.

Лично, если бы я собирался создать новое приложение с нуля и хотел бы узнать что-то новое, это было бы веб-приложение с некоторыми новыми полезностями HTML5 / js. Причудливые веб-функции, скорее всего, станут будущим для приложений, а не для толстых клиентов для настольных ПК (и будут удобны для большего количества мобильных платформ).

1
ответ дан 3 December 2019 в 14:34
поделиться

Если вам нужна кроссплатформенность, Java - неплохой вариант.

Помните, что для целей бухгалтерского учета используйте тип данных, подходящий для сумм. Double / Reals / Floats и т. Д. По сути представляют числа, такие как двоичная дробь, умноженная на показатель степени, что приводит к ошибкам округления. Сообщается, что для Java BigDecimal работает хорошо.

1
ответ дан 3 December 2019 в 14:34
поделиться

Возможно, это вас заинтересует

Ajaxswing

, хотя я хотел бы, чтобы другие заявили, что разработали его с нуля как веб-приложение.

1
ответ дан 3 December 2019 в 14:34
поделиться

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

EDIT: Скорость не является проблемой, и вы думаете, что вам может понадобиться перенести его в Интернет? Начните работать в интернете и избавите себя от головной боли.

2
ответ дан 3 December 2019 в 14:34
поделиться
  1. Все, что угодно с бобами в названии, я бы избегал, но java отлично работает с DB и GUI.
  2. Я не уверен, что ты имеешь в виду, но, возможно, ты захочешь сделать свой собственный класс с деньгами. Вряд ли это много работы, и тогда он будет крутиться в точности так, как ты захочешь.
  3. На самом деле гораздо приятнее работать на Java, чем на C++, но если у вас действительно сложный GUI, то Java GUI проще использовать, чем большинство приложений на C++ для одних вещей, но труднее для других.
  4. Не совсем.
2
ответ дан 3 December 2019 в 14:34
поделиться
  1. Я не знаком с Netbeans, но я сделал несколько приложений Java с доступом к базе данных . Мне это показалось довольно простым, даже когда я использовал gvim вместо IDE.
  2. О какой проблеме "большого десятичного числа" вы говорите? У всех компьютерных языков есть проблемы с отображением между двоичным и десятичным числами, но если вы знаете, что делаете, вы можете справиться с этим независимо от языка. Черт, я делал инженерные приложения на FORTRAN-H.
  3. Помимо того факта, что вы лучше знаете C ++, нет никаких причин не использовать Java. Он хорошо соответствует вашим требованиям.
  4. Написание чего-то, что в конечном итоге может быть перенесено в Интернет, - это скорее вопрос использования шаблонов модель-представление-контроллер и помните, что ваше представление может в конечном итоге оказаться чем-то совершенно другим. Это скорее философия дизайна, чем языковые требования.
5
ответ дан 3 December 2019 в 14:34
поделиться

Чтобы ответить на вопрос 2, с Java может быть немного неудобно. числа с плавающей запятой, но в версиях 1.5 и 1.6 он стал намного лучше. Если вы все же пойдете по пути Java, убедитесь, что у вас самая последняя доступная версия.

Затронутые проблемы довольно хорошо объяснены в этой статье: http://www.ibm.com/developerworks/java/library/j-math2.html .

0
ответ дан 3 December 2019 в 14:34
поделиться

Я бы предложил Groovy, а не Java. Это своего рода Java++, в том, что почти все в Java также в Groovy, но Groovy предоставляет ряд преимуществ в дополнение к этому. Язык Groovy предоставляет ряд вспомогательных методов. Правильно выполняет математику по умолчанию (нет двойных математических задач).

Что касается web vs desktop, вы можете использовать Grails для web и Griffon для desktop. Опять же, Гроовый базируется.

Для IDE, если вы выбираете Groovy, то либо IntelliJ (хотя для работы в Интернете, это дорого), либо SpringSource Tool Suite, который является производной Eclipse. В основном Eclipse с рядом плагинов, включая Groovy.

-121--3049985-

Когда я добавляю строку динамически, я использую insertRowsAtIndexPaths: вот пример функции

- (void) allServersFound {
    // called from delegate when bonjourservices has listings of machines:
    bonjourMachines = [bonjourService foundServers]; // NSArray of machine names;

    NSMutableArray *tempArray = [[NSMutableArray alloc] init];

    int i = 0;
    for (NSArray *count in bonjourMachines) {
        [tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]];
    }

    [[self tableView] beginUpdates];
    [[self tableView] insertRowsAtIndexPaths:(NSArray *)tempArray withRowAnimation:UITableViewRowAnimationNone];
    [[self tableView] endUpdates];

    [tempArray release];
}
-121--4180713-

Я бы определенно рекомендовал использовать C++ и Qt. Особенно при использовании Qt Creator или Qt Designer для создания макета пользовательского интерфейса.

Если вам нужно или вы действительно хотите использовать Java (или язык JVM), я бы использовал Qt Jambi. В любом случае Qt является (IMHO) намного превосходящей платформой независимо от используемого языка. Если бы вы раньше не занимались разработкой Swing или SWT, я бы дал вам два часа, прежде чем вы почувствуете, что едите пулю.

0
ответ дан 3 December 2019 в 14:34
поделиться

Я бы посоветовал Groovy, а не Java. Это своего рода Java ++, поскольку почти все в Java также находится на Groovy, но Groovy предоставляет помимо этого ряд преимуществ. Язык Groovy предоставляет ряд вспомогательных методов. По умолчанию вычисляет правильно (нет проблем с двойной математикой).

Что касается Интернета и рабочего стола, вы можете выбрать Grails для Интернета и Griffon для рабочего стола. Опять же, на основе Groovy.

Для IDE, если вы выберете Groovy, то либо IntelliJ (хотя для работы в Интернете это дорого), либо SpringSource Tool Suite, который является производным от Eclipse. В основном Eclipse с рядом плагинов, включая Groovy.

2
ответ дан 3 December 2019 в 14:34
поделиться

Когда я добавляю строку динамически, я использую insertRowsAtIndexPaths: вот пример функции

- (void) allServersFound {
    // called from delegate when bonjourservices has listings of machines:
    bonjourMachines = [bonjourService foundServers]; // NSArray of machine names;

    NSMutableArray *tempArray = [[NSMutableArray alloc] init];

    int i = 0;
    for (NSArray *count in bonjourMachines) {
        [tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]];
    }

    [[self tableView] beginUpdates];
    [[self tableView] insertRowsAtIndexPaths:(NSArray *)tempArray withRowAnimation:UITableViewRowAnimationNone];
    [[self tableView] endUpdates];

    [tempArray release];
}
-121--4180713-

Еще один метод использует инструкцию LOOP:

mov  cx, 3

myloop:
    ; Your loop content

    loop myloop

Команда цикла автоматически уменьшает cx и переходит только в том случае, если cx! = 0. Существуют также варианты LOOPE и LOOPNE, если требуется выполнить дополнительную проверку для раннего завершения цикла.

Если вы хотите изменить cx во время цикла, обязательно поместите его в стек перед контентом цикла и выскочите после:

mov  cx, 3

myloop:
    push cx
    ; Your loop content
    pop  cx

    loop myloop
-121--1732648-

Очевидно, что нет одного решения, но есть pro's и недостатки для обоих решений, и даже есть третье решение: Java с Qt.

Во-первых, мой опыт работы с C++ и Qt уже несколько лет, так что может быть не так точно, и мой интерес к разработке Java GUI закончился один или два года назад, когда я увидел инструменты для разработки. Обычно я работаю на Java, но не с Swing.

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

Что касается разработки графического интерфейса пользователя, инструменты Qt были очень хорошими и стали только лучше. Рамка также очень близко соответствует процессу GUI и естественно подходит для такого рода работы. Свинг кажется немного более низким уровнем и требовал значительного количества кода шаблона. И я не знаю никаких действительно хороших инструментов развития сам, хотя я слышал хорошие вещи мантисс.

Если вы считаете, что Java - это способ развертывания или бэкэнд-логики, но инструменты GUI для Qt слишком хороши, чтобы их игнорировать, проверьте вопрос stackoverflow о Java Swing или Java Qt . Стоит почитать.

В вашем конкретном случае я бы пошел с C + +/Qt, как у вас есть опыт работы с C++, и не все это тривиально, чтобы правильно построить приложение Java Swing.

7
ответ дан 3 December 2019 в 14:34
поделиться

Я разрабатываю инструмент с графическим интерфейсом пользователя на Java с использованием NetBeans, и пока у меня не было проблем. Не полагайтесь полностью на редактор графического интерфейса NetBeans, я использую его только для создания диалоговых окон и панелей. Я испытал, что если вы пойдете по пути MVC, станет намного проще использовать редактор графического интерфейса NetBeans. После этого вы можете полностью оставить конструктивную часть NetBeans. Посмотрите новую демонстрацию SwingSet3 и решите, хватит ли вам элементов управления Java Swing (с точки зрения внешнего вида и доступных элементов управления GUI). Также обратите внимание на компоненты SwingX , некоторые из них действительно потрясающие и хорошо выглядят, такие как ShadowBorder, TitlePanel и т. Д. Я определенно предлагаю вам использовать JXTable для ваших таблиц вместо JTable. Учитывая популярность Java, я не думаю, что проблема BigDecimal еще не решена. Что касается БД, Java поставляется в комплекте с собственной полной функцией JavaDB , которая действительно имеет небольшой размер - всего 2,5 МБ. Это пригодится, если вы не хотите устанавливать тяжелые СУБД, такие как MySQL. Это также будет еще один уровень абстракции. IMHO - ваши клиенты вряд ли увидят использование какой-либо внешней БД. Никогда не обманывайтесь тем, что переносимость означает, что ваше программное обеспечение Java будет автоматически работать на разных платформах. Это определенно потребует дополнительных усилий, но если вы поработаете над своим первоначальным дизайном и создадите свое программное обеспечение, сохраняя различные платформы (не только ОС, но и настольный компьютер / веб и т. Д.) На затылке, его будет легко немного подправить. немного, чтобы сделать его полностью портативным. Пойдите по пути MVC, это не повредит. Мои 2 цента.

2
ответ дан 3 December 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: