Есть ли.NET Полиморфная Платформа Данных

Я начинаю работу над новым проектом, который это, было бы намного легче, если бы был некоторый способ сделать различные модели данных полиморфными. Я смотрю на использование Платформы Объекта 4.0 (когда это выпущено), но не могли определить, сможет ли это на самом деле работать.

Вот основной сценарий. Я реализован система комментария и хотел бы смочь подключить ее ко многим различным типам моделей. Возможно, я хочу комментарии к профилю человека, и комментирует веб-страницу. Путем я сделал бы, это в прошлом должно создать отношения между таблицей человека и таблицей комментария отдельно от отношений между таблицей веб-страницы и таблицей комментария. Я думаю, что это приводит к чрезмерно сложной структуре таблицы в базе данных, как бы то ни было.

Было бы лучше, если я мог бы просто смочь добавить интерфейс к объектам, я хочу комментарии и затем упрощаю структуру таблицы в базе данных к единственным отношениям.

Проблема, с которой я сталкиваюсь, состоит в том, что я, кажется, не знаю правильную терминологию для нахождения информации о том, как сделать этот тип вещи. Любая справка, которую любой может обеспечить, значительно ценилась бы.

8
задан Josh 14 January 2010 в 16:40
поделиться

2 ответа

Если вы проектируете свои «таблицы комментариев», чтобы быть комментарием типа-агностик (просто основ, как идентификатор, дата и время, а также контент текста), вы можете затем использовать один дополнительный Таблица, которая отображает их всех.

public interface ICommentable
{
   int CommentTypeCode
   int Id
   ...
}

Теперь, когда таблица Mapber содержит столбцы:

  • comment_type_code
  • target_object_id
  • comment_id

Ваши комментарии все идут в одной таблице, с идентификатором Ваши различные «целевые объекты» должны иметь идентификатор того же типа

, теперь вы можете произвольно добавлять новые «комментировать» объекты в вашу систему без изменения таблицы комментариев или таблицы Mapber - просто назначьте его код нового типа и Создайте таблицу с помощью реквизитной идентификационной колонки.

2
ответ дан 6 December 2019 в 00:07
поделиться

Я выполняю это с помощью LinqtoSQL и частичных классов. Для каждого класса, который я хочу реализовать интерфейс, я перехожу, чтобы создать сгенерированный без инструмента, который содержит часть частичного класса, который объявляет класс для реализации интерфейса.

Например:

Сгенерированный код:

// this code is generated by a tool blah blah
partial class FooComment {
    // all the generated crap
    string Author {
        // ...
    }
    // etc
}

Интерфейс:

interface IComment{
    string Author{ get; }
    // etc
}

Мой код:

// lovingly hand-written by me
partial class FooComment : IComment {
}

Теперь, если вы хотите бросить любую группу FOOComments в icomment, используйте Метод расширения LINQ:

db.FooComments.Cast<IComment>()
2
ответ дан 6 December 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: