Таблицы базы данных нескольких стран и объекты Java - PullRequest
2 голосов
/ 18 февраля 2012

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

  • Страна 1, свойства A, B, C, D, E, поэтому Java и База данных содержат A, B, C, D, E

  • Новая Страна 2, свойства A, D, F, G, H

Решения, которые мы придумали.

База данных:

  • Создать новую таблицу для новой страны

  • Просто добавьте F, G, H к текущей таблице

Java:

  • Сделайте текущий адрес абстрактным с помощью A, D, затем создайте реализацию, специфичную для страны (Интересно и понятно, но добавляет трудностей работе с интерфейсом, поэтому вам приходится все время печатать))

  • Просто добавьте F, G, H к адресу (Появляется нечистое решение, зная, что день, когда будет добавлена ​​новая страна, может закончиться добавлением I, J, K к объекту)

  • Изменить текущий объект, чтобы иметь общие свойства и некоторые общие поля, такие как info1, info2.(Похоже, хорошее решение, но делает код неясным, работая с info1, info2 ... в бизнес-логике)

Кто-нибудь знает хороший шаблон для такого рода проблем?

Привет

1 Ответ

2 голосов
/ 18 февраля 2012

ОК, после уточняющих комментариев мое понимание таково:

  • У вас уже есть класс адресов и соответствующая таблица базы данных
  • Для каждой страны потребуется различный набор адресных строк для каждогоАдрес
  • Поведение кода для каждой страны не особенно отличается (т. Е. Адреса ведут себя одинаково, за исключением того, что они имеют разные адресные строки)

В целомЯ бы не стал создавать новые классы, когда различия на самом деле просто чистые данные.Таким образом, наличие двух разных классов Address выглядит как плохая идея , независимо от того, заставляете ли вы их наследовать от одного базового класса.Кроме того, иерархии наследования обычно не очень хорошо сопоставляются с базами данных.

Я думаю, что лучшим решением является сохранение свойств для каждой страны в HashMap или в чем-то подобном, что затем определяет, какие адресные строки применяются для каждой страны.,Для простоты каждый адрес может содержать HashMap<String,String>, то есть со строками как для ключей (имена адресных строк), так и для значений (адресные данные).

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

В базе данных я представляю данные в двух таблицах: Address и AddressLine, с очевидным отношением 1-ко-многим.

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