Эволюция модели данных - PullRequest
1 голос
/ 06 июня 2010

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

Самая близкая вещь, которую я могу найти от Google, - версия контракта данных. Но это похоже на конкретную тему .net. Мне интересно, применяется ли та же практика в мире Java, или существует другой или общий способ решения проблемы эволюции модели данных.

Спасибо

Ответы [ 2 ]

1 голос
/ 06 июня 2010

Есть некоторые инструменты, которые могут помочь, посмотрите на LiquiBase .

В этой статье представлен хороший обзор developerworks

1 голос
/ 06 июня 2010

Нет простых ответов на этот вопрос ни в Java, ни в области моделирования данных.

  • Некоторые изменения совместимы вверх; например добавление новых методов, необязательных полей, подклассов и т. д.
  • Некоторые изменения не совместимы, но могут быть обработаны с помощью простого преобразования; например добавление обязательного поля может поддерживаться преобразованием, которое добавляет дополнительный аргумент конструктора.
  • Некоторые изменения неизбежно требуют серьезного вмешательства программиста.

Еще один момент, на который следует обратить внимание: проблема становится намного сложнее, когда данные, соответствующие моделям данных, постоянны и не могут быть выброшены при изменении модели данных. Это называется проблемой «эволюции схемы», и я считаю, что было доказано, что не существует общего решения.

...