Дизайн класса для отношений - PullRequest
0 голосов
/ 18 марта 2012

Рассмотрите следующие таблицы и классы Java, чтобы сформулировать проблему, для которой я ищу решение -

Таблица CITY с идентификатором столбца, именем. Java-класс City, имеющий свойство id и name.

Таблица СТРАН, имеющая столбцы id, name. Класс Java Country, имеющий свойство id и name.

Таблица USER, содержащая столбцы id, name, city_id, country_id, где city_id - это FK из таблицы CITY, а country_id - это FK из таблицы COUNTRY. Java-класс Пользователь, имеющий свойство id, name, cityId и countryId.

Теперь в пользовательском интерфейсе нельзя отображать cityId и countryId для записи пользователя, вместо этого имена, которые будут отображаться как идентификаторы, не имеют смысла для пользователей. Так что мой класс пользователя правильный дизайн? Каким должен быть дизайн? Должны ли это быть объекты City и Country вместо cityId и countryId? И как мне загрузить необходимые данные?

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

1 Ответ

1 голос
/ 18 марта 2012

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

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

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

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

...