Wie bilde ich folgendes Datenmodel ab?

Status
Nicht offen für weitere Antworten.

0001001

Bekanntes Mitglied
Hallo,

ich habe für meine Datenstruktur ein Datenmodell gezeichnet und überlege nun wie ich es am besten implementiere. Hier eine vereinfachte Version:
schemanr8.jpg


Kurz erklärt:
- Es gibt mehrere, verschiedene Supermärkte
- Zu jedem Supermarkt existieren einer oder mehrere Einkäufe
- Ein Einkauf wird von einer Person vorgenommen
- Eine Person hat eine oder auch mehrere Adressen

Jetzt stellt sich die Frage wie man sowas am besten in Java abbildet. Hier mein Lösungsvorschlag:
Code:
public class Datamodel {
	
	private ArrayList<Supermarkt> supermarkt = new ArrayList<Supermarkt>();
	
	public void addSupermarkt(String sname, String sstrasse, String sort, 
			String pname, String pvorname, String pstrasse, String port, String pplz){
		
		Supermarkt neuersupermarkt = new Supermarkt(sname,sstrasse,sort, 
				pname,pvorname,pstrasse,port,pplz);
		supermarkt.add(neuersupermarkt);		
	}
	
	public void getSupermarkt(String sname){
		...
	}
	public void getEinkauf(String ssname, int einkaufID){
		...
	}
}

class Supermarkt{
	private String sname,sstrasse,sort;
	private ArrayList<Einkauf> einkauf = new ArrayList<Einkauf>();
	
	public Supermarkt(String sname, String sstrasse, String sort, 
			String pname, String pvorname, String pstrasse, String port, String pplz){
		this.sname = sname;
		this.sstrasse = sstrasse;
		this.sort = sort;
		Einkauf neuereinkauf = new Einkauf(pname,pvorname,pstrasse,port,pplz);
		einkauf.add(neuereinkauf);
	}
}

class Einkauf{
	private String pname,pvorname,pstrasse,port,pplz;
	public Einkauf(String pname, String pvorname, String pstrasse, String port, String pplz){
		this.pname = pname;
		this.pvorname = pvorname;
		this.pstrasse = pstrasse;
		this.port = port;
		this.pplz = pplz;
	}
}

Was ich beispielsweise tun möchte:
- Liste aller Supermärkte ausgeben
- Einen bestimmten Supermarkt ausgeben
- Einen bestimmten Einkauf in einem Supermarkt ausgeben
- Einkäufe einer Person in allen Supermärkten ausgeben
- ...

Ist das Datenmodell gut oder würdet ihr das komplett anders lösen ? Habe auf dem Gebiet noch keine Erfahrung und bin für jeden Vorschlag dankbar!
 

houllei

Mitglied
was mir spontan auffällt: getEinkauf() hat nix in der Klasse Datenmodell zu suchen. Das gehört in die Klasse Supermarkt.

Des Weiteren hast du die Klassen Einkauf und Person gemischt. Das muss getrennt werden, da du sonst gegenseitige Abhängigkeiten hast.
 

0001001

Bekanntes Mitglied
Hi,
danke für die Antwort!

Wieso hat getEinkauf() nichts in Supermarkt zu suchen? Der Grund warum ichs dort reingepackt habe ist folgender:
Ich möchte ein Datenmodell mit wohl definierten Schnittstellen nach außen. Der Nutzer des Datenmodells soll sich nicht um die interne Verarbeitung kümmern müssen, also gar nicht wissen, dass es die Klassen Einkauf und Supermarkt gibt. Dennoch soll er Daten eines bestimmten Einkaufs abfragen können.
 

houllei

Mitglied
0001001 hat gesagt.:
Hi,
danke für die Antwort!

Wieso hat getEinkauf() nichts in Supermarkt zu suchen? Der Grund warum ichs dort reingepackt habe ist folgender:
Ich möchte ein Datenmodell mit wohl definierten Schnittstellen nach außen. Der Nutzer des Datenmodells soll sich nicht um die interne Verarbeitung kümmern müssen, also gar nicht wissen, dass es die Klassen Einkauf und Supermarkt gibt. Dennoch soll er Daten eines bestimmten Einkaufs abfragen können.

Für mich sieht das nach einer redundanten Information aus da ich mal annehme, dass der Supermarkt eine Liste mit Einkäufen hat. Wenn du dir also ein Objekt von Supermarkt zurückgeben lässt, hast du somit auch alle Einkäufte. Wenn du es aber als zentrale Schnittstelle nach außen modellieren willst, dann spricht wohl nix dagegen.
 

KSG9|sebastian

Top Contributor
houllei hat gesagt.:
0001001 hat gesagt.:
Hi,
danke für die Antwort!

Wieso hat getEinkauf() nichts in Supermarkt zu suchen? Der Grund warum ichs dort reingepackt habe ist folgender:
Ich möchte ein Datenmodell mit wohl definierten Schnittstellen nach außen. Der Nutzer des Datenmodells soll sich nicht um die interne Verarbeitung kümmern müssen, also gar nicht wissen, dass es die Klassen Einkauf und Supermarkt gibt. Dennoch soll er Daten eines bestimmten Einkaufs abfragen können.

Für mich sieht das nach einer redundanten Information aus da ich mal annehme, dass der Supermarkt eine Liste mit Einkäufen hat. Wenn du dir also ein Objekt von Supermarkt zurückgeben lässt, hast du somit auch alle Einkäufte. Wenn du es aber als zentrale Schnittstelle nach außen modellieren willst, dann spricht wohl nix dagegen.

Dann solltest du aber die Schnittstelle von deinem Datenmodel trennen.

Dein Datenmodel hat nur getter und setter für die Referenzen/Eigenschaften.

Daneben stellst du dann eine weitere Klasse, meinetwegen einen "SupermarktProvider" welcher dieverse Methoden schon bereitstellt. Dinge wie "getSupermarkt", "getEinkauf" u.s.w.
Aber imho kann man genauso direkt auf dem Datenmodel arbeiten.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben