Подходы к внесению изменений в производственные системы с использованием Castle ActiveRecord

#nhibernate #castle-activerecord

#nhibernate #castle-activerecord

Вопрос:

Я просмотрел несколько демонстрационных версий Castle ActiveRecord, и мне нравится, как быстро вы можете создать прототип приложения, но меня беспокоит, насколько полезным это будет, когда ваша производственная система будет запущена.

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

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

Использует ли кто-нибудь ActiveRecord (или аналогичный) не только для создания прототипов, но и для сопровождения и дополнительных функций, и если да, то каков ваш рабочий процесс??!

Я предполагаю использовать для этого решение для электронной коммерции с несколькими магазинами и несколькими языками. Не самое сложное приложение, но и не самое простое!

Сэм : )

Ответ №1:

Мы используем Castle ActiveRecord для ASP.NET Приложение MVC 3, которое мы пишем здесь. Я могу рассказать вам, что мы планируем сделать, как только приложение будет запущено в производство (через несколько недель).

У нас есть четырехступенчатая среда:

  • Разработка
  • Тестирование
  • Промежуточный
  • Производство

Мы используем Git для управления версиями и Jenkins для непрерывной интеграции. Приложение настроено на автоматическое удаление / воссоздание базы данных при каждом запуске для машины разработки (например, с использованием Visual Studio 2010); у нас есть список машин разработки, и приложение проверяет текущую запущенную машину, чтобы увидеть, следует ли ей удалять / создавать базу данных.

Когда мы отправляем изменения в Git в центральное (голое) хранилище, Дженкинс обнаруживает изменения (путем опроса). Он создает приложение, запускает тесты, развертывает приложение на нашем веб-сервере разработки и удаляет / повторно создает схему и тестовые данные на нашем экземпляре SQL Server для разработки.

Но это только для разработки, где важно быстрое прототипирование. Для развертывания в трех других средах мы планируем предоставить нашей группе серверов / инфраструктуры упакованный файл развертывания, который они могут запускать. Что касается части базы данных, наша группа баз данных будет использовать инструмент сравнения Red Gate для сравнения схемы между средой и ее предшественницей и обновления при необходимости. Таким образом, изменения схемы в процессе разработки «сравниваются и обновляются вперед» для тестирования, а тестирование — для этапа и так далее.

Это делает эти развертывания менее автоматическими, но гарантирует, что мы не повлияем на данные в этих средах.

Комментарии:

1. Большое спасибо за ваш подробный ответ, действительно очень полезно посмотреть, как вы его используете или, по крайней мере, планируете. Я пытаюсь представить ваш процесс в моей голове, когда ваши ребята будут разрабатывать (после запуска), будут ли они использовать свежую копию производственной базы данных или вы начинаете с пустой базы данных и заполняете ее тестовыми данными?

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

3. О, я думаю, это не то, о чем вы спрашивали. Что ж… на самом деле, хороший вопрос. Это то, о чем мне нужно подумать. Вероятно, лучшим вариантом было бы использовать существующие данные, насколько это возможно.

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