Какой интерфейс коллекции .Net использовать в доменной модели? - PullRequest
0 голосов
/ 07 октября 2010

Используя схему Northwind в качестве примера, какой интерфейс сбора вы бы использовали при следующих обстоятельствах.

Схема Northwind http://northwind.techmatica.com/images/NorthwindLayout.JPG.

Customer

У клиента есть коллекция заказов.Для целей этого примера коллекция Orders доступна только для чтения.

Order

Order имеет коллекцию OrderDetails.В коллекцию можно добавить OrderDetail.

Сотрудник

Сотрудник имеет коллекцию территорий.Сотрудник может принадлежать к 0 или более территориям, но идентификатор территории должен быть уникальным.

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Используйте ICollection<T> во всех трех случаях для Orders и OrderDetails.Не существует специального интерфейса для коллекций только для чтения, это обрабатывается реализацией (в этом случае вы можете использовать ReadOnlyCollection<T> в качестве конкретного типа).Вы также можете использовать IList<T>, но он добавляет поддержку доступа только по индексу, что обычно не имеет смысла в реляционной модели.

Для территорий вы можете использовать ISet<T> (при условии, что вы используете .NET 4.0).Классы, которые реализуют этот интерфейс, не допускают дублирования элементов.

1 голос
/ 07 октября 2010

Требуется немного больше информации. Например, почему коллекция заказов доступна только для чтения? Как использовать эти коллекции? Здесь много переменных.

Ключ, представьте их как самый простой интерфейс, который соответствует вашим потребностям. Не используйте ICollection<T>, если вы всегда просто перебираете список целиком и никогда не добавляете его. С другой стороны, не используйте IEnumerable<T>, если вы хотите привести к IList<T> для добавления или получения предметов по индексу.

Например, если вы создали модель для презентации через MVVM, я могу предложить вам использовать BindingList. Если вы выполняете операции суммирования только для заказов, я могу предложить простую IEnumerable<T>. Etc

...