2009-04-07 11 views
0

Ich arbeite an einem Projekt, das ein reichhaltiges Domain-Modell hat.Wie nennst du 'Rückverweis'-Eigenschaften?

Einige meiner Klassen haben Sammlungen anderer Typen, und diese anderen Typen haben eine Eigenschaft, die sich auf ihren 'Besitzer' bezieht. Diese klingt vielleicht ein wenig kryptisch, so wäre ein Codebeispiel helfen:

public class Product 
{ 
    private IList<ProductPrice> _prices = new List<ProductPrice>(); 

    public void AddPrice(ProductPrice price) 
    { 
     price.Product = this; 
     _prices.Add (price); 
    } 
} 

public class ProductPrice 
{ 
    public DateTime ValidationDate {get; set;} 
    public Decimal Price {get; set;} 
    public Product Product {get; set;} 
} 

Die Frage ist: welcher Name bevorzugen Sie für die ‚Produkt‘ Eigenschaft der Product Klasse?

Würden Sie es nennen: - Produkt (wie es jetzt ist) - Inhaber - Gehört - etwas anderes?

Antwort

2

Produkt - es gibt keine Mehrdeutigkeit und die Benennung ist konsistent - Produkt bleibt Produkt überall.

Wenn die Eigenschaft von außen zugegriffen wird, ziehe ich würde dies mit:

price.Product.Name 

als dies:

price.Owner.Name 
1

Parent ist ein ziemlich generischer Begriff, den ich oft hilfreich finde - aber funktioniert auch ganz gut.

+0

Ich finde Eltern vielleicht nur zu allgemein, und genug, um nicht beschreibend. Das Produkt ist in Ordnung, aber in einigen Fällen fühlt es sich an, als ob "BelongsTo" besser ist. Dann denke ich: sollte ich solche Eigenschaften nicht konsequent benennen ... –

2

Produkt.

Wenn Sie viele Klassen wie diese haben und Backrefs generisch folgen möchten, erben Sie von einer HasParent-Schnittstelle mit einer abstrakten Methode parent(), und Eltern erben für eine Schnittstelle Parent. Aber andere, die der Objektgrafik oder dem Casting folgen, können nicht viel mit einem Elternteil tun.

EDIT: eigentlich lassen Sie mich das ändern. Ich arbeitete an einem Projekt, in dem wir einen semi-komplexen Objektgraph hatten, und wegen einiger schlechter Planung und einiger Anforderungsänderungen musste ich manchmal über das Diagramm greifen, um ein Datum von einem assoziierten Objekt zu erhalten. ComponentCost zu den übergeordneten Kosten des übergeordneten Elements, zu seinem untergeordneten CustomsInfo zu seinem untergeordneten ComponentCustomsInfo zu seiner Lookup-Tabelle DutyCalculation. (Ja, ich habe nicht das ursprüngliche Design, also nicht Stirnrunzeln bei mir.)

Eine parent() Methode könnte das etwas generischer gemacht haben. (Schließlich habe ich eine Reihe von Enums zusammengestellt (Java-Enums, also Singleton-Klassen), die den Graphen für mich sicher und sogar elegant durchquert haben. Trotzdem hätte ein Elternteil die Implementierung einfacher gemacht.)