Миграция FHIR и обратная совместимость

Как разработчики системы, мы сталкиваемся с дилеммой при переходе с одной версии FHIR на другую. Мы начали с FHIR 0.0.81, а затем 10 сентября 2014 года перешли на версию 2833 SVN, чтобы исправить ошибку. Как было предложено, мы загрузили код Java из магистрали SVN и следовали инструкциям на странице FHIR Build Process.

FHIR 0.0.82 Несовместимость

Теперь, когда доступен FHIR 0.0.82, мы хотим перейти на выпущенную версию. Однако после загрузки 0.0.82 мы заметили, что некоторые ресурсы, такие как Appointment, которые были в магистрали rev2833, отсутствуют в версии 0.0.82. Это приводит к нашим первым вопросам:

  1. Что содержит транк, если он не содержит последнего кода, предназначенного для следующего выпуска?

  2. Должен ли кто-нибудь использовать то, что находится в багажнике?

  3. Есть ли ветка релиза, из которой была создана 0.0.82?

Несовместимость магистральных линий

Поскольку наш код зависит от ресурсов, представленных в магистрали, но не включенных в 0.0.82, мы должны продолжать проверять FHIR непосредственно из SVN. 21 октября 2014 г. мы загрузили Java-код SVN версии 3218. Когда мы интегрировали этот код в нашу систему, мы обнаружили множество проблем совместимости. Вот некоторые из них:

  1. Различные значения Enum изменены с нижнего регистра на верхний, включая Patient.AdministrativeGender и HumanName.NameUser. Хотя соответствие соглашению об именах Java - хорошая идея, изменение основных типов данных нарушает компиляцию.

  2. Имена методов изменились, что также привело к ошибкам компиляции. Мы также обнаружили, что произошли одновременные изменения имен. Например, в классе HumanName старый setTextSimple (String) теперь имеет значение setText (String), а старый setText (StringType ) теперь setTextElement (StringType). И имя, и тип параметра setText () изменились, что сделало миграцию подверженной ошибкам, потому что при каждом использовании нужно решать, изменять ли метод или его параметр.

  3. Тип ресурса ResourceReference изменил имя класса. В одном только пакете модели FHIR было затронуто 859 вхождений ResourceReference в 61 файл. Сюда не входят изменения, которые произошли в других пакетах FHIR, или изменения, которые будут отражаться в коде нашего приложения и наших схемах базы данных.

  4. Мы заметили несколько новых ресурсов в магистральном коде rev3218, включая NewBundle. Ранее мы предлагали, чтобы пакеты были ресурсами, поэтому приятно видеть это изменение. Однако, поскольку магистраль не имеет обратной совместимости с выпусками 0.0.8x, я не уверен, придется ли нам поддерживать как старый, так и новый способ синтаксического анализа и составления пакетов JSON и XML.

Чтобы прояснить ситуацию, важно понимать, что некоторые из вышеупомянутых изменений FHIR не только влияют на компиляцию, но и могут легко внести небольшие ошибки во время выполнения. Кроме того, изменения FHIR могут потребовать изменения схемы базы данных и миграции данных в некоторых приложениях. Например, наше приложение сохраняет потоки ресурсов JSON в базе данных. Для чего-то столь же простого, как изменение значения перечисления с «male» на «MALE», требуются утилиты миграции, которые обновляют существующее содержимое базы данных.

Идти вперед

Мы вкладываем большие средства в FHIR; мы хотим, чтобы он был успешным и широко применялся в качестве стандарта. Для этого необходимо решить проблемы обратной совместимости и миграции версий. В этом тщетном случае любой свет, который может быть пролит на следующий вопрос, продвинет всех нас вперед:

  1. Какова цель строки кода 0.0.8x? Кто его целевые пользователи?

  2. Какова цель кода в транке? Кто его целевые пользователи?

  3. Ожидается ли, что пользователи 0.0.8x когда-нибудь перейдут на кодовую базу транка?

    1. If so, what migration strategy will used to address the many incompatibilties between the codebases?
  4. Какова политика устаревания кода в каждой базе кода?

  5. Какой уровень обратной совместимости можно ожидать от редакции к редакции в коде в транке?

  6. Есть ли дорожная карта FHIR, которую разработчики систем могут использовать для планирования собственных циклов разработки?

Спасибо, Rich C


person Rich C.    schedule 22.10.2014    source источник


Ответы (2)


Приношу свои извинения за то, что не задокументировал то, как управление версиями больше влияет на эталонную реализацию Java. Я так и сделаю. Я предполагаю, что вы знакомы с политикой управления версиями здесь: http://hl7-fhir.github.io/history.html

На данный момент существует две версии FHIR. Первый - это DSTU 1. Это ответвление SVN ("dstu1"), которое изменяется только для важных отчетов об ошибках. Эталонная реализация поддерживается и имеет обратную совместимость. Вторая версия - это магистральная версия, в которой мы готовимся ко второму выпуску ДСТУ. На данный момент svn очень нестабилен - постоянно меняется, и мы иногда отменяем изменения несколько раз, поскольку рассматриваем различные варианты в комитете. Кроме того, существует несколько серьезных изменений между DSTU1 и транком, и их ждут новые. Поэтому не стоит ожидать, что переключение между DSTU1 и транком будет безболезненным. Разработчики также не должны использовать транк, если они действительно не на переднем крае (и тесно связаны, например, канал Skype для разработчиков). Когда основной канал стабилен и мы думаем, что стоит выпустить бета-версию для разработчиков, мы обновляем версии и историю версий и делаем выпуск здесь: http://hl7.org/implement/standards/FHIR-Develop/ и выпустите пакет maven для этой версии.

В магистрали, поскольку было внесено много изменений, мы также изменили константы на верхний регистр и изменили способ создания свойств get / set. Согласитесь, у этого есть цена, но уже была цена за переход с DSTU1 на транк. И когда я сделаю бета-версию (на самом деле, скоро), я обновлю ссылочный номер реализации Java и так далее. Обратите внимание, что константы Java перешли в верхний регистр, но константы формата провода не изменились, поэтому сохраненные потоки json в порядке (хотя они нарушены многими другими изменениями в спецификации)

Учитывая объем изменений между DSTU 1 и магистралью (их еще нет списка, мне придется подготовить его, когда я обновлю бета-версию), вы должны ожидать обширных доработок для перехода. В настоящее время я поддерживаю единый источник, который реализует сервер для обоих (на Паскале http://github.com/grahamegrieve/fhirserver), но я подозреваю, что этот подход вот-вот нарушится из-за изменения, которое представляет NewBundle.

Итак, конкретные ответы:

  1. Какова цель строки кода 0.0.8x? Кто его целевые пользователи?

Поддержка пользователей существующей спецификации ДСТУ1

  1. Какова цель кода в транке? Кто его целевые пользователи?

подготовка к ДСТУ 2. Он должен стать более стабильным через несколько недель - как только мы начали вносить обратно несовместимые изменения, мы пытаемся сделать как можно больше из них сейчас

  1. Ожидается ли, что пользователи 0.0.8x когда-нибудь перейдут на кодовую базу транка?

да, когда выйдет DSTU 2, или, по крайней мере, когда мы начнем проводить коннектатоны по транковой версии, готовящейся к DSTU2 (первый запланирован на январь)

  1. Если да, то какая стратегия миграции будет использоваться для устранения многих несовместимостей между базами кода?

Придется много переписывать код. Мы можем выпустить преобразования xml для переноса ресурсов из DSTU1 в DSTU2, когда он будет завершен, но это может быть даже невозможно.

4а. Какова политика устаревания кода в каждой базе кода?

ДСТУ 1 крайне консервативен. ствол успокоится, хотя мы никогда не гарантируем устойчивости. Бета-версии будут актуальными по времени.

  1. Какой уровень обратной совместимости можно ожидать от редакции к редакции в коде в транке?

На самом деле, на данный момент нет.

  1. Есть ли дорожная карта FHIR, которую разработчики систем могут использовать для планирования собственных циклов разработки?

Что ж, в дополнение к политике версий, упомянутой выше, есть следующее: http://www.healthintersections.com.au/?p=2234 (что было для вас, нет?)

person Grahame Grieve    schedule 22.10.2014
comment
Спасибо, Грэхем, за подробное объяснение. Эта информация - именно то, что нам нужно для планирования нашего курса. И да, ваш предыдущий ответ был адресован мне, но я никогда не видел этого до сегодняшнего дня! Наш план - оставаться на треке DSTU2 и ждать предстоящей бета-версии основной ветки. Планируем ехать на следующий коннектатон. Мы также заинтересованы в участии в Skype-канале разработчика. Как бы мы это сделали? - person Rich C.; 24.10.2014
comment
канал Skype - инструкции вверху слева на вики-странице FHIR: wiki.hl7.org/index.php ? title = FHIR - person Grahame Grieve; 24.10.2014

В качестве дополнения к ответу Грэхема: на вкладке «Документация» спецификации есть только одна выделенная жирным шрифтом ссылка - Прочитать ранее использовать. Эта страница, которая пытается прояснить, что выпуск ДСТУ не обещает ни прямой, ни обратной совместимости. Не может - вся цель DSTU состоит в том, чтобы собрать отзывы реализации о том, какие существенные изменения необходимы, чтобы сделать стандарт готовым к тому, чтобы он был заблокирован в камне, когда мы станем нормативным. Если бы мы обещали прямую и обратную совместимость в ДСТУ, то мы бы застряли в любых решениях, которые мы приняли во время первоначального проекта, независимо от того, окажутся они хорошими или нет.

person Lloyd McKenzie    schedule 23.10.2014