2017-06-27 1 views
2

Derzeit haben wir drei Modellklassen:Vererbung vs Eigenschaft - Was zu verwenden?

Document = Baseclass

SharePointDocument = Spezialisierung der Document, Dokument für Sharepoint-Speicher

DBDocument = Spezialisierung der Document, Dokument für die Speicherung in einer Datenbank.

Wir möchten, dass unsere Benutzer die Dokumente individualisieren. Individualisierte Dokumente sind nur für den Benutzer selbst zugänglich.

Es gibt zwei Möglichkeiten, können wir uns vorstellen:

Option 1:

Wir fügen eine Eigenschaft IsIndividualized auf das Dokument und eine Eigenschaft OrginalID/OriginalSPUrl die Sonderklassen.

Option 2:

Wir fügen zwei neue Spezialisierungen: IndividualizedDBDocument, IndividualizedSPDocument.


Also, ich denke, das ist eine ziemlich allgemeine Fragen ist:

Wenn Vererbung verwenden und wenn in den normalen Eigenschaften? Wann sollten wir neue spezialisierte Klassen hinzufügen? Gibt es Regeln für dieses Problem?

Ich könnte entscheiden, eine weitere Klasse hinzuzufügen: DeprecatedIndividualizedDBDocument, die ein individualisiertes Dokument ist, wo das Originaldokument nicht mehr existiert. Aber wo endet dieser Wahnsinn?

Eine Sache, von der ich gehört habe, ist, dass Sie nicht zu viele Vererbungsstufen haben wollen. Auf der anderen Seite wollen wir keine schizophrenen Objekte. Ich bin mir einfach nicht sicher, wie ich mich entscheide, wann was zu verwenden ist.

+0

was Option 3?Verwenden Sie Dokumente auf eine individualisierte Weise. –

+0

Das klingt nach einem Sicherheitsproblem. Es hat nichts mit dem Objektmodell als solchem ​​zu tun. – Enigmativity

+2

Ich möchte SharePoint erstellen, individualisieren, dokumentieren und in die Datenbank einfügen. Wie implementieren Sie das mit Vererbung? –

Antwort

0

In Ihrem Fall habe ich mit Option 1.

In einem allgemeineren Anwendungsfall gehen würde, sollten Sie in den einzigen Dinge Basisklasse setzen, die für alle derivativen Klassen wesentlich sind. Während jede Klasse ihre persönlichen Eigenschaften hinzufügen.

Darüber hinaus gibt es mehrere andere Ansätze sollten Sie Folgendes berücksichtigen:

  1. Eine Schnittstelle Individualize - die eine Funktion haben isIndividualized() und setzen es von Document
  2. Erstellen Sie eine Dekoration IndividualizedDocument, die auch die Document erstreckt BaseCase und implementiert die Zugriffsprüfungen für Benutzer.
  3. Haben Sie eine Individualisierte Klasse in der Mitte. So wird es sein: Document ->IndividualizedDocument -> < DB Document & SP Document>
+0

Über Nummer 3: Ich mag die Idee, aber ein normales Dokument hätte Informationen hätte auch zu viele Informationen über Benutzer usw., die ich nicht haben muss, wenn nicht individualisiert. – Jannik

+0

Legen Sie also alle 'Benutzerinformationen' in das 'IndividualisierteDokument' und halten Sie das Dokument so sauber wie möglich. –