Modellieren von Standorten, akademischen Begriffen und verschiedenen Kohorten in OO


8

Ich arbeite an einer App für Universitäten. Der Fall ist folgender:

Jede Universität hat mehrere akademische Programme. Jedes Programm hat viele Fächer (Module). Jedes Fach kann an verschiedenen Orten angeboten werden. Das akademische Jahr ist in Semester unterteilt und jedes Semester dauert mehrere Wochen. Nicht alle Module werden in jedem Semester an denselben Orten angeboten, und Programme können verschiedenen Gruppen von Studenten mit unterschiedlichen Startdaten innerhalb desselben Studienjahres angeboten werden.

Beispielsweise bietet die Universität A ein MBA-Programm in New York und London an. Der MBA umfasst 2 Module pro Semester (10 Wochen), die an beiden Standorten angeboten werden (z. B. MBA-NY und MBA-L). Es ist möglich und bedarfsabhängig, einen dritten Durchlauf des Programms (und damit der Module in diesem Semester) durchzuführen, der eine Woche später als die normale Aufnahme beginnt. Es gibt also eine andere MBA-NY-Gruppe mit einem anderen Zeitplan. Diese Gruppe ist jedoch auch Teil desselben Begriffs im MBA-Lehrplan (dh die beiden Gruppen absolvieren den zweiten Begriff des MBA).

Meine Frage ist, wie man Standorte, akademische Begriffe und Läufe im OO-Design modelliert. Sind Standort, akademische Begriffe (und möglicherweise "Läufe") Eigenschaften des Universitätsobjekts oder des Programmobjekts? oder des Modulobjekts?

Update: Aufgrund Ihrer Antworten besteht meine Schwierigkeit darin, die akademischen Begriffe, die Kohorten und die verschiedenen Zeitpläne zu modellieren. Es ist nicht wirklich der Ort, da es für mich direkt aussieht. Ich habe es gerade in die Beschreibung aufgenommen, um Ihnen die Verbindungen zu zeigen.


Wie würden Sie modellieren Animalstatt Location? Wie würden Sie die Dinge im Allgemeinen klassifizieren?
QWERTY_SO

Die Standorte sind unkompliziert. Ich erwähne sie, um das Gesamtbild zu zeigen. Was mich verwirrt, ist der Teil mit den akademischen Begriffen und den "Läufen" / Kohorten der Module. Ich kann mich nicht entscheiden, wo die Immobilien hingehören
John Kouraklis

Als erstes müssen Sie alle Anwendungsfälle festlegen, die Sie unterstützen möchten. Wenn Sie versuchen, ein Modell zu erstellen, das alles kann, erhalten Sie ein "Disketten" -Datenmodell, das kein Verhalten erzwingen kann und ein Albtraum ist, den Sie konfigurieren müssen. Sie benötigen Struktur und Einschränkungen, oder Sie haben ein System, das grundsätzlich neu programmiert werden muss (ausnahmslos in etwas, das weniger ausdrucksstark ist als die Sprache, mit der Sie begonnen haben), damit es etwas tut.
Sean McSomething

Antworten:


5

Sie sollten nicht damit beginnen, in Objekten zu denken. Angenommen, Sie möchten eine wirklich funktionierende Anwendung erstellen (und dies ist keine BS-Modellierungsübung), würden Sie zunächst die Anforderungen klären, dh welche Aufgaben die Anwendung ausführen kann, und das dazu erforderliche Datenmodell entwerfen. Das Objektdesign ist eher auf niedriger Ebene und kommt nach diesem Design auf hoher Ebene auf den Punkt.

Die Frage nach Standorten, Lehrplänen, Zeitplänen usw. ist Teil der Frage nach dem Entwurf des Datenmodells für die Anwendung. Sie sollten also noch nicht wirklich in Objekten oder Eigenschaften denken. Sie sollten es wahrscheinlich in Form eines Entity-Relationship-Diagramms oder eines ähnlichen konzeptionellen Entwurfs entwerfen.

Dann , wenn Sie das Datenmodell haben und Sie wissen , welche Aufgaben und Operationen sollte die Anwendung ausführen, können Sie bestimmen , beginnen , welche Objekte Sie benötigen. Aber du bist noch nicht da.


2

Es sieht so aus, als würden Sie versuchen, objektorientiertes Design zu erstellen, jedoch mit Beziehungen, die einer relationalen Datenbank ähneln. Dies ist im Allgemeinen keine sehr gute Idee - es ist eine verbreitete Idee, es ist in vielen Programmierbüchern enthalten und es ist wahrscheinlich eine schlechte Idee. Sehen Sie sich eines der vielen dokumentierten Beispiele für ORIM (Object-Relational Impedance Mismatch) im Internet an.

Objekte sind Verhaltensklassen. Welches Verhalten hat Ihre Anwendung?

Beispiel: Ist es eine Website, auf der Sie von einer Liste von Programmen zu einem Programm und einer Liste von Speicherorten und Modulen navigieren? Ohne Berücksichtigung von Test- und Abhängigkeitsinjektionsproblemen würde dies zu etwas führen wie:

public class Programme
{
  public static List<Programme> All() { ... }
  public static Programme GetById(int id) { ... }
  public List<Location> GetLocations() 
  { 
     return Location.GetByProgrammeId(Id);
  }
  public int Id { get; set; }
}

public class Location
{
   public static List<Location> All() { ... }
   public static List<Location> GetByProgrammeId(int id) { ... }
}

und so weiter. Der Inhalt der Klassen basiert darauf, wie Inhalte in der Benutzeroberfläche angezeigt werden und nicht darauf, wie sie in der Datenbank gespeichert sind. Es könnte zusammenfallen, aber das ist nicht garantiert.

Beachten Sie, dass die Methoden gebaut werden eine Web - Anwendung unter der Annahme, wobei jede neue Anforderung Sie so wenig SQL wie möglich ausgeführt werden sollen, so zum Beispiel sind Sie eher eine „durch das Programm erhalten Standorte müssen id “ Methode als ein „get Standorte von Programm "da Sie nicht gezwungen werden möchten, eine ganze Instanz eines Programms zu erstellen, um eine Liste der Standorte zu erhalten.

Ebenso sollten Sie nach Bedarf über andere Methoden verfügen, um diese Objekte zu bearbeiten.

Wenn Sie Desktop-Anwendungen erstellen, sieht das natürlich anders aus. Beispielsweise können Sie möglicherweise eine Programminstanz über Benutzerinteraktionen hinweg am Leben erhalten, was natürlich zu einer anderen Struktur der Methodenaufrufe führt.


0

Location ist ein einfaches Geschäftsobjekt (obwohl nicht unbedingt trivial. Sie können es mit der Geoposition (vorausgesetzt, es ist ein Ort auf der Erde) sowie einem Namen, seiner Höhe relativ zum Meeresspiegel (welcher?) usw. beschreiben.

Termhat eine Beziehung zu Programmein einer Weise, die seine Dauer und Lage beschreibt, und es gibt verschiedene Einschränkungen (in Bezug darauf , wie viel Sie haben können). Es ist also auch ein Geschäftsobjekt.

Ich bin mir nicht sicher, was "Ausführen" in diesem Zusammenhang bedeutet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.