Domänenmodell, an dem ich arbeite, hat Stammaggregat und untergeordnete Entitäten. So etwas wie den folgenden Code:Was ist die beste Vorgehensweise für schreibgeschützte Listen in NHibernate?
class Order
{
IList<OrderLine> Lines {get;set;}
}
class OrderLine
{
}
Jetzt möchte ich meine Bestellung Linien zu steuern. So etwas Ähnliches:
class Order
{
OrderLine[] Lines {get;}
void AddLine(OrderLine line);
}
Zu dieser Zeit verwenden wir das folgende Muster:
class Order
{
private IList<OrderLine> lines = new List<OrderLine>();
OrderLine[] Lines {get {return this.lines;}}
void AddLine(OrderLine line)
{
this.orders.Add(line);
{
}
NHibernate direkt an den Linien Feld abgebildet wird.
Jetzt Fragen ...
- Was tun Sie in solchen Situationen üben?
- Haben Methoden jemand Gebrauch: öffentliche IEnumerable GetLines()
- Was werden Sie als Rückgabetyp für Eigenschaft verwenden? Kann ReadOnlyCollection oder IEnumerable sein;
- Vielleicht ist dies nicht der beste Ort, um zu fragen? Schlage bitte vor.
Update: Es scheint, IEnumerable gewinnt, jedoch immer noch Lösung ist nicht perfekt ...
In Bezug auf "Order.Lines [0] = new Orderline();" es kann nicht. Jedes Mal, wenn Sie auf die Zeilen zugreifen, wird eine neue Kopie des Arrays ausgegeben (das gefällt mir aber nicht ...). IEnumerable hat keine Listenfunktionalität, ich meine Count, Zugriff nach Index. Natürlich deckt LINQ dies ab. Vielen Dank! –
Hier können Sie weiterhin die Eigenschaft Linien in eine Liste umwandeln und die Sammlung auf diese Weise ändern ... –
Ja, aber Sie müssen das Casting durchführen. Es geht nicht so sehr um Schutz, sondern darum, zu zeigen, was man mit der Sammlung machen darf. Sie können this.lines.AsReadonly() zurückgeben, wenn Sie diese zusätzliche Sicherheit wünschen. – gcores