2010-02-05 10 views
10

So che questo è parzialmente soggettivo, ma si spera che con sufficienti dettagli riesca a ottenere una buona risposta.Utilizza Java la lingua/piattaforma appropriata per lo sviluppo di un'app per la contabilità basata su GUI?

Sto cercando di sviluppare un'app per la contabilità destinata a uno specifico segmento di mercato (pensa Quickbooks, ma ottimizzato). La maggior parte delle app sarà costituita da tabelle modificabili collegate a dati DB e alcune funzionalità di reporting e grafica di base.

Deve essere multipiattaforma (OS X e Windows).

Interfaccia con un DB locale. (SQLite o Derby o altro)

La velocità non è un problema "enorme". Deve essere ragionevolmente reattivo (non ho familiarità con la velocità di Java rispetto a C/C++).

L'ho ristretto davvero tra C++ con QT e Java. Conosco solo una piccola quantità di Java, ma lavoro regolarmente con C++. Tuttavia, Java finora sembra la migliore soluzione complessiva e la quantità di libri/documentazione è enorme, il che è un vantaggio.

  1. Quanto è semplice l'integrazione con GUI e DB di Java? NetBeans semplifica questo processo o dovrei usare Eclipse? Sto cercando un'esperienza simile a C# con Visual Studio.
  2. L'intero problema di arrotondamento "Big Decimal" in Java è un grosso problema o è facile da aggirare? (scusate se non sono istruito sull'argomento, ma non ho molta dimestichezza con Java)
  3. C'è qualche vero rompicapo con Java a cui forse non sto pensando o un vero motivo per cui dovrei usare C++ con QT su di esso ?
  4. Se alla fine volevo portarlo sul web o parte di esso, Java sul desktop rende più facile il porting in seguito?

risposta

10

La prima cosa che dovrei dire è "non c'è una risposta giusta qui".

Java può fare esattamente quello che vuoi. Il toolkit GUI, dopo anni di rielaborazione, è molto avanzato.Ci sono anche molti strumenti, framework ed estensioni che puoi usare per rendere la GUI molto avanzata.

Java ha anche un ottimo framework di connessione DB. Con gli strumenti Object Relational Mapping (ORM) (Hibernate e altri) è piuttosto semplice ottenere dati da un DB, inserirli in oggetti, manipolarli e reinserirli nel database. Gli strumenti ORM semplificano anche il collegamento degli oggetti dati direttamente alla GUI e utilizzano le regole in questi oggetti per proteggere i dati dalla corruzione.

Il supporto multipiattaforma ti aiuterà molto. L'unico grande punto critico è avere un runtime Java sulla macchina per i file. Ci sono modi per aggirare questo problema (il migliore è avere un installatore messo lì).

5
  1. Non ho familiarità con Netbeans, ma che avevo fatto molte delle applicazioni Java con accesso al database. L'ho trovato abbastanza facile anche quando stavo usando gvim al posto di un IDE.
  2. Di quale problema "Big Decimal" stai parlando? Tutti i linguaggi del computer hanno problemi con la mappatura tra binario e decimale, ma se sai cosa stai facendo puoi occupartene indipendentemente dalla lingua. Diavolo, ho fatto applicazioni di ingegneria in FORTRAN-H.
  3. Oltre al fatto che si conosce meglio C++, non vi è alcun motivo per non utilizzare Java. Si adatta bene alle tue esigenze.
  4. Scrivere qualcosa in modo che possa essere trasferito sul Web è più una questione di assicurarsi di utilizzare i modelli Model-View-Controller e tenere presente che il tuo View potrebbe finire per essere qualcosa di completamente diverso. Questa è una filosofia di design piuttosto che un requisito linguistico.
+0

Per quanto riguarda il n. 2, quello a cui mi riferisco è in realtà solo un doppio problema di cui ho letto. - http://www.javaranch.com/journal/2003/07/MoneyInJava.html – Awaken

+1

Ogni lingua ha gli stessi problemi con i numeri in virgola mobile. BigDecimal è una soluzione, non un problema. –

1

Se avete bisogno di Java multipiattaforma è una buona scommessa.

Ricordare a fini contabili, utilizzare un tipo di dati adatto per gli importi. Double/Reals/Floats ecc rappresentano essenzialmente numeri come una frazione binaria moltiplicata con un esponente, con conseguenti errori di arrotondamento. Per Java BigDecimal è segnalato che funziona bene.

2
  1. Qualsiasi cosa con i fagioli nel titolo eviterei, ma java funziona alla grande con DB e GUI.
  2. Non sono sicuro di cosa intendi, ma potresti voler fare la tua classe di soldi. Difficile che sia un sacco di lavoro, e poi girerà esattamente come vuoi.
  3. È molto più probabile che funzioni correttamente in Java rispetto al C++, ma se hai una GUI molto complicata, la roba della GUI Java è più facile da usare rispetto alla maggior parte delle app C++ per alcune cose ma più difficile per gli altri.
  4. Non proprio.
+3

NetBeans non ha nulla a che fare con JavaBeans. È uno dei migliori IDE Java disponibili. –

2

Nessuna concorrenza? È solo su un database locale? Trovo che sorprendentemente limitando per un nuovo progetto software. Sono sorpreso che tu non stia pensando alla GUI del browser AJAX con il back-end del servizio web.

MODIFICA: la velocità non è un problema e pensi che potrebbe essere necessario portarlo sul Web? Inizia sul web e risparmia un sacco di mal di testa.

+0

+1, un'app Web non è significativamente diversa in termini di complessità per un'applicazione Swing. Non ha senso fare entrambe le cose. – Pool

+0

Quello che dici ha decisamente senso. Ho iniziato a pensare di andare con una soluzione PHP/JavaScript/MySQL, ma il mondo del web è solo un passo più lontano dalle mie aree di conoscenza, in particolare AJAX e back-end web-service. La sicurezza non è qualcosa a cui sono abituato e dal punto di vista dello sviluppo, è più facile per me lavorare su una versione desktop ora (situazione attuale del lavoro e del tempo). Ci penserò di più però. – Awaken

+0

Le ultime 2 app "Swing" che ho fatto sono state progettate come ibride: il client Swing comunica con i backend SOA/Server. Rende molto più facile il porting sul web. Definitivamente pianifichi questo nella tua architettura anche se non scrivi un ui 'web'. – Kylar

1

Questo forse interessare per voi

Ajaxswing

se mi piacerebbe altri indicati svilupparlo da zero come applicazione web.

2

Suggerirei Groovy piuttosto che Java. È una specie di Java ++, in quanto quasi tutto in Java è anche in Groovy, ma Groovy offre molti vantaggi. Il linguaggio Groovy fornisce numerosi metodi di supporto. La matematica è corretta per impostazione predefinita (nessun problema di matematica doppia).

Per quanto riguarda web vs desktop, si potrebbe andare con Grails per il web, e Griffon per desktop. Di nuovo, basato su Groovy.

Per IDE, se si seleziona Groovy, quindi IntelliJ (anche se per fare web, è costoso) o SpringSource Tool Suite, che è una derivata di Eclipse. Fondamentalmente Eclipse con un numero di plugin, incluso Groovy.

+0

La domanda sembra concentrarsi sullo sviluppo della GUI. Groovy ha vantaggi sulla GUI Java? – extraneon

+0

No. È lo stesso, visto che Groovy può usare tutte le stesse librerie. La struttura di Griffon sembra interessante, poiché credo che sia un wrapper attorno al SWT, quindi potrebbe essere un vantaggio. Io immagino solo se imparerai una nuova lingua, perché non impararne una più potente e più produttiva ... – Mikezx6r

+0

Griffon è principalmente un wrapper attorno a Swing, in quanto supporta per impostazione predefinita quel toolkit. Tuttavia se supporta anche SWT e JavaFX se si installano i plugin appropriati. – aalmiray

0

Consiglio vivamente di andare con C++ e Qt. Soprattutto se si utilizza Qt Creator o Qt Designer per il layout dell'interfaccia utente.

Se si desidera o si desidera utilizzare solo Java (o una lingua JVM), utilizzare Qt Jambi. In ogni caso, Qt è (IMHO) una piattaforma di gran lunga superiore indipendentemente dalla lingua utilizzata. Se non hai mai fatto uno sviluppo Swing o SWT, ti darò circa due ore prima che ti senta di mangiare un proiettile.

7

Ovviamente non c'è una soluzione, ma ci sono pro e contro per entrambe le soluzioni, e c'è anche una terza soluzione: Java con Qt.

Prima di tutto, la mia esperienza con C++ e Qt ha già qualche anno, quindi potrebbe non essere così preciso, e il mio interesse per lo sviluppo di GUI java è terminato uno o due anni fa quando ho visto gli strumenti per lo sviluppo. Di solito lavoro in Java, ma non con Swing.

Detto questo, la differenza principale tra Java e C++ sembra essere la distribuzione. Java dipende sempre dall'ambiente java installato e C++ è un po 'più indipendente. Darei una leggera preferenza a C++ in tal senso se si può gestire la distribuzione su due piattaforme.

Per quanto riguarda lo sviluppo della GUI, gli strumenti di Qt erano molto buoni e sono migliorati. Il framework si adatta molto strettamente al processo della GUI ed è un adattamento naturale per quel tipo di lavoro. Swing sembra essere un po 'più basso livello, e ha richiesto una buona quantità di codice boilerplate. E non conosco strumenti di sviluppo veramente buoni, anche se ho sentito cose buone di mantisse.

Se si ritiene che Java sia la via da seguire per la distribuzione o la logica di back-end, ma gli strumenti della GUI per Qt sono semplicemente troppo utili da ignorare, controllare la domanda StackOverflow su Java Swing or Java Qt. Vale la pena leggere.

Nel vostro caso particolare, vorrei andare con C++/Qt come avete esperienza con C++, e non è poi così banale costruire correttamente un'applicazione Java Swing.

1

Bene, se si conosce bene il linguaggio C++, questo è il motivo numero uno per seguirlo. QT è un toolkit molto bello e molto più produttivo con quello di Java (come sapete bene in C++). Anche le possibilità che tu crei un'app migliore sono maggiori a causa di questa esperienza.

Quindi, a meno che non vogliate avere esperienza con Java (e al giorno d'oggi non è un vantaggio come prima), attenetevi a C++/QT e sviluppate alcune competenze multipiattaforma.

Personalmente, se volevo creare una nuova app da zero e volevo imparare qualcosa di nuovo, sarebbe stata una webapp con alcune nuove chicche HTML5/js. Le fantastiche funzionalità web hanno più probabilità di essere il futuro per le app su client desktop spessi (e amichevoli su più piattaforme mobili).

2

Sto sviluppando uno strumento GUI in Java utilizzando NetBeans e non ho avuto problemi finora. Non dipendono totalmente dall'editor della GUI di NetBeans, lo utilizzo solo per progettare finestre di dialogo e pannelli. Ho sperimentato che se vai in MVC, diventa molto più facile usare l'editor di GUI NetBeans. È quindi possibile lasciare totalmente la parte di progettazione a NetBeans. Cerca nel nuovo SwingSet3 demo e decidi se i controlli Java Swing saranno sufficienti o meno (in termini di aspetto e controlli GUI disponibili). Inoltre, dai uno sguardo a SwingX components alcuni di questi sono davvero fantastici e di bell'aspetto, come ShadowBorder, TitlePanel ecc. Ti suggerirò sicuramente di usare JXTable per i tuoi tavoli invece di JTable. Data la popolarità di Java, non penso che il problema di BigDecimal non sia già stato risolto. Per quanto riguarda DB, Java viene fornito in bundle con la sua funzione completa JavaDB, che è davvero di piccole dimensioni - solo 2,5 MB. Ciò sarà utile se non si desidera installare DBMS pesanti come MySQL. Questo sarà anche un altro livello di astrazione IMHO: i tuoi clienti difficilmente vedranno alcun DB esterno in uso. Non lasciarti ingannare dal fatto che essere portatili significa che il tuo software Java funzionerà automaticamente su piattaforme diverse. Avrà sicuramente bisogno di un po 'più di sforzi ma se lavori sul tuo progetto iniziale e costruisci il tuo software mantenendo le diverse piattaforme (non solo OS ma desktop/web etc) dietro la tua testa, sarà facile modificarlo un po' un po 'per renderlo totalmente portatile. Vai in MVC, non farà male. I miei 2 centesimi.

0

Per rispondere alla domanda 2, Java può essere un po 'un problema nel gestire i numeri in virgola mobile, ma è diventato molto migliore a partire dalle versioni 1.5 e 1.6. Se si scende lungo il percorso Java, assicurarsi di disporre della versione più recente disponibile.

I problemi coinvolti sono spiegati abbastanza bene in questo articolo: http://www.ibm.com/developerworks/java/library/j-math2.html.

0

Come alcuni altri hanno sottolineato una webapp potrebbe funzionare bene. Penso che RubyOnRails sia molto produttivo e puoi eseguirlo su JRuby su entrambe le piattaforme o con qualsiasi Ruby nativo. Dovresti esaminare la sicurezza ma non dovrebbe essere un grosso problema.

Se non conosci Java puoi anche controllare Mono. Puoi creare app WindowsForms con esso ed eseguirle sia su Mac che su Windows, oppure se vai sul Web e usi ASP.NET su Mono. Continuo a pensare che RubyOnRails ti darà un tempo di sviluppo più breve rispetto ad ASP.NET ma è un'opzione.

Problemi correlati