Доступ к базе данных через коллекции

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

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

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

 user.Messages.GetUnreadMessages();

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам