Mô hình miền mà tôi đang làm việc trên đó có các thực thể tổng hợp và con gốc. Nội dung nào đó giống như mã sau:Thực tiễn tốt nhất cho các danh sách chỉ đọc trong NHibernate
class Order
{
IList<OrderLine> Lines {get;set;}
}
class OrderLine
{
}
Bây giờ tôi muốn Đơn đặt hàng của mình kiểm soát các dòng. Một cái gì đó như thế:
class Order
{
OrderLine[] Lines {get;}
void AddLine(OrderLine line);
}
Tại thời điểm này chúng tôi đang sử dụng mô hình sau:
class Order
{
private IList<OrderLine> lines = new List<OrderLine>();
OrderLine[] Lines {get {return this.lines;}}
void AddLine(OrderLine line)
{
this.orders.Add(line);
{
}
NHibernate là ánh xạ trực tiếp đến lĩnh vực dòng.
Bây giờ câu hỏi ...
- để bạn thực hành gì trong những tình huống như vậy?
- Có ai sử dụng phương pháp: Số lượt truy cập công khai trên IE()
- Bạn đang sử dụng làm loại trả lại cho thuộc tính? Có thể là ReadOnlyCollection hoặc IEnumerable;
- Có thể đây không phải là nơi tốt nhất để hỏi? Đề nghị xin vui lòng.
Cập nhật: Có vẻ chiến thắng IEnumerable, tuy nhiên giải pháp vẫn chưa hoàn hảo ...
Về "Order.Lines [0] = Hang mới();" nó không thể. Mỗi lần bạn truy cập vào bản sao Lines mới của mảng được phát hành (tôi không thích điều này mặc dù ...). IEnumerable có thiếu chức năng danh sách, tôi có nghĩa là Đếm, truy cập theo chỉ mục. Tất nhiên, LINQ bao gồm điều này. Cảm ơn bạn! –
Tại đây, bạn vẫn có thể truyền thuộc tính Đường dây thành Danh sách và sửa đổi bộ sưu tập theo cách đó ... –
Có, nhưng bạn phải thực hiện quá trình truyền. Nó không phải là quá nhiều về bảo vệ nhưng về việc hiển thị những gì bạn được phép làm cho bộ sưu tập. Bạn có thể trả lại this.lines.AsReadonly() nếu bạn muốn bảo mật bổ sung đó. – gcores