현재 작업하고있는 도메인 모델에는 루트 집계 및 하위 엔티티가 있습니다. 다음 코드와 같은 뭔가 : NHibernate에서 읽기 전용 목록에 대한 가장 좋은 방법은 무엇입니까
class Order
{
IList<OrderLine> Lines {get;set;}
}
class OrderLine
{
}
지금 내가 원하는 라인을 제어하기 위해 내 주문하기. 뭐 그런 : NHibernate에이 라인 필드에 직접 매핑됩니다
class Order
{
private IList<OrderLine> lines = new List<OrderLine>();
OrderLine[] Lines {get {return this.lines;}}
void AddLine(OrderLine line)
{
this.orders.Add(line);
{
}
:
class Order
{
OrderLine[] Lines {get;}
void AddLine(OrderLine line);
}
이 시점에서 우리는 다음과 같은 패턴을 사용하고 있습니다. 이제
질문 ... 당신이 그런 상황에서 무엇을 연습 할
- ?
- 방법을 사용하는 사람 : 공개 IEnumerable GetLines()
- 속성의 반환 형식으로 무엇을 사용하고 있습니까? ReadOnlyCollection 또는 IEnumerable 일 수 있습니다.
- 이것이 최고의 장소가 아닐 수도 있습니다. 제발 제안 해.
업데이트 : 당신은 NET 3.5을 사용하는 경우
class Order
{
private List<OrderLine> lines = new List<OrderLine>();
IEnumerable<OrderLine> Lines { get { return this.lines; } }
void AddLine(OrderLine line)
{
this.orders.Add(line);
}
}
모든 검색을 얻을 : 내가 사용하는 패턴은
대해서는 "Order.Lines [0] 새를 OrderLine에() =;" 그럴 순 없어. 라인에 접근 할 때마다 배열의 새로운 사본이 발행됩니다 (나는 이것을 좋아하지 않습니다 ...). IEnumerable에는 목록 기능이 부족합니다. 즉, 인덱스에 의한 액세스를 의미합니다. 물론 LINQ가이를 다룹니다. 감사합니다. –
여기에서 Lines 속성을 목록으로 캐스팅하고 그런 식으로 컬렉션을 수정할 수 있습니다. –
예,하지만 캐스팅을해야합니다. 보호에 관한 것이 아니라 컬렉션에 허용 된 것을 보여주는 것입니다. 여분의 보안을 원할 경우 this.lines.AsReadonly()를 반환 할 수 있습니다. – gcores