Il modello di dominio su cui sto lavorando ha aggregati radice e entità figlio. Qualcosa come il seguente codice:Qual è la best practice per gli elenchi di sola lettura in NHibernate
class Order
{
IList<OrderLine> Lines {get;set;}
}
class OrderLine
{
}
Ora voglio la mia fine di controllare le linee. Qualcosa di simile:
class Order
{
OrderLine[] Lines {get;}
void AddLine(OrderLine line);
}
In questo momento stiamo utilizzando il seguente schema:
class Order
{
private IList<OrderLine> lines = new List<OrderLine>();
OrderLine[] Lines {get {return this.lines;}}
void AddLine(OrderLine line)
{
this.orders.Add(line);
{
}
NHibernate viene mappato direttamente al campo linee.
Ora domande ...
- Cosa professi in tali situazioni?
- Qualcuno usa i metodi: public IEnumerable GetLines()
- Cosa si utilizza come tipo di ritorno per la proprietà? Può essere ReadOnlyCollection o IEnumerable;
- Forse questo non è il posto migliore per chiedere? Suggerisci per favore
Aggiornamento: Sembra vittorie IEnumerable, tuttavia la soluzione ancora non è perfetta ...
in materia di "Order.Lines [0] = new OrderLine();" non può. Ogni volta che accedi alle Linee, viene emessa una nuova copia dell'array (non mi piace però ...). IEnumerable ha la mancanza di funzionalità di elenco, intendo Count, accesso per indice. Naturalmente, LINQ copre questo. Grazie! –
Qui è ancora possibile trasmettere la proprietà Lines a un elenco e modificare la raccolta in questo modo ... –
Sì, ma è necessario eseguire il casting. Non si tratta tanto di protezione, ma di mostrare ciò che sei autorizzato a fare nella raccolta. Puoi restituire this.lines.AsReadonly() se desideri una maggiore sicurezza. – gcores