2010-02-05 7 views
10

Wiem, że jest to częściowo subiektywne, ale mam nadzieję, że z wystarczającą szczegółowością mogę uzyskać dobrą odpowiedź.Czy używanie języka Java jest odpowiednim językiem/platformą do tworzenia aplikacji księgowej opartej na interfejsie graficznym?

Szukam opracowania aplikacji księgowej ukierunkowanej na konkretny segment rynku (pomyśl Quickbooks, ale ulepszona). Większość aplikacji to edytowalne tabele powiązane z danymi DB oraz podstawowe funkcje raportowania i grafiki.

Musi być wieloplatformowy (OS X i Windows).

Będzie współpracować z lokalną bazą danych. (SQLite lub Derby lub cokolwiek innego)

Prędkość nie jest problemem "ogromnym". Musi być rozsądnie responsywny (nie znam prędkości Java w porównaniu z C/C++).

Zawęziłem to naprawdę między C++ z QT i Javą. Znam tylko bardzo małą ilość Javy, ale regularnie pracuję z C++. Jednak Java do tej pory wydaje się najlepszym ogólnym rozwiązaniem, a ilość książek/dokumentacji jest ogromna, co jest plusem.

  1. Jak łatwa jest integracja z Java GUI i DB? Czy NetBeans ułatwia ten proces, czy też powinienem używać Eclipse? Szukam doświadczenia podobnego do C# z Visual Studio.
  2. Czy cały problem z zaokrąglaniem "Dużego dziesiętnego" w Javie jest poważnym problemem, czy też łatwo go obejść? (Przepraszam, jeśli brzmi to niewykształcone na ten temat, ale ja naprawdę nie jestem zaznajomiony z Javą)
  3. Czy jest jakikolwiek prawdziwy showstopper z Javą, o którym może nie myślę tutaj lub z jakiegokolwiek mocnego powodu powinienem używać C++ z QT nad nim ?
  4. Jeśli ostatecznie chciałbym przenieść część lub całość do internetu, czy Java na pulpicie ułatwia późniejsze przenoszenie?

Odpowiedz

10

Pierwszą rzeczą, którą powinienem powiedzieć jest "tutaj nie ma właściwej odpowiedzi".

Java może zrobić dokładnie to, co chcesz. Zestaw narzędzi GUI, po latach przeróbek, jest bardzo zaawansowany.Istnieje również wiele narzędzi, frameworków i rozszerzeń, których możesz użyć, aby wygląd interfejsu był bardzo zaawansowany.

Java ma również doskonałą strukturę połączenia DB. Z narzędziami mapowania relacyjnych obiektów (ORM) (Hibernate i inne) bardzo łatwo jest pobrać dane z bazy danych, umieścić je w obiektach, manipulować nimi i umieścić z powrotem w bazie danych. Narzędzia ORM umożliwiają także łatwe łączenie obiektów danych bezpośrednio z GUI i używanie reguł w tych obiektach w celu ochrony danych przed uszkodzeniem.

Obsługa wielu platform bardzo ci pomoże. Jedynym istotnym problemem jest to, że pliki Java mają środowisko wykonawcze Java na komputerze. Są na to różne sposoby (najlepiej, gdy instalator umieści to tam).

5
  1. Nie jestem zaznajomiony z Netbeans, ale zrobiłem kilka aplikacji Java z dostępem do bazy danych. Znalazłem to całkiem łatwo, nawet gdy używałem gvim zamiast IDE.
  2. O czym mówisz w kwestii "Big Decimal"? Wszystkie języki komputerowe mają problemy z mapowaniem między binarnymi i dziesiętnymi, ale jeśli wiesz, co robisz, możesz sobie z tym poradzić bez względu na język. Do diabła, robiłem aplikacje inżynierskie w FORTRAN-H.
  3. Poza tym, że znasz C++ lepiej, nie ma powodu, aby nie używać Javy. Dobrze pasuje do twoich wymagań.
  4. Pisanie czegoś, aby w końcu mogło zostać przeniesione do sieci, jest bardziej kwestią upewnienia się, że używasz wzorców Model-View-Controller i pamiętaj, że Twój Widok może być czymś zupełnie innym. To raczej filozofia projektowania niż wymagania językowe.
+0

Jeśli chodzi o # 2, to, o czym mówię, jest po prostu podwójną kwestią, o której czytam. - http://www.javaranch.com/journal/2003/07/MoneyInJava.html – Awaken

+1

Każdy język ma takie same problemy z liczbami zmiennoprzecinkowymi. BigDecimal to rozwiązanie, a nie problem. –

1

Jeśli potrzebujesz wieloplatformowej aplikacji Java, to całkiem niezły zakład.

Zapamiętaj dla celów księgowych, użyj typu odpowiedniego dla kwot. Double/Reals/Floats itd. Wszystkie zasadniczo reprezentują liczby takie jak ułamek binarny pomnożony przez wykładnik, powodując błędy zaokrąglania. Zdarza się, że Java BigDecimal działa dobrze.

2
  1. Wszystko z fasolą w tytule, którego chciałbym uniknąć, ale java działa świetnie z DB i GUI.
  2. Nie jestem pewien, co masz na myśli, ale możesz chcieć stworzyć własną klasę pieniędzy. Prawie nie podoba się, że to dużo pracy, a potem będzie dokładnie tak, jak chcesz.
  3. To jest znacznie bardziej prawdopodobne, że faktycznie działa poprawnie w Javie niż w C++, ale jeśli masz naprawdę skomplikowany GUI, to rzeczy w języku Java GUI są łatwiejsze w użyciu niż większość aplikacji w C++, ale są trudniejsze dla innych.
  4. Niezupełnie.
+3

NetBeans nie ma nic wspólnego z JavaBeans. Jest to jeden z najlepszych dostępnych IDE Java. –

2

Brak współbieżności? Jest tylko w lokalnej bazie danych? Uważam, że to zaskakująco ograniczające dla nowego projektu oprogramowania. Jestem zaskoczony, że nie myślisz o GUI przeglądarki AJAX z zapleczem sieciowym.

EDYCJA: Prędkość nie jest problemem i uważasz, że może być konieczne przeniesienie jej do sieci? Zacznij w sieci i zaoszczędź sobie wielu bólów głowy.

+0

+1, aplikacja internetowa nie różni się znacząco pod względem złożoności w aplikacji Swing. Nie ma sensu robić obu tych rzeczy. – Pool

+0

To, co mówisz, zdecydowanie ma sens. Zacząłem myśleć o rozwiązaniu PHP/JavaScript/MySQL, ale świat internetu jest o krok dalej od moich obszarów wiedzy, szczególnie AJAX i zaplecza serwisów internetowych. Bezpieczeństwo nie jest czymś, co znam i z punktu widzenia rozwoju, łatwiej mi teraz pracować nad wersją komputerową (obecna sytuacja w pracy i czasie). Pomyślę o tym więcej. – Awaken

+0

Ostatnie 2 aplikacje "Swing" zostały zaprojektowane jako hybrydowe: klient Swing rozmawia z serwerami SOA/serwerami. Znacznie ułatwia przesyłanie do internetu. Zdecydowanie zaplanuj to w swojej architekturze, nawet jeśli nie napiszesz "webowego" interfejsu użytkownika. – Kylar

1

to może zainteresuje

Ajaxswing

chociaż chciałbym innych podanych rozwijać go od podstaw jako aplikacja internetowa.

2

Proponuję raczej Groovy niż Java. Jest to Java ++, ponieważ prawie wszystko w Javie jest również w Groovy, ale Groovy zapewnia wiele korzyści. Język Groovy udostępnia wiele metod pomocniczych. Czy matematyka poprawnie domyślnie (brak problemów z podwójną matematyką).

Jeśli chodzi o web vs desktop, można iść z Grails dla sieci i Griffon na pulpicie. Ponownie, oparty na Groovy.

Dla IDE, jeśli wybierzesz Groovy, to albo IntelliJ (chociaż zrobić web, to jest drogie), albo SpringSource Tool Suite, który jest pochodną Eclipse. Zasadniczo Eclipse z wieloma wtyczkami, w tym Groovy.

+0

Pytanie wydaje się koncentrować na rozwoju GUI. Czy groovy ma zalety w GUI Java? – extraneon

+0

Nie. To samo, ponieważ Groovy może używać wszystkich tych samych bibliotek. Szkielet gry Griffon wygląda interesująco, ponieważ uważam, że jest to owinięcie wokół SWT, więc może to być zaletą. Po prostu stwierdzam, że chcecie nauczyć się nowego języka, dlaczego nie nauczyć się bardziej wydajnego i bardziej produktywnego ... – Mikezx6r

+0

Griffon jest głównie otoką wokół Swinga, ponieważ domyślnie obsługuje ten zestaw narzędzi. Jednak jeśli obsługuje również SWT i JavaFX, jeśli zainstalujesz odpowiednie wtyczki. – aalmiray

0

Zdecydowanie polecam iść z C++ i Qt. Zwłaszcza jeśli używasz Qt Creator lub Qt Designer do tworzenia układu interfejsu użytkownika.

Jeśli potrzebujesz lub naprawdę chcesz używać Javy (lub języka JVM), użyłbym Qt Jambi. Tak czy inaczej, Qt jest (IMHO) znacznie lepszą platformą, niezależnie od używanego języka. Jeśli wcześniej nie pracowałeś nad Swingiem lub SWT, dałbym ci około dwóch godzin, zanim poczujesz się jak jedzenie kuli.

7

Oczywiście nie ma jednego rozwiązania, ale oba rozwiązania mają swoje zalety i wady. Istnieje nawet trzecie rozwiązanie: Java z Qt.

Po pierwsze, moje doświadczenie z C++ i Qt ma już kilka lat, więc może nie być aż tak dokładne, a moje zainteresowanie rozwojem graficznym java zakończyło się rok czy dwa lata temu, kiedy zobaczyłem narzędzia do programowania. Zwykle pracuję w Javie, ale nie w Swingu.

Mimo to, główną różnicą między Javą i C++ wydaje się być wdrożenie. Java jest zawsze zależna od zainstalowanego środowiska Java, a C++ jest nieco bardziej samodzielny. W tym względzie dałbym niewielką preferencję C++, jeśli można zarządzać wdrożeniem na dwóch platformach.

Jeśli chodzi o rozwój GUI, narzędzia Qt były bardzo dobre i stały się lepsze. Struktura również bardzo ściśle dopasowuje się do GUI i jest naturalnie dopasowana do tego rodzaju pracy. Swing wydaje się być nieco bardziej niski i wymagał dużej ilości kodu. I nie znam żadnych naprawdę dobrych narzędzi programistycznych, chociaż słyszałem dobre rzeczy z mantisse.

Jeśli uważasz, że Java jest sposobem na wdrożenie lub logikę wewnętrzną, ale narzędzia GUI dla Qt są zbyt dobre, aby je zignorować, sprawdź pytanie dotyczące stackoverflow dotyczące Java Swing or Java Qt. Warto przeczytać.

W twoim konkretnym przypadku użyłbym C++/Qt, ponieważ masz doświadczenie z C++ i nie jest wcale tak proste, aby poprawnie zbudować aplikację Java Swing.

1

Cóż, jeśli dobrze znasz C++, to jest to najważniejszy powód, dla którego warto go używać. QT to bardzo fajny zestaw narzędzi, a będziesz o wiele bardziej produktywny niż w Javie (jak dobrze znasz C++). Również szanse na lepszą aplikację są większe dzięki temu doświadczeniu.

Tak więc, chyba że jesteś zdesperowany, aby zdobyć doświadczenie z Javą (a obecnie nie jest to już tak duży jak kiedyś), trzymaj się C++/QT i buduj umiejętności międzyplatformowe.

Osobiście, gdy chciałem uzyskać nową aplikację od zera, a chciałem się czegoś nauczyć, to byłaby to aplikacja internetowa z nowymi gadżetami HTML5/js. Fantazyjne funkcje internetowe są bardziej prawdopodobne w przyszłości dla aplikacji na grubych komputerach klienckich (i przyjaznych na bardziej mobilnych platformach).

2

Zajmuję się tworzeniem narzędzia GUI w Javie przy użyciu NetBeans i nie miałem żadnych problemów do tej pory. Nie polegaj całkowicie na edytorze GUI NetBeans, używam go tylko do projektowania moich okien dialogowych i paneli. Doświadczyłem, że jeśli pójdziesz drogą MVC, znacznie łatwiej będzie użyć edytora GUI NetBeans. Możesz wtedy całkowicie opuścić projektant na NetBeans. Zajrzyj do nowego SwingSet3 demo i zdecyduj, czy formanty Java Swing będą dla ciebie wystarczające (pod względem wyglądu i dostępnych kontrolek GUI). Spójrz też na SwingX components niektóre z nich są naprawdę niesamowite i dobrze wyglądające, takie jak ShadowBorder, TitlePanel itd. Zdecydowanie polecam używanie JXTable do twoich stołów zamiast JTable. Biorąc pod uwagę popularność Java, nie sądzę, że problem BigDecimal nie został rozwiązany. Jeśli chodzi o DB, Java jest dostarczana w pakiecie z własną funkcją kompletną JavaDB, która jest naprawdę niewielka - zaledwie 2,5 MB. To przyda się, jeśli nie chcesz instalować ciężkich systemów DBMS, takich jak MySQL. Będzie to również kolejny poziom abstrakcji IMHO - Twoi klienci prawie nie zobaczą zewnętrznej DB. Nigdy nie daj się oszukać, że przenośne oznacza, że ​​Twoje oprogramowanie Java będzie działać automatycznie na różnych platformach. Z pewnością będzie to wymagało trochę więcej wysiłku, ale jeśli pracujesz nad swoim początkowym projektem i tworzysz oprogramowanie utrzymujące różne platformy (nie tylko system operacyjny, ale komputer/sieć itp.) Z tyłu głowy, będzie to łatwe do dostosowania. trochę, aby był całkowicie przenośny. Przejdź drogę MVC, nie zaszkodzi. Moje 2 centy.

0

Aby odpowiedzieć na pytanie 2, Java może być trochę kłopotliwa przy odliczaniu liczb zmiennoprzecinkowych, ale uzyskała znacznie lepsze wyniki od wersji 1.5 i 1.6. Jeśli przejdziesz ścieżkę Java, upewnij się, że masz najnowszą dostępną wersję.

Kwestie, o których mowa, wyjaśniono dość dobrze w tym artykule: http://www.ibm.com/developerworks/java/library/j-math2.html.

0

Jak niektórzy inni zauważyli, aplikacja internetowa może działać poprawnie. Myślę, że RubyOnRails jest bardzo produktywny i można go uruchomić na JRuby na obu platformach lub z natywną Ruby. Musiałbyś zajrzeć do bezpieczeństwa, ale nie powinien to być duży problem.

Jeśli nie znasz Javy, możesz również sprawdzić Mono. Możesz tworzyć z nim aplikacje WindowsForms i uruchamiać je na komputerach Mac i Windows, lub jeździć po trasie internetowej i korzystać z ASP.NET w Mono. Nadal uważam, że RubyOnRails da ci krótszy czas rozwoju niż ASP.NET, ale jest to opcja.