Zu viele Felder.

Status
Nicht offen für weitere Antworten.

StifMB

Mitglied
Ich habe mir eine einfache Filmdatenbank gebastelt, die auch soweit funktioniert. Nun bin ich dabei, neben Erweiterungen, den Code zu optimieren.
Meine Filme werden dabei in einem Objekt gespeichert, das viele Felder besitzt. Meine Frage ist nun, ob es noch andere Möglichkeiten gibt, dies zu realisieren? Zudem sind die Felder
Code:
public
und werden auch direkt angesprochen. Vlt. hat jemand noch eine Idee zur Verbesserung, z.B. wie es effizienter und speicherschonender sein kann. Ich wäre euch verbunden.

Hier nun die Datei:

Java:
package smdb.core;

import java.io.Serializable;
import java.util.ArrayList;

import smdb.core.manage.ScoreManager;
import smdb.ui.form.SerializableImage;

public class Movie implements Serializable {
	
	private static final long serialVersionUID = -7325748851764473930L;
	private int id;
	public String title = "";
	public String originalTitle = "";
	public String originalLanguage = "";
	public String country = "";
	public String year = "";
	public String genre = "";
	public String length = "";
	public String plot = "";
	public String plotAuthor = "";
	public String fsk = "";
	public boolean watched = false;
	public ArrayList<String> direction = new ArrayList<String>(0);
	public ArrayList<String> actors = new ArrayList<String>(0);
	public ArrayList<String> actorsRole = new ArrayList<String>(0);
	private ScoreManager scoreM;
	public String path = "";
	public ArrayList<String> fileNames = new ArrayList<String>(0);
	public String coverName = "";
	public SerializableImage cover = null;
	public String quality = "";
	public String notice = "";
	
	public Movie(int id) {
		this.id = id;
		scoreM = new ScoreManager();
	}

	public int getID() {
		return(id);
	}	
	
	public ScoreManager getScoreManager() {
		return(scoreM);
	}
}
 
Zuletzt bearbeitet:
Üblich ist eigentlich die Verwendung von gettern und settern.
Das rührt daher, das einige Serialisierer auf die Getter und Setter zugreifen um ihre Arbeit zu verrichten.

Zum Interface Serializable gehört eigentlich noch ein Defaultkonstruktor. Weil, der ein oder andere Serialisierer sich irgendwie ein Objekt erzeugen muß, das er mit den Serialisierten Daten befüllt.

Bei so Geschichten wie String country, kann man sich überlegen ob man statt String auf Enums umsteigt. Sonst könnte es sein, daß man Filme aus Deutschland, Germany, Deutsch, D, Deu und Ger hat. Genre und Language sind ähnlich gelagert.

Stehen actors und actorsRole in einer Verbindung zueinander, so kann man ein weiteres (Serialisierbares) Objekt verwenden. z.B. Role das einen Titel und einen Actor hat.

Java:
public ArrayList<String> direction = new ArrayList<String>(0);
//sollte dann schon so aussehen
public List<String> direction = new ArrayList<String>();

Zahlen für year und length?
 
Wenn Du viele einzelne Variablen nicht magst, ist HashMap dazu vielleicht eine Alternative. (Dies wäre beispielsweise einfach zu ändern, wenn Du jetzt schon Getter und Setter hättest.)
 
Ich danke für die Antworten und Hinweise. Ich habe meine Klasse komplett überarbeitet und auch getter und setter benutzt. Allerdings wird die Klasse dadurch recht groß und unübersichtlich wie ich finde. Habe nun auch eine HashMap verwendet, dadurch wird das gespeicherte Objekt kleiner, sofern Felder leer bleiben. Danke nochmals. Mit Enums muss ich mich aber noch beschäftigen.

Eine Frage hätte ich aber noch: Warum muss/sollte ich
Code:
List<String>
verwenden?

Java:
public List<String> direction = new ArrayList<String>();

Das Wichtigste wäre dann noch das automatische Abfragen von Filminformationen ... aber wie ich das hinbekommen soll ... 😵 ...
 
Man sollte generell "gegen das Interface" (List, Map, Set usw.) programmieren. Wenn du aus irgendwelchen Gründen einmal eine andere Listenimplementierung als ArrayList einsetzen willst (LinkedList, CopyOnWriteArrayList usw.), musst du nicht überall rumändern.

Eine Analogie: Es gibt keinen abstrakten "Schraubenschlüssel", sondern immer nur Modelle von bestimmten Firmen. Trotzdem wirst du in keiner Bauanleitung finden: "Nehmen Sie einen 13er Schraubenschlüssel Drehfix der Firma Schraubgut", sondern die allgemeinste Bezeichnung für ein Gerät, was die Arbeit erledingen kann, also "13er Schraubenschlüssel". Diese "allgemeinste Bezeichnung" ist hier das Interface. Du kannst damit Code schreiben, der mit beliebigen Listentypen umgehen kann.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben