Доступ к базе данных через коллекции
У меня есть трехуровневое приложение, где мне нужно получить результаты базы данных и заполнить пользовательский интерфейс. У меня есть класс MessagesCollection, который имеет дело с сообщениями. Я загружаю своего пользователя из базы данных. При создании экземпляра пользователя (т.е. нового пользователя ()) выполняется MessageCollection Messages = new MessageCollection(this). Коллекция сообщений принимает пользователя в качестве параметра.
User user = user.LoadUser("bob");
Я хочу получить сообщения для Боба.
user.Messages.GetUnreadMessages();
GetUnreadMessages вызывает моего провайдера бизнес-данных, который, в свою очередь, вызывает уровень доступа к данным. Поставщик бизнес-данных возвращает список.
Мой вопрос - я не уверен, что здесь лучше всего - если у меня есть коллекция сообщений в массиве внутри класса MessagesCollection, я мог бы реализовать ICollection, чтобы обеспечить GetEnumerator() и возможность обхода сообщений. Но что произойдет, если сообщения изменятся и пользователь загрузит старые сообщения?
Как насчет больших коллекций сообщений? Что если бы у моего пользователя было 10000 непрочитанных сообщений? Я не думаю, что доступ к базе данных и возвращение 10 000 объектов Message будет эффективным.
1 ответ
Похоже, что если вы выполняете отдельный вызов для загрузки сообщений после пользователя, то вы совершаете две поездки в БД. Если возможно, я бы подумал о том, чтобы совершить одну поездку и загрузить пользователя сообщениями за одну поездку. Что касается больших наборов данных, вы можете рассмотреть какой-то механизм подкачки. Для пользователя было бы невозможно понять все сообщения в одном представлении, поэтому было бы предпочтительным отображать их по одной странице.
Коллекция сможет отслеживать изменения без проблем (события или нет). Вы можете представить изменения вашей сущности, используя какое-то пользовательское событие или что-то вроде интерфейса INotifyPropertyChanged.