Я хочу создать каталог продуктов, в котором предусмотрена сложная информация о каждом из типов продуктов в каталоге. Типы продуктов имеют совершенно разные данные, связанные с ними; некоторые с только общими данными, некоторые с несколькими дополнительными полями данных, некоторые со многими полями, специфичными для данного типа продукта. Мне нужно легко добавлять новые типы продуктов в систему и уважать их конфигурацию, и мне бы хотелось получить советы о том, как проектировать модель данных для этих продуктов, а также о том, как обрабатывать постоянство и поиск.
Некоторые продукты будут очень общими, и я планирую использовать общий интерфейс для редактирования этих продуктов. Продукты, которые имеют расширяемую конфигурацию, связанную с ними, получат новые представления (и контроллеры), созданные для их редактирования. Я ожидаю, что все пользовательские продукты будут иметь собственную модель, но будут иметь общий базовый класс. Базовый класс будет представлять общий продукт, не имеющий пользовательских полей.
Примеры продуктов, которые необходимо обработать:
- Универсальный продукт
- лампочка
- Описание
- Тип (с перечислением флуоресцентных, накаливания, галогеновых, светодиодных)
- 1020 * Мощность *
- Стиль (перечисление наводнений, пятен и т. Д.)
- Холодильник
- Описание
- Марка
- Модель
- Стиль (с перечислением в доменной модели)
- Информация о водяном фильтре
Я предполагаю использовать MEF для обнаружения типов продуктов, доступных в системе. Я планирую создавать сборки, содержащие модели типов продуктов, представления и контроллеры, помещать эти сборки в корзину, а приложение обнаруживать новые типы продуктов и отображать их в навигации.
С использованием SQL Server 2008, как лучше всего хранить продукты этих различных типов, добавляя новые типы без необходимости расширения схемы базы данных?
При поиске данных из базы данных, как лучше всего перевести эти полиморфные сущности в их правильные доменные модели?
Обновления и уточнения
Чтобы избежать эффекта внутренней платформы, если для каждого типа продукта существует таблица базы данных (для хранения продуктов этого типа), то мне все равно нужен способ извлечения всех продуктов, охватывающих типы продуктов. Как это будет достигнуто?
Я поговорил с Нихилком более подробно о его справке по SharePoint. В частности, он говорил об этом: http://msdn.microsoft.com/en-us/library/ms998711.aspx. На самом деле это выглядит довольно привлекательно. Нет необходимости разбирать XML; и существует некоторая индексация, которая позволяет выполнять простые и быстрые запросы к данным. Например, я мог бы сказать «найти все 75-ваттные лампочки», зная, что первый столбец int в строке - это мощность, когда строка представляет лампочку. Что-то (NHibernate?) В уровне приложения будет определять сопоставление типа продукта со схемой пользовательских данных.
Отказались от схемы с таблицей свойств, поскольку это может привести к большому количеству строк на продукт. Это может привести к трудностям с индексом, плюс все запросы должны будут по существу повернуть данные.