El modelo de dominio en el que estoy trabajando tiene entidades agregadas y secundarias de raíz. Algo así como el código siguiente:Cuál es la mejor práctica para las listas de solo lectura en NHibernate
class Order
{
IList<OrderLine> Lines {get;set;}
}
class OrderLine
{
}
Ahora quiero mi fin de controlar las líneas. Algo así:
class Order
{
OrderLine[] Lines {get;}
void AddLine(OrderLine line);
}
En este momento estamos utilizando el siguiente patrón:
class Order
{
private IList<OrderLine> lines = new List<OrderLine>();
OrderLine[] Lines {get {return this.lines;}}
void AddLine(OrderLine line)
{
this.orders.Add(line);
{
}
NHibernate se asigna directamente al campo líneas.
Ahora preguntas ...
- ¿Qué es lo que practicas en tales situaciones?
- ¿Alguien usa métodos: public IEnumerable GetLines()
- ¿Qué está utilizando como tipo de devolución para la propiedad? Puede ser ReadOnlyCollection o IEnumerable;
- ¿Puede ser que este no sea el mejor lugar para preguntar? Sugerir por favor.
Actualización: Parece victorias IEnumerable, sin embargo todavía no es la solución perfecta ...
con respecto a "Order.Lines [0] = nuevo OrderLine();" no puede. Cada vez que accede a las Líneas, se envía una nueva copia de la matriz (aunque esto no me gusta ...). IEnumerable tiene falta de funcionalidad de lista, es decir, Count, access by index. Por supuesto, LINQ cubre esto. ¡Gracias! –
Aquí, aún puede convertir la propiedad Líneas en una Lista y modificar la colección de esa manera ... –
Sí, pero tiene que hacer el casting. No se trata tanto de protección sino de mostrar lo que se le permite hacer a la colección. Puede devolver this.lines.AsReadonly() si desea esa seguridad adicional. – gcores