Архитектурная проблема: история изменений страницы CMS - PullRequest
0 голосов
/ 24 января 2012

Для моего личного веб-сайта в настоящее время я разрабатываю модуль CMS. Одной из особенностей модуля CMS является история изменений страниц. Уровень доступа к данным сайта разрабатывается в Entity Framework Code First.

Проблема, с которой я столкнулся: как назначить «активную» ревизию для страницы?

В настоящее время я вижу два варианта:

  • Класс / таблица Page будет иметь свойство / поле CurrentRevision, которое будет указывать на активную версию страницы.

    • Профи, очевидно, умеет легко его искать и может легко его изменить.
    • Дело в том, что поле должно быть обнуляемым, иначе между таблицами будет циклическая зависимость, не уверенная, примет ли EF это. Кроме того, для сохранения изменений в EF потребуется два шага.
  • Класс / таблица редакций страницы будет иметь свойство IsOnline.

    • Профи, сохранение займет всего один шаг.
    • Недостатки в том, что это, очевидно, не помешает иметь несколько активных ревизий, также не предотвратит отсутствие активных ревизий. Кроме того, поиск в запросах LINQ не может быть упрощен, потому что мы всегда должны будем использовать First (или что-то подобное).

Как лучше всего это реализовать?

1 Ответ

1 голос
/ 24 января 2012

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

Вам все равно нужно будет использовать второй подход, если вы хотите предоставить доступ к последней ревизии, поскольку последняя ревизия не обязательно должна быть опубликованной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...