Управление версиями схемы с использованием Fluent NHibernate - PullRequest
1 голос
/ 08 ноября 2011

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

  • Что поддерживает (Свободно) NHibernate, что в принципе позволило бы мне выполнить требования? Я бы предпочел использовать Fluent API, если это возможно;
  • Что я собираюсь написать сам, чтобы разработать рабочее решение?

В общих чертах, требования следующие:

  • То, что я хотел бы сделать, это использовать FNH для сохранения и повторной гидрации моделей для настольных приложений, которые, например, будут иметь примерно ту же модель использования, что и MS Office - то есть работа будет сохраняться как автономные файлы, которые загружается в локальный экземпляр приложения.
  • Текущая версия приложения должна иметь возможность импортировать файлы из всех предыдущих версий и сохранять всю информацию, кроме той, которая объявлена ​​пользователю неподдерживаемой; под «импортом» я подразумеваю «записать информацию о модели, содержащуюся в файле A, в новый файл B, чтобы файл B был полностью совместим с текущей версией, помимо той, которая объявлена ​​неподдерживаемой».
  • Текущая версия приложения должна иметь возможность экспортировать текущую модель, чтобы соответствовать только самой последней проблеме предыдущей основной версии приложения. Не требуется предоставлять устаревшую совместимость с любыми более старыми ревизиями предыдущей основной версии.
  • Характер продукта таков, что обновления формата файлов происходят довольно часто - стремятся предоставлять пользователю каждые шесть месяцев или около того, в случае необходимости, как примерную цифру, и изменяются в процессе разработки гораздо чаще, чем что.

Я не возражаю против написания кода для обработки этого при условии, что:

  • Кодирование не требует чрезмерного количества времени для сколь угодно сложных изменений схемы;
  • Я могу проверить, завершен ли перевод между версиями, вызвав API FNH с помощью модульных тестов;
  • Я могу убедиться в том, что любая конкретная модель будет корректно совершать двустороннюю передачу между версиями и будет терять только те данные, которые объявлены пользователю неподдерживаемыми между версиями продукта;

Итак, подведем итог:

  • Что, если что-нибудь, предоставляет Fluent NHibernate для включения этого варианта использования?
  • Могут ли требования быть легко удовлетворены, как они есть, или мне придется сделать их более конкретными и ограниченными?
  • Что я должен исследовать в отношении кодирования себя?

1 Ответ

2 голосов
/ 09 ноября 2011

Я бы предложил использовать базу данных документов, что-то вроде RavenDB, MongoDb и т. Д., Для того, что вы пытаетесь сделать.Я думаю, что это было бы лучше, чем пытаться заставить RDBMS (sql server, oracle и т. Д.) И, следовательно, nHibernate сделать что-то, что не так уж и хорошо.Нельзя сказать, что это невозможно, но вы в конечном итоге перепрыгнете через все виды обручей, чтобы выполнить то, что вы просите.

Следует отметить, что Fluent Nhibernate только ставит Fluent API поверх Class Mappingnhibernate.

...