Ищите шаблон дизайна для обработки «справочных данных» - PullRequest
3 голосов
/ 02 марта 2012

Мое приложение является очень типичным бизнес-приложением, которое имеет много списков ссылок. Например, у меня может быть таблица со статусами (В ожидании, Выполняется, Завершено и т. Д.), Либо таблица со странами, либо таблица со списками параметров.

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

В настоящее время мое решение состоит из 4 частей:

  • Таблица для хранения данных
  • бизнес-объект для хранения самой записи в памяти (это перебор)
  • Класс обслуживания для чтения и запроса данных
  • При необходимости, Enum, чтобы я мог ссылаться на определенные элементы справочных данных в памяти (например, если я хочу ссылаться на состояние «В ожидании» без жесткого кодирования «4» везде.

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

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

1 Ответ

0 голосов
/ 02 марта 2012

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

Альтернативой является создание одной таблицы со следующей схемой:

Тип Значение"Страна" США "Страна" Канада "Статус" "ГОТОВ" "Статус" "OnHold"

Тогда у вас может быть интеллектуальный класс, который знает, как сохранить эту схему в структурах данных, таких как:

Set<String> countries;
Set<Status> status;
..
..

Вы можете иметь один API или отдельный API со специальными методами, такими как:

getCountryList();
addCountry();

API будет инкапсулировать детали интеллектуального возврата соответствующих структур данных в любой форме и добавления новых.а также.

Если у вас есть несколько таких предметов и вы не хотите делать их несколько копий (и просто повторно использовать существующие отдельные копии в памяти), вы также можете использовать шаблон FlyWeight.API, описанный выше, будет FlyWeight (http://en.wikipedia.org/wiki/Flyweight_pattern).. Это позволит решить некоторые проблемы с эффективностью.

Просто взломать его.

...