# Neues Projekt - Welche GUI / IDE /Techniken / etc.



## El Rakiti (23. Mrz 2010)

Guten Morgen,

ich weiß, ein wenig verwirrend der Titel ;-). Ich möchte euch sagen, worum es geht.

Ich bin von Beruf Softwareentwickler, arbeite allerdings mit einer...naja, sagen wir mal etwas betagteren Programmiersprache. Richtige OOP, Interfaces etc? Ein Fremdwort ;-).

Ursprünglich komme ich aus der C# Ecke (habe damit mir das Programmieren beigebracht), möchte aber jetzt zwecks Plattformunabhängigkeit (arbeite mit Ubuntu) mich mit Java beschäftigen. Das passende Projekt dafür habe ich schon, damals mit C# angefangen, soll es jetzt in Java neu erstrahlen bzw. erstmals fertig gestellt werden.


Es handelt sich dabei um einen Bewerbungsmanager, mit dem man Stellenanzeigen, naja "managen" kann . Also Stellenbeschreibung mit Daten (Firmen, Ansprechpartner etc) speichern und alles rund darum pflegen (wann Bewerbung abgeschickt, wann Vorstellungstermin etc.).

Nach einigem lesen in diverser Javaliteratur machen sich doch schon einige Unterschiede zu .Net klar. Weiterhin möchte ich dieses Projekt dazu nutzen, mal "sauber" zu programmieren. 

Gedanken zu den Models habe ich mir schon gemacht, habe ein paar Klassen geschrieben und H2 und TopLink als O/R Mapper eingerichtet.

Naja, mir geht es jetzt einfach darum, gewissen Grundsatzentscheidungen zu treffen. Darunter zählt:

- Welche GUI? Habe (natürlich) von Swing und SWT gehört
- Welche IDE. Momentan habe ich Netbeans. Eclipse wäre natürlich die andere Alternative

Und der Hauptpunkt: Welches Databindung zwischen meiner View und dem Model?

Nachdem die erten Klassen ja stehen, ich ungefähr weiß, was Version 1 können soll, auch schon eine ungefähre Ahnung habe, wie die GUI aussehen soll und auch MVC vom Prinzip her verstanden habe, stand ich vor der Frage:

Wie binde ich meine Objekte an meine View? Das ganze per Hand zu machen ist ja bestimmt unsinnig und aus C# kannte ich noch das Databinding, mit dem ich die Textfelder an eine Datenbank binden soll.

Das ganze muss natürlich auch mit Objekten machbar sein dachte ich mir und suchte hier etwas im Forum und traf auf Begriffe wie Eclipse EMF, JavaFC und co. 

Hier steh ich grade etwas auf dem Schlauch und bräuchte eure Hilfe, welchen Weg ich einschlagen soll bzw. welcher Weg welche Vorteile / Nachteile bringt.

Ich habe zum Beispiel gelesen, dass das Databinding mit Eclipse sehr einfach gehen soll, mit Netbeans nicht?


Eigentlich eine simple Frage an die "Könner": Wie würdet ihr das Projekt aufziehen? Was es können soll wisst ihr grob. Welche Techniken (GUI, DataBinding etc) würdet ihr Nutzen mit einer kurzen Erklärung (ins Detal lese ich mich dann natürlich ein).


Schonmal vielen Dank und Gruß

El Rakiti


----------



## oversoul (23. Mrz 2010)

> - Welche GUI? Habe (natürlich) von Swing  und SWT gehört
> - Welche IDE. Momentan habe ich Netbeans. Eclipse wäre natürlich die andere Alternative



Ich würde sagen dass du am besten mit Swing arbeitest, das kommt meiner Meinung nach am
nächsten an Windows Forms des NetFrameworks ran.

Bei der IDE kann man leider so keine pauschalte Antwort geben, da es Ansichtssache ist, wobei
NetBeans im gegensatz zu Eclipse schon einen GUI-Editor hat.


Wobei mir gerade einfällt:
Kennst du das Mono-Projekt nicht?
Das ist ein NetFramework unter andern Betriebsystemen.
Damit ist es möglich C# auch unter Linux zu programmieren, sogar WindowsForms scheint damit unter Linux möglich zu sein.


----------



## El Rakiti (23. Mrz 2010)

Hallo oversoul,

um Missverständnisse aus dem Weg zu räumen, es geht mir nicht darum in irgendeiner Weise kompatibel zu .Net zu sein bzw. irgendetwas auszuwählen (IDE, GUI Framework), nur um eine hohe Ähnlichkeit zu .Net bzw. Windows zu haben ;-).

Mir gehts darum, für meine Anwendung das passende auszuwählen.

(PS: Jap, kenne das Mono-Projekt).

Ich muss zwar sagen, dass ich schon relativ von C# verwöhnt bin (grade auch auf Visual Studio bezogen), denke aber, dass Java dem nicht nachsteht (beide Sprachen haben natürlich spezifische Vor-und Nachteile).


----------



## maki (23. Mrz 2010)

Eclipse IDE schlägt VS bei weitem  
Man muss sich natürlich einarbeiten.

Würde dir EclipseLink empfehlen (TopLink gibt es nicht mehr) und Eclipse RCP, da gibt es auch DataBinding(sauberer als der "normale" Weg direkt über Listener), allerdings nicht mit der DB sondern mit dem (Presentation-)Model.

ORM sind sehr Komplex, von Natur aus (deswegen hat imho MS bis heute kein vernünftiges), Eclipse RCP ist umfangreich, SWT muss man dazu auch verstehen und natürlich OSGi.

Würde mich an deiner Stelle entweder erst auf die GUI konzentrieren oder auf das ORM (EclipseLink).


----------



## El Rakiti (23. Mrz 2010)

Hallo maki,

das mit Eclipse glaub ich, man muss sich da wirklich einarbeiten. Mein DataBinding hätte ich eh gern an meinem Model, denn das ist ja denke ich auch der richtige weg.

Ich will mich ja schon einarbeiten und auch so gut es geht "richtig" programmieren. Aber ich möchte / muss / kann kein Java Experte werden, dafür ist viel zu wenig Zeit da^^. Es ist ein Hobby Projekt, mit dem ich mich in Java einarbeiten und OOP allgemein "fit" halten will.

Gewisse Einarbeitung / Einlesen ist also kein Problem, was ich auf keinen Fall will, ist erst 4 Monate Bücher wälzen, um Eclipse einzurichten, bzw. das ganze Ecplise RCP zu verstehen usw.

Es muss also ein Kompromiss sein zwischen vorher lesen / lernen und Learning by Doing. Ich würde mal sagen, ich habe die ganzen Denkweisen von OOP recht gut drauf und will sie am praktischen Beispiel vertiefen / zu Papier bringen. 

Ich hoffe ihr wisst, was ich damit meine^^


----------



## maki (23. Mrz 2010)

Naja, du kannst DataBinding auch mit "nacktem" SWT & JFace verwenden, da braucht es kein Eclipse RCP Projekt und damit auch kein OSGi.


----------



## FArt (23. Mrz 2010)

Ich finde, wir sollten eine IDE-Flame-War hier aufmachen. Die Frage hat das ja fast herausgefordert ;-)

IntelliJ ist die einzig wahre IDE, alles andere ist Spielzeug  *G*


----------



## Siassei (23. Mrz 2010)

maki hat gesagt.:


> Eclipse IDE schlägt VS bei weitem


Ja. Eclipse, Netbeans, IntelliJ IDEA, und viele mehr.

Welche IDE du nimmst, musst du selber entscheiden. Aber du solltest auf jeden Fall einen Blick auf Netbeans werfen. Das ist ein kleines Schmuckkästchen und kann dir viel freude bereiten. Vor allem, wenn du auf Swing setzt. Der Designer ist wirklich gut.

Swing mit Java ist im allg. viel Schreibarbeit und etwas umständlich. Ich würde dir empfehlen, einen Blick auf Scala zu werfen. Scala ist ebenfalls eine Sprache für die Java-Plattform und man kann damit die gesamte Java-Bibliothek nutzen. Zudem die Scala Bibliothek. Ich habe den Umstieg bis heute nicht bereut  Für Netbeans und IntelliJ gibt es auch schon ein sehr gutes Plugin. Lediglich die Dokumentation zu ScalaSwing lässt wünsche übrig, aber die Sprachdokumentation ist 1a.



> Wie würdet ihr das Projekt aufziehen?


Für einen Bewerbungsmanager? Ganz klar.
Plattform: Java
Sprache: Scala
GUI: ScalaSwing + Swing (Java)
DB: H2 Database Engine
evlt OR-Mapper: Hibernate

Build-System: Maven oder Gradle --> unabhängig von der IDE, aber das dürfte erst mal zu viel werden

Was meinst du mit JavaFC? Vielleicht JavaFX?
JavaFX ist eine neue Möglichkeit, einen RichClient zu basteln. Es setzt in erster Linie auf eine einfacher Handhabung, im vergleich zu Swing, auf. Grundsätzlich nutzt JavaFX die gleichen Bibliotheken wie Swing --> Alles was mit JavaFX möglich ist, ist mit Swing auch möglich. Zurzeit ist es nicht möglich, Java Code mit JavaFX  in einem Project (sprich, jar) zu mixen.
Zudem erlaubt die Lizenz es nicht, die Bibliothek einem Programm beizulegen --> bei jedem Anwendungsstart benötigt der User eine Internetverbindung und muss die JavaFX-Library vom offiziellen Server laden. Was ist, wenn gerade keine Internetverbindung vorhanden ist oder der offizielle Server down? Wie erklärt man das dem Kunden bzw. Benutzer?

Eine Datenbindung wie in C# ist mir in Java nicht bekannt. Es gab mal ein Projekt, das versuchte ADO.NET in Java umzusetzen. Leider finde ich den Link nicht mehr :-( Ein Blick auf CachedRowSet verspricht ähnliches.
Ansonsten kannst du ja auf Hibernate setzen

Gruß,
  Thomas


----------



## El Rakiti (23. Mrz 2010)

Oh Gott, bloß kein IDE-Flame-War .

Genau das, war ja so die Frage. Also steht schonmal SWT+JFace im Raum. Man findet natürlich, wenn man nach sowas sucht, findet man immer ein paar Vor-und Nachteile. Habt ihr Tips für mein Programm? Es geht mir wirklich um die generelle Umsetzung. Sowas in der Art wie: Mach dir Klassen, die die Teile der Stellenangebote wiederspiegeln, dann machste dir ne GUI mit bla bla bla, die Anbindung der GUI an die Objekte erfolgt xxxxx. Das Modell wird dann über den O/R Mapper mittels XXX persistiert (richtig geschrieben^^?). So würde ich das machen....

Wisst ihr, wie ich es meine? So eure Erfahrungen, Herangehensweise. Die sind ja bei den meisten unterschiedlich und bringen subjektiv die und die Vorteile.


----------



## Atze (23. Mrz 2010)

El Rakiti hat gesagt.:


> Gewisse Einarbeitung / Einlesen ist also kein Problem, was ich auf keinen Fall will, ist erst 4 Monate Bücher wälzen, um Eclipse einzurichten, bzw. das ganze Ecplise RCP zu verstehen usw.



es müssen ja keine monate sein, ein gutes buch bzw n gutes tutorial sollte zumindest für den einstieg reichen, was du zusätzlich noch wissen musst liest du dir "on the fly" an.

Eclipse RCP - Tutorial (Eclipse 3.5)

wenn du dann die vorteile optimal nutzt , sollte es sich schnell lohnen



Siassei hat gesagt.:


> Zudem erlaubt die Lizenz es nicht, die Bibliothek einem Programm beizulegen --> bei jedem Anwendungsstart benötigt der User eine Internetverbindung und muss die JavaFX-Library vom offiziellen Server laden. Was ist, wenn gerade keine Internetverbindung vorhanden ist oder der offizielle Server down? Wie erklärt man das dem Kunden bzw. Benutzer?



so wie jedem anderen kunden oder benutzer einer webapplikation auch  um die verfügbarkeit seiner eigenen leitung ist es in dem falle selbst verantwortlich.


----------



## Empire Phoenix (23. Mrz 2010)

Meine empfehlung:

Eclipse + Swing + mySql backend und gut ist.
Jeder eintrag als object den du selber über eine methode direct in einen insert string serialisierne kannst
+ eine statische die ein Select direkt zurückwandeln kann..


----------



## Siassei (23. Mrz 2010)

El Rakiti hat gesagt.:


> Oh Gott, bloß kein IDE-Flame-War .
> ...
> Wisst ihr, wie ich es meine? So eure Erfahrungen, Herangehensweise. Die sind ja bei den meisten unterschiedlich und bringen subjektiv die und die Vorteile.


Keine Sorge ;-)

Herangehensweisen, hmm. Das wird schwierig. Wie jemand an ein Projekt beginnt und absolviert lässt sich nicht so einfach darlegen. Besonders, wenn man im Team oder alleine ist. Aber ein grober Ablaufplan lässt sich mit Sicherheit aufzeigen. Da gibt es auch unterschiede.
Im Grunde hast du bereits alles richtig gemacht, in dem du über den Ablauf, benötigten Werkzeuge, grobes Konzept, ... nach gedacht hast. Vielleicht entwickelst du einen Morphologischen Kasten ( Morphologische Analyse (Kreativitätstechnik) ? Wikipedia ) und schreibst einfach alles nieder, was dir einfällt. Dieser kann im weiteren Verlauf Gold wert sein.

Nach einer gründlichen Analyse teilst du das ganze in Arbeitsschritte (Arbeitspakete) ein und beginnst mit einem. Der eine beginnt lieber mit der GUI, der andere lieber mit der DB-Anbindung. Wieder ein anderer mit ...
Schritt für schritt geht es vorwärts und hoffentlich wird es auch mal fertig ;-)

Zu den Features. Es sollte eine Möglichkeit vorhanden sein, alles in eine CVS-Liste oder ähnliches (wichtig, absolut neutrales Format! Windows, Linux, BSD, UNIX, ... gibt es auch) exportieren zu können. Damit ist man nicht zu 100% an das Programm gebunden.


----------



## Atze (23. Mrz 2010)

je nachdem was du schon hast, bzw wo deine funktionalität startet, solltest du vielleicht damit anfangen. wenn du einen datensatz hast (gefüllte tabellen in der db), fang dort an und bastele dir deine daos zusammen, letztendlich zeigst du sie in der gui an. andersrum, wenn du weißt was du speichern willst, baue dir die gui dazu und dann das passende backend dazu. die reihenfolge ist eigentlich egal, lässt sich auch viel drüber philosophieren.

ich baue jedenfalls gern vom backend aus und zeige dann an, was ich daraus haben will.


----------



## El Rakiti (23. Mrz 2010)

Hallo Siassei,

das geht schonmal genau in die Richtung, auf die meine Frage bezogen war ;-).

Ich weiß selber, wie es ist, ein einem nicht ausreichend geplanten Programm zu arbeiten ;-).

Es gibt 3 Gründe, warum ich dieses Programm / Projekt machen möchte.

1. Gibt es kein (kaum ein) vergleichbares Programm --> Potential ist da
2. Ich bleib Programmier-/Entwicklungstechnisch auf dem laufenden
3. Naja, ein wenig Spaß macht programmieren ja auch .

Bezüglich CSV-Export (denke mal, du meinst CSV, obwohl auch ne Versionsverwaltung später reinkommt  ) brauchst du dir keine Sorgen machen, denn 1. soll das Programm Plattformunabhängig sein und 2. muss es das teilweise auch, da ich sowohl in Linux, als auch in Windows arbeite.

Das ganze soll später auch OpenSource gestellt werden, am Anfang möchte ich die Mit-Entwicklung noch nicht ermöglichen, da ich den Grundaufbau selber machen möchte.


Ich werde mich auf jeden Fall in die o.g. Techniken und Methoden (Eclipse, SWT etc) einlesen. 

Eine Idee war es auch, dass ganze erstmal in UML zu Papier zu bringen. Theoretisch kenn ich mich ein wenig aus, aber was würde sich in diesem Stadium neben Klassendiagramme anbieten? 

Ich denke, dass hätte auch für diesen Thread einen Vorteil, da ihr so genau wisst, was das Programm können soll (etc.) und dementsprechend sowohl entwicklungstechnische Tipps (die ich wohl am meisten brauche ), aber natürlich auch funktionale (also was das Programm können soll) Tipps geben könnt.

Was haltet ihr davon?


Bin über weitere Tipps natürlich sehr dankbar.

Viele Grüße

El Rakiti


----------



## JohannisderKaeufer (24. Mrz 2010)

Beim Entwickeln gibt es mehrere Ansätze, die ihre vor und nachteile haben.


V-Modell. 
1. Spezifizieren
2. Entwickeln
3. Testen

Agile und Iterative Methoden.
Kernfunktionalität 

entwickeln
testen
weitere Funktion hinzufügen

entwickeln
testen
...
Man muß hier besonders darauf achten so zu programmieren, das das ganze Erweiterbar bleibt.


Man kann das ganze Bottom-Up oder TopDown angehen.
.net finde ich ist prädestiniert für TopDown:
VS: GUI zusammenklicken und dann die Funktionen hinter den Buttons erstellen.

Java finde ich ist eher BottomUp. 

Datenmodell erstellen
Controller (zugriff auf das Datenmodell) bereitstellen
GUI um auf die Controller zuzugreifen

Sehr interessant finde ich die sogenannten Rapid-Web-Development Frameworks.
Groovy on Grails, Rails, etc.
Hierbei haben die Frameworkentwickler ein Grundgerüst erstellt, das das zusammenspiel zwischen Model, View und Controller regelt und die Aufgabenbereiche gut voneinander separiert. Es gibt quasi schon eine kompletten Entwicklungszyklus vor.
Das heißt jetzt nicht das man diese Frameworks nutzen muß, aber ich denke es schadet nichts sich diese anzusehen und sich davon inspirieren zu lassen.


----------

