Frage

Portfolio A → Fund 1

Portfolio A → Fund 2

Portfolio A → Fonds 3

Ich konnte meinen Satz nicht Rahmen ohne nicht unter Verwendung von / hat. Aber zwischen 1 & 2,

1) a:

class PortfolioA
{
    List<Fund> obj;
}

2) ein:

class PortfolioA : List<Fund>
{

}

, die man denken Sie, ist besser vom Punkt der Erweiterbarkeit, Benutzerfreundlichkeit? Ich kann immer noch mein Geld so oder so zugreifen, wenn auch mit einer kleinen syntaktischen Änderung.

War es hilfreich?

Lösung

ich mit den anderen Leuten stimmen, die sagen, HAS-A in diesem Fall besser ist. Sie fragen in einem Kommentar:

  

, wenn ich sage, dass ein Portfolio ist nur ein   Sammlung finanzieller Mittel, mit ein paar   Attribute der eigenen wie   TotalPortfolio usw., das tut   grundsätzlich nicht geworden "ist-a"?

Das glaube ich nicht so. Wenn Sie sagen, Portfolio IS-A List<Fund>, was ist mit anderen Eigenschaften des Portfolios? Natürlich können Sie die Eigenschaften dieser Klasse hinzufügen, aber es ist genau diese Eigenschaften als Eigenschaften der Liste zu modellieren? Denn das ist im Grunde, was Sie tun.

Auch was ist, wenn ein Portfolio erforderlich ist, mehr als ein List<Fund> zu unterstützen? Zum Beispiel könnten Sie eine Liste, die die aktuelle Bilanz von Investitionen zeigt, aber eine andere Liste, die zeigt, wie neue Beiträge investiert werden. Und was ist, wenn Mittel abgebrochen und ein neuer Satz von Mitteln verwendet wird, um sie erfolgreich zu sein? Historische Informationen sind nützlich, zu verfolgen, sowie die aktuelle Fondsallokation.

Der Punkt ist, dass alle diese Eigenschaften sind nicht korrekt Eigenschaften einer Liste, obwohl sie Eigenschaften des Portfolios sein können.

Andere Tipps

nicht ‚immer‘ für Komposition oder Erbschaft oder umgekehrt; sie haben unterschiedliche Semantik (Bedeutungen); schauen genau auf die Bedeutung haben, dann entscheiden - es spielt keine Rolle, ob ein ‚leichter‘ als die andere ist, für Langlebigkeit zählt es, dass Sie die Semantik rechts

erhalten

erinnern: is-a = Typ, hat-a = Rückhaltung

so in diesem Fall ein Portfolio ist logisch eine Sammlung von Geldern; ein Portfolio selbst ist nicht Typ Fonds , so Zusammensetzung ist die korrekte Beziehung

EDIT: ich die Frage falsch verstanden ursprünglich, aber die Antwort ist immer noch die gleiche. Ein Portfolio ist nicht eine Art von Liste, es ist eine eigenständige Einheit mit eigenen Eigenschaften. Zum Beispiel ist ein Portfolio ein Aggregat von Finanzinstrumenten mit einer anfänglichen Investitionskosten, ein Gesamtstromwert, eine Geschichte der Werte im Laufe der Zeit, etc., während eine Liste eine einfache Sammlung von Objekten ist. Ein Portfolio ist eine ‚Art der Liste‘ nur in dem abstrakten Sinne.

EDIT 2: Man denke über die Definition von Portfolio - es ist, ohne Ausnahme, als eine Sammlung von Dingen aus. Ein Künstlerportfolio eine Sammlung ihrer Kunstwerk ist, ein Portfolio der Web-Designer ist eine Sammlung ihrer Websites, Portfolio eines Anlegers aller Finanzinstrumente besteht, die sie besitzen, und so weiter. So klar brauchen wir eine Liste (oder eine Art), ein Portfolio zu vertreten, aber das bedeutet keineswegs, dass ein Portfolio eine Art von Liste ist!

Angenommen, wir entscheiden lassen Portfolio der Firma List erben. Das funktioniert, bis wir eine Aktie oder Anleihe oder Edelmetall- zum Portfolio, und dann plötzlich die falsche Vererbung funktioniert nicht mehr hinzufügen. Oder nehmen wir an Modell gefragt werden, sagen, Bill Gates Portfolio, und finden, dass die Liste wird aus dem Speicher laufen ;-) Realistischer, nach Zukunft Refactoring wird wahrscheinlich finden wir, dass wir von einer Basisklasse wie Asset-erben sollte, aber wenn wir haben schon von List geerbt dann können wir nicht.

Zusammenfassung: Unterscheidung zwischen den Datenstrukturen wählen wir ein Konzept darzustellen, und die Semantik (Typ Hierarchie) des Konzepts selbst

.

Die erste, weil Sie sollten versuchen, Komposition der Vererbung zu bevorzugen, wenn Sie können.

Es hängt davon ab, ob das Unternehmen ein Portfolio als Gruppe definiert (und nur eine Gruppe) von Geldern. Wenn es auch nur die entfernte Möglichkeit besteht darin, dass es andere Objekte enthalten könnte, sagen Sie „Eigenschaft“, dann weiter mit der Option 1. Gehen Sie mit der Option 2, wenn es eine starke Verbindung zwischen einer Gruppe von Fonds und das Konzept des Portfolios ist.

Was die Dehnbarkeit und usefullness 1 hat den leichten Vorteil gegenüber 2. ich wirklich mit dem Konzept nicht zustimmen, dass Sie immer einen über den anderen begünstigen sollte. Es hängt wirklich davon ab, was die wirklichen Leben Konzepte sind. Denken Sie daran, Sie können immer ^ refactor.

^ Für die meisten Fälle von immer. Wenn es öffentlich ausgesetzt ist, dann natürlich nicht.

Ich würde mit Option (1) -. Zusammensetzung, da man schließlich Attribute spezifisch für das Portfolio haben kann, anstatt die Mittel

Die erste, weil es "besteht aus" . => Zusammensetzung

Ich werde mit dem abweichen, was scheint die allgemeine Meinung zu sein. In diesem Fall denke ich, ein Portfolio sehr wenig ist mehr als eine Sammlung von Geldern ... Durch Vererbung Sie die Verwendung von mehreren Konstrukteuren ermöglichen, wie in

public Portfolio(CLient client) {};
public Portfolio(Branch branch, bool Active, decimal valueThreshold)
{
    // code to populate collection with all active portfolios at the specified branch whose total vlaue exceeds specified threshold 
}

und Indexer wie in:

public Fund this[int fundId] { get { return this.fundList[fundId]; } }

usw. etc.

, wenn Sie in der Lage sein wollen, Variablen vom Typ Portfolio als eine Sammlung von Mitteln zur Behandlung von mit der zugehörigen Syntax, dann ist dies der bessere Ansatz.

Portfolio BobsPortfolio = new Portfolio(Bob); 

foreach (Fund fund in BobsPortfolio)
{
    fund.SendStatement();
}

oder Sachen wie das

IS-A Beziehung Schiff für Erbschaften und HAS-A Beziehung Schiff für Komposition. Für oben genannte Szenario bevorzugen wir Zusammensetzung als PortfolioA eine Liste hat, und es ist nicht die Liste Typ. Erbschaften verwenden, wenn Portfolio A eine Art von Liste ist aber hier ist es nicht. Daher für dieses Szenario sollten wir Zusammensetzung bevorzugen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top