Я новичок программист и нуждаюсь в некоторой помощи с дизайном классов для моего приложения.Дизайн классов для приложения менеджера мультимедиа usig Db4o для эффективного запроса
Мы работаем над дизайном настольного приложения для медиа-менеджера (с использованием .NET Framework 4.0). Приложение управляет хранилищем носителей на локальном жестком диске (аналогично XBMChttp://xbmc.org/).
Пользователь может получить метаданные (информацию о конкретном фильме, роли и т. Д.) С нашего собственного сервера, который, в свою очередь, получит метаданные из одного или нескольких источников. Пользователи могут затем связать локальные медиа-файлы в этих концептуальных сущностей (файл bigbuckbunny.avi может быть связан с фильмом Big Bucks Банни.)
сервер и клиент будет общаться с помощью WCF (эта деталь, вероятно, не очень релевантно)
Мы хотели бы предложить поддержку запросов пользователей. Пользователь должен иметь возможность искать заголовки, соответствующие определенным критериям.
Например, она может искать [фильм, который имеет [жанры Action И Камеди] И [звезды Том Круз]].
Идея состоит в том, чтобы на сервере выполнялось все запросы, которые затем возвращают результирующий набор клиенту.
Мы хотим использовать db4o (или, возможно, некоторые другие ООСУБД для хранения данных на сервере и на клиенте) Мы надеемся, чтобы быть в состоянии выполнить все запросы только через LINQ (без QBE или SODA)
Теперь, реальный вопрос. Как мы разрабатываем классы, чтобы их можно было эффективно запросить.
дизайн мы первоначально думали только о том, как это:
class Artist
{
String Name;
.
.
.
}
class CrewMemberRole
{
Artist a;
String roleType;
String characterName;
}
class Movie
{
String title;
List<CrewMemberRole> Crew;
}
Однако проблема с этим видом дизайна является то, что любой запрос, который не определяет конкретный фильм, придется перебирать всю коллекцию Объекты фильма и пройдите через каждого члена списка и найдите, присутствует ли конкретный художник в этом списке. Это приемлемо? Я сомневаюсь в этом.
Есть два возможных решения, которые мы могли бы придумать:
Используйте идентификаторы (возможно игнорировать цель использования ООСУБДА) и связать каждый художник со всеми фильмами, в которых он работал в.
Как и выше, но используйте ссылки на объекты вместо идентификаторов.
Не похоже, что это отличное решение.
Что нам делать? Было бы также оценено даже частичное решение или ссылки на соответствующие внешние ресурсы.
Я не думаю, что вы хотите «дизайн классов, чтобы они могли быть эффективны опрошены.» Я думаю, что вы хотите создавать свои классы так, что они представляют собой правильную модель предметной области. И что касается повторения всей коллекции объектов Movie ... зачем вам это нужно? Если вы используете запрос linq, то вы не получаете все объекты и итерации через каждый. По крайней мере, этого не должно быть. –
Благодарим за отзыв. Учитывая классы скелетов, которые я включил, не могли бы вы написать пример запроса LINQ, где все фильмы от конкретного исполнителя могут быть получены из объекта объекта db объектов. –
Перейдите с помощью опции 2, используя ссылки на объекты, db4o будет обрабатывать это изящно по своим запросам быстро, используя ссылки на объекты. – German