was alles ins Userinterface?

Status
Nicht offen für weitere Antworten.

virtualAudio

Aktives Mitglied
Hi Leute,

für die Uni hab ich gerade ein kleines Buchhaltungsprogi zu schreiben. Das ganze war kein Problem und läuft tadellos.
Nur der Tutor will eine andere Ui als ich sie habe...ich wollte die Meinung von anderen auch dazu hören.

Ich hab 4Klassen:
EinAus.java mit der main()
Konto.java mit ner Methode addBuchung() und so variablen wie kontostand, anzahlBuchungen, waehrung, etc.
Buchung.java mit betrag, name, datum, info...

und Ui.java: Darin stehen eigentlich alle Ausgaben am Bildschirm und darin werden auch die Benutzereingaben entgegengenommen. ist es üblich in der Ui.java auch gleich die Eingaben des Users auf Ihre "Tauglichkeit" zu überprüfen, oder sollte hier wirklich nicht mehr als die pure Ausgabe von text stehen. Oder vielleicht diese pure Ausgabe und von der Eingabe nur das (zB) readline(), aber ohne Überprüfung(abgesehen von Exceptions) ob die Daten verwertbar sind?!

Bis jetzt hab ich in der Ui Methoden die die schon überprüfte Benutzereingabe so übergeben, dass sie gleich verwendbar ist...also hab ich zB eine
public int menu() im Objekt Ui die mir die eingabe des Users...welchen Menüpunkt er ausführen will (als int) übergibt. Sie überprüft zuvor ob es ein Wert ist der auch einem menüpunkt zugeordnet ist. Dann hab ich zB eine ...
(in Pseudocode...)
Code:
public Buchung eingabeBuchung(Konto k){
    ...
    Buchung b = new Buchung(); 
    ...
    System.out.println("Betrag in " + k.waehrung() + " eingeben: "); 
    b.setBetrag(...
    if(b führt zu einem Problem mit k.kontostand(){abbruch der Einbuchung}
    ...
    b.setDatum(...
    ... etc
   
   return Buchung;
}

Der tutor meint das wäre zuviel fürs Ui...was haltet ihr davon?
Ich persönlich meine, dass diese Überprüfung hier am handlichsten und überschaubarsten ist.

Ich hoffe auf Eure Stellungnamen! 🙂

beste Grüße
Andi
 
HI,
ich würde mal sagen es gibt 2 Punkte die du beachten solltest:
1) Dein Tutor gibt dir die Punkte, im Zweifel hat er erstmal recht
2) Was man allgemein erreichen möchte.

Deine Frage bezieht sich natürlich mehr auf 2), aber auch hier gibt es keine Vorschriften. MVC ist nur eine Möglichkeit. Mehrschichtsysteme an sich können verwendet werden, es wird dich aber nie einer dazu zwingen.

Etwas unabhängiger von MVC oder anderen Modellen, gilt immer, dass man eine möglichst lose Bindung haben möchte. Eine solche ist immer dann erreicht, wenn jede Klasse von möglichst wenigen anderen Klassen direkt abhängt. Insbesondere lässt sich dies über Interfaces oder abstrakte Klassen realisieren. Hier kannst du zwar Abhängigkeiten zu einer Implementierung haben, diese muss dir aber nicht bekannt sein (du kennst nur die Schnittstelle).
Der klare Vorteil in so einer losen Bindung liegt dann darin, dass du alles sehr leicht austauschen kannst, da es keine (sehr wenige) direkten Abhängigkeiten gibt. Dies gilt in beiden Richtungen, du kannst einerseits die Implementierung eines Interface austauschen, andererseits aber auch die ganze Umgebung in der diese Implementierung zum Einsatz kommt (man würde es wohl eher Wiederverwenden nennen!).

Um es mal einfach zu sagen, bei dir würdest du (freiwillig) auf diese Möglichkeiten verzichten. Ein UI hat keine anderen Aufgaben, als eine Schnittstelle zum Benutzer zu sein. Mehr sollte keiner erwarten, also ist die Überprüfung schon nicht mehr übersichtlich. Wenn du UI liest (ist der Name schon schlecht gewählt), dann gehst du nur von einem UserInterface aus, da steckt nicht im Namen drin, dass irgendwas geprüft wird.
Die Frage die du dir nur stellen solltest ist, muss die UI wirklich wissen, was mit den Daten passiert? Was ist wenn du dich irgendwann entschließt eine GUI zu implementieren? Hier musst du dann die Überprüfung der Werte mit in die Logik der GUI aufnehmen, soweit so gut.
Hast du mehr als eine GUI (z.B. weil unterschiedliche Kunden unterschiedliche GUIs wünschen), dann müsstest du bei jeder Änderung der Überprüfung immer in jeder GUI (oder auch jeder anderen UI) nach der Stelle suchen, wo die Überprüfung stattfindet und sie hier ändern. Das ist extrem Fehleranfällig! Du kannst leicht in einer Datei etwas falsch korrigieren, du kannst eine GUI vergessen usw.
Hast du hier nur eine Klasse, die sich halt nur um die Überprüfung kümmert, dann musst du nur diese abändern. Das ist dann doch deutlich weniger mit Problemen verbunden, tauchen welche auf, so weißt du schon wo du suchen kannst.

Für ein so kleines Projekt mag das ganze noch nicht so richtig wichtig klingen, aber hier kann ich nur sagen, dass sich der Mensch eine Arbeitsweise angewöhnt und nicht je nach Projekt hin und her wechseln kann. Vorallem aber fangen viele Projekte extrem klein an und enden dann doch in einer immensen Komplexität! Hier haben bestimmt einige schon mal die Erfahrung gemacht, was da dann den Unterschied zwischen einer sauberen Modellierung (und konsequent loser Bindung) und ebend Fehlen von Selbigem ausmacht. Ich kann nur sagen, dass ich als Student dann auch am Anfang noch so gearbeitet hatte. Als da dann aber erste Anschlussaufträge reinkamen, bei denen man einen großen Teil hätte leicht wieder verwenden können, wäre nicht ich für das SW-Design verantwortlich gewesen... War etwas mehr Arbeit, hat aber eine andere Herangehensweise bei mir motiviert! Heute sieht das (nach eigenem Empfinden) dann doch deutlich besser aus!

Gruß Der Anmeldeboykottierer
 
Suuper Antworten, danke!!!

Ich bin motiviert das in meine zukünftige Herangehensweise zu implementieren 🙂, ich hab ja noch genug chancen...war ja erst das erste Beispiel...die LV heißt übrigens "Objektorientiertes Programmieren" 🙂

danke und gruuuhs
Andi
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben