Доступ к базе данных через коллекции - PullRequest
0 голосов
/ 31 марта 2010

У меня есть трехуровневое приложение, в котором мне нужно получить результаты базы данных и заполнить пользовательский интерфейс.У меня есть класс MessagesCollection, который имеет дело с сообщениями.Я загружаю своего пользователя из базы данных.При создании экземпляра пользователя (т.е. нового пользователя ()) выполняется MessageCollection Messages = new MessageCollection (this).Коллекция сообщений принимает пользователя в качестве параметра.

 User user = user.LoadUser("bob");

Я хочу получать сообщения для Боба.

 user.Messages.GetUnreadMessages();

GetUnreadMessages вызывает моего поставщика бизнес-данных, который, в свою очередь, вызывает уровень доступа к данным,Поставщик бизнес-данных возвращает List.

У меня такой вопрос - я не уверен, что здесь лучше всего использовать - если у меня есть коллекция сообщений в массиве внутри класса MessagesCollection, я мог бы реализовать ICollection для предоставления GetEnumerator() и возможность прохождения сообщений.Но что произойдет, если сообщения изменятся, а пользователь загрузит старые сообщения?

А как насчет больших коллекций сообщений?Что если бы у моего пользователя было 10000 непрочитанных сообщений?Я не думаю, что доступ к базе данных и возвращение 10 000 объектов Message будет эффективным.

1 Ответ

0 голосов
/ 31 марта 2010

Похоже, что если вы выполняете отдельный вызов для загрузки сообщений после пользователя, то вы совершаете 2 поездки в БД. Если возможно, я бы подумал о том, чтобы совершить одну поездку и загрузить пользователя сообщениями за одну поездку Что касается больших наборов данных, вы можете рассмотреть какой-то механизм подкачки. Для пользователя было бы невозможно понять все сообщения в одном представлении, поэтому было бы предпочтительным отображать их по одной странице.

Коллекция сможет отслеживать изменения без проблем (события или нет). Вы можете представить изменения вашей сущности, используя какое-то пользовательское событие или что-то вроде интерфейса INotifyPropertyChanged.

...