2013-04-04 2 views
1

Я разрабатываю небольшое веб-приложение на Java, которое, учитывая географическую географию Лондона, находит ближайшую станцию ​​метро и соответствующие ей линии. Я пытаюсь найти лучший способ представить отношение metroStation - metroLines. Как вы знаете, одна станция метро может быть частью нескольких линий. То, что я сейчас делаю, это то, что у меня есть таблица в моей базе данных с отношением, представленным в виде матрицы. Что-то вроде этого:Лучший способ реализовать матрицу (станции метро/линии метро)

stationId | blueLine | blackLine | pinkLine | purpleLine | ... | greenLine 
    25   0   1   1   0     1  

Где те, 0 и 1 являются булевыми означает, что станция является частью этой линии метро (не обнуляемой и с 0, как по умолчанию). Конечно, эти данные не будут меняться очень часто (они не строят новые станции или линии очень часто), и я думаю, что вызов в базу данных каждый раз, когда мне нужны эти данные (что много), является излишним. Я знаю, что одним из решений может быть кэширование, но я думал, что для меня лучше подходит подход Java для хранения таких данных: возможно, постоянный список объектов метро, ​​какой-то статический класс со всеми данными станций метро внутри , используйте класс bean и вводите его с помощью инъекции зависимостей ...

Мне понравилось бы ваше мнение, как вы думаете, лучший способ реализовать эту функциональность?

+0

PS: Может быть, например, 200 станций метро и 10 линий метро. –

ответ

0

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

Один

HashMap<Line, List<Station>> 

и один

HashMap <Station, List<Line>> 

например. Таким образом, ваши запросы будут довольно быстрыми, и поскольку Карты хранят указатели на объекты, это не займет гораздо больше места.

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

+0

Большое спасибо за помощь, Саймон. –

+0

вас очень приветствует :) –

0

Я, наконец, пошел с чем-то похожим на то, что предложил Саймон. У меня есть:

HashMap<MetroLine, List<MetroStation>> hmMetroLines; 
EnumSet<MetroStation> esMetroStations; 

Где MetroStation представляет собой Enum со всеми данными строк, которые он принадлежит. Что-то вроде этого:

public enum MetroStation{ 
METRO1(1, true, false, true, false, false, false, false, false, false, false, 
     false, false, false, false, false, false, "descirption1"), 
METRO2(2, true, true, false, false, false, false, false, false, false, false, 
     false, false, false, false, false, false, "description2"),... 

private int id; 
private boolean line1; 
private boolean line2; 
private boolean line3; 
... 
private boolean line14; 
private String description; 

Я использую класс Singleton, как предложил Саймон, создавая HashMap и набор только один раз.

Смежные вопросы