2010-12-12 16 views
0

Wie gestalte ich ein OO Diskussionsforum. Welche Klassen und Funktionen wird es haben? Danke!OO Design Frage

Kann jemand einige Ideen vorschlagen, damit ich das Design verbessern und vervollständigen kann.

+0

wo ist eine Klasse für Nachrichten eines Themas? ... oder gibt es ein Array in der Themenklasse ...? –

+1

Das ist nicht einmal die Spitze des Eisbergs, du fragst im Grunde nach jemandem, der dir einen Bogen schreibt itecture (!?) Wird nicht passieren. –

+0

Offensichtlich eine Aufgabe. Was sind die Anwendungsfälle? (Es ist alles sehr gut, den Code zu diskutieren, aber wenn Sie nicht wissen, was es für die Benutzer tun muss, wird es nicht viel helfen). –

Antwort

3

Beginnen wir mit einem Szenario.

Forum Benutzer Joe schaut auf die Website

Joe gibt die URL für das Forum auf seinen Browser.

Joe meldet sich im Forum an. Er wählt die Option in automatisch beim nächsten Mal

Joe sieht eine Liste seiner Foren, in Kategorien gruppieren angemeldet sein, mit Titeln und eine kurzen Beschreibung.

Andere Foren existieren, aber er kann diese nicht sehen.

Foren mit neuen Themen oder neue Antworten auf Themen seit Joe letzten angesehen das Forum sind markiert.

Joe sieht eines der Foren mit Aktivität seit seinem letzten Besuch. Er sieht eine Liste von Themen in der Reihenfolge letzte Aktivität (entweder Erstellungsdatum neues Thema oder Datum der letzten Antwort).

Themen geändert seit Joe zuletzt angesehen sie sind markiert.

Joe schaut sich einige Themen an, die seit seinem letzten Besuch geändert haben.Das Thema und alle Antworten in Schöpfungsordnung aufgeführt sind (nicht Modifikation - Themen und Antworten können bearbeitet werden, aber , dass die Bestellung nicht ändern)

Themen eine Betreffzeile haben, Tags, einen Autor Name, ein Datum der Erstellung und letzten Edit und einen Körper. Joe wird angezeigt all diese, mit Ausnahme der letzten Bearbeitungsdatum wird nur angezeigt, wenn es sich um das Erstellungsdatum von unterscheidet. Antworten haben nur einen Autorennamen, ein Erstellungsdatum und ein Datum der letzten Bearbeitung. Auch hier wird die letzte Bearbeitung Datum nur angezeigt, wenn es nicht das gleiche wie das Erstellungsdatum ist.

Joe besucht die Liste der Artikel für das Forum erneut. Diesmal sind die Artikel, die er nun angesehen hat, nicht mehr markiert, sondern andere Artikel haben sich seit seinem Latbesuch geändert, dass er noch nicht gelesen hat.

Joe besucht einen Artikel erneut und gibt eine Antwort auf eine der anderen Antworten aus. Der Körper dieser Antwort ist enthalten, zitiert, mit Autor Attribution, im Editor-Fenster für seine Antwort. Er löscht einige der Körper und fügt seine eigene Antwort hinzu. Er wählt "Senden" und ist zurück zum Thema.

Er warnte, dass eine andere Antwort hat hinzugefügt worden, während er die Bearbeitung und ist fragte er immer noch Post will zu bestätigen. Er bestätigt und kehrt zu der Themenanzeige mit seiner Antwort zum Ende zurück. Er kehrt zum Forum zurück. Das gerade hinzugefügte Thema ist nicht hervorgehoben, da die Änderung von ihm vorgenommen wurde.

Nun könnte dies mehr Funktionalität sein, als Sie in Betracht ziehen möchten. Aber wenn du es unterstützen wolltest, würde es sich natürlich auf dein Design auswirken. Mein Punkt ist, dass Sie die Use Cases, die zu unterstützende Funktionalität, bestimmen müssen, um zu sagen, ob ein Design überhaupt angemessen ist oder was es fehlt oder was es schwierig zu implementieren ist.

Aus dem obigen Szenario können wir einige Anwendungsfälle herausziehen. Wir können auch identifizieren, was in das Domänenmodell gehen muss - Benutzer, Foren, Themen, Antworten, aber auch einige der Attribute dieser - zuletzt geänderte Daten - und Operationen (Liste der Foren nach Kategorie, Liste der Themen pro Forum im Datum Bestellung usw.).

Ich würde vorschlagen, konzentrieren zuerst auf die wichtigsten Domain-Objekte und Operationen, wie Sie Decores verschieben können. Zum Beispiel benötigen Sie eine Operation "ist seit dem letzten Besuch vom Benutzer geändert", aber Sie müssen noch nicht entscheiden, ob die Themen wissen, welche Benutzer wann besucht haben oder ob die Benutzer wissen, welche Themen wann besucht wurden. In der Tat, wenn Ihr High-Level-/Interface-Design nur den Betrieb festlegt, kann das von Ihnen verwendete ein Implementierungsdetail sein und kann an jedem Punkt geändert werden, ohne viel anderes zu beeinflussen.

Ihre Frage aus dem Wortlaut der Zuordnung abgeleitet Unter der Annahme, beachten Sie sagten, Sie

„Welche Klassen und Funktionen wird es haben."

. Nicht das, was Felder werden die Klassen haben, aber das ist vor allem, was in der Frage Code abdeckt. So wird die Zuordnung auf Sie zu fragen, was sind die wichtigsten Objekte, von welcher Art, und was müssen getan werden, um mit ihnen

wenn ich Zeit habe, kann ich wieder kommen und braindump einige Design-Gedanken, aber (wie ich dies unter der Annahme, ist eine Zuordnung), wäre es besser, wenn man die Dinge gedacht.

+0

HI Paul, danke, dass du dir die Zeit genommen hast, so detailliert zu erklären. Ich habe einige usecases gemacht, die Ich mag würde Usecases 1) \t normale Benutzer createTopic können 2) \t können normale Benutzer nach Antworten 3) \t Admin erstellen Forum können 4) \t Benutzer greifen implementieren Liste der Foren 5) \t Benutzer kann Liste der Themen zugreifen 6) \t Benutzer können sich einloggen, abmelden Könnten Sie sich die Klasse ansehen, die ich jetzt entworfen und kommentiert habe. Ich habe in der Frage selbst geändert – Vidya

+0

Auch meine Frage ist Wie kann Benutzer zugreifen Liste der Themen und Foren? – Vidya

+0

Ich habe momentan keine Zeit für weitere Kommentare (Arbeitstag heute :)), aber ich würde vorschlagen, eine Site-Klasse, die Listen von Benutzern und Foren hat. Listen von Themen sollten eine Operation auf dem Forum-Objekt sein –

0

Ja, ich würde empfehlen, dass Sie diesen Objekten einige Beziehungen hinzufügen. Ich hätte erwartet, dass Forum Sammlungen von Benutzern und Themen haben würde, weil nur einer von beiden nicht interessant sein wird.

0

Ich denke, das erste Ding zu beginnen wäre Usecases. Welche Funktionen möchten Sie unterstützen? Danach kannst du über die Klassen nachdenken, die du machen willst.

Auf einen Blick ist die Sache, die an mir kommt, wie Nachricht ist kein Objekt. Wenn es ein Objekt wäre, wäre es viel einfacher zu manipulieren (zum Beispiel wäre das Löschen oder Verstecken viel eleganter). Da ich Ihren Anwendungsfall jedoch nicht kenne, bin ich mir nicht sicher, wie das funktioniert.

Auch Ihre Topics und Forums sollten in Viele-zu-eins-Beziehung sein, wenn Sie möchten, dass Foren Topics enthalten. Wieder bin ich nicht sicher über Ihre Anwendungsfälle, aber ein Vorschlag wäre, jedem Forum eine Liste von Unterforen (ich meine Forum[] subforums) und einen optionalen Link zu einem höheren Forum zu geben. So könnten Sie Ihre Foren hierarchisch organisieren.