Frage zum Aufbau einer Datenstruktur

Martin240

Grünschnabel
Hallo,

ich mache momentan ein Praktikum und darf mich etwas mit C# und WPF austoben. Ich arbeite an einer Mitarbeiterverwaltung, die aus Mitarbeitern (wie überraschend :D) und Abteilungen besteht. Man soll jedem Mitarbeiter für jeden Monat eine Abteilung zuweisen können. Mitarbeiter können die Abteilungen jeden Monat wechseln und auch wieder in eine schon bereits besuchte Abteilung wieder reingehen. Mitarbeiter haben Vorname, Nachname und einen Job. Eine Abteilung hat einen Namen und eine Farbe zur Darstellung später. Aus mehr bestehen die Klassen momentan nicht, der Konstruktor legt direkt alle Werte fest.

Jetzt steht ich aber vor dem Problem, wie speichere ich sauber ab, wer wann in welcher Abteilung war. Ich habe mir überlegt Monat und Jahr einfach aneinander zu hängen und dann in der Mitarbeiterklasse ein Dictionary<Int32,Abteilung> anzulegen. Für die Oberfläche wäre dann ein Converter fällig, aber das wäre ja das kleinere Problem. Was dabei weniger gut wäre ist, dass ich nachher gern eine Übersicht über die Abteilungen erstellen würde und wer im entsprechenden Monat dort drin ist. Über jeden Mitarbeiter drüber zu laufen und dort das Dictionary abzufragen ist eher unschön und wird langfristig den Code auch ziemlich lahm machen.

Eine andere Lösung die ich mir überlegt habe ist, dass ich ein statisches Objekt in der Mitarbeiterklasse anlege, das neben Datum und Abteilung einen Verweis auf den Mitarbeiter speichert. Dann hab ich wenigstens eine Zentrale Anlaufstelle für die Daten. Andererseits muss ich trotzdem noch über alle Zuordnungen drüber.

Was haltet ihr davon? Gibts vielleicht auch schönere Möglichkeiten sowas zu speichern und ich komm grad nur nicht drauf?

Grüße
 
Du könntest jeder Abteilung ein Dictionary<Monat,List<Mitarbeiter>> geben, anstatt bei jedem Mitarbeiter die besuchten Abteilungen speichern. Wie viele Mitarbeiter und wie viele Abteilungen erwartest du denn größenordnungsmäßig?
 
Zuletzt bearbeitet:
Es wird nicht übermäßig viel, aber ich hätte es trotzdem gerne sauber. Um das ganze etwas klarer darzustellen sollte ich eventuell weiter erläutern. Es handelt sich um Azubis die die Abteilungen wechseln während ihrer Ausbildung. Sprich über 3 Jahre hinweg müssen die Abteilungen gespeichert werden und es sind etwa 12-15 Azubis die alle 3 Jahre dazukommen, Anzahl steigend.

Grüße
 
Ich denke es ist sauber genug, wenn du entweder
  • bei jedem Azubi einen Verlauf speicherst, wann er in welcher Abteilung war (wie du selber vorgeschlagen hast)
  • oder bei jeder Abteilung einen Verlauf speicherst, wann welche Azubis in dieser Abteilung waren
Selbst wenn du 1000 Azubis oder Abteilungen hast, so würde das Erstellen einer Übersicht, wie du sie willst, doch weniger als 1 Sekunde dauern.
Du kannst natürlich auch eine doppelte Verlinkung konstruieren, so dass jede Abteilung einen Verlauf über die Azubis hat und jeder Azubi einen Verlauf über seine besuchten Abteilungen. Diese beiden Verläufe müssen sich dann gegenseitig synchron halten (um zu verhindern, dass du plötzlich den Fall hast, dass eine Abteilung zwar meint, dass ein Azubi bei ihr war, der Azubi aber in seinem Verlauf keinen entsprechenden Eintrag hat).

Es kommt also drauf an, wie viel Arbeit du dir machen möchtest - im Falle der doppelten Verlinkung kannst du sicherlich eine Menge lernen.
 
Hi.

Du solltest grundsätzlich erstmal mit den Entwurf anfangen. Deine Domänenklassen richtig identifizieren.

Danach solltest du dir mal Gedanken über die Datenhaltung machen. Wenn du alles in Objekten speicherst, mußt du jedesmal wenn du dein Programm startest in den Speicher laden. Das ist keine gute Idee, zumal man die Präsentation, Anwendungslogik und Datenhaltung in verschiedene Schichten auftrennt.

Für dein Problem wäre es m.M. nach günstig mit einer "Association Class" zu arbeiten. :google:

Siehe z.B. http://docs.google.com/viewer?a=v&q...iEGB-V&sig=AHIEtbSWzuG_Kj-Dho64bQtZzGskLqikbA Folie 3

Für die Datenhaltung wäre es vermutlich günstig die Informationen in einer Art Datenbank zu speichern. Dann wird aus der Association Class eine eigene Tabelle.

Gruß
 
Zuletzt bearbeitet:
Danke für das Stichwort, leider gab es nur viel Theorie zu holen und kaum praktische Umsetzungen, an denen man das ganze abschätzen könnte. Ich habe mir schon mal überlegt ob eine kleine Datenbank eine Option wäre, da mich die Struktur sehr an meine Erfahrungen mit SQL erinnert hat. Leider habe ich es Aufgrund mangelnder Erfahrung wieder verworfen, da das Praktikum nicht mehr all zu lange geht und ich gerne einen funktionierenden Kern für das Programm fertigstellen würde. Ich werde mich aber nochmal hinsetzen und Google wälzen. Vielleicht finde ich doch noch eine brauchbare und nicht all zu aufwändige Lösung.
 

Neue Beiträge

Zurück