Как вы создаете отношения между двумя элементами в Java? - PullRequest
0 голосов
/ 23 февраля 2012

Я попытаюсь четко объяснить мою проблему: у меня есть две таблицы: документ и категория, и они имеют отношение многие ко многим.Я учусь элегантно программировать на Java, поэтому, пожалуйста, извините за невежество, если так.и его категории, когда я создаю объекты из resultSet.

Я создал документ класса и категорию класса;Нужно ли добавлять ArrayList категории в качестве атрибута класса документа?И ArrayList документа в качестве атрибута в категории?

Мне также нужно внести изменения в некоторые документы, мне нужно создать идентификатор атрибута в документе класса, чтобы сохранить идентификатор из таблицы в БД, чтобы обновлениепроще?

Мой документ класса может выглядеть так:

public class Document {
    private Integer id; // Id from DB, 0 if new object
    private String name;
    private String url;
    private Date dateCreated;
    private ArrayList<String> category;

    // getters & setters...
}

Это может сбить с толку, но я просто хочу, чтобы все было "стандартно"!Я знаю, как сделать все это «грязным» способом, используя несколько запросов и т. Д. ... но еще раз мне нужна идея от опытных разработчиков OO!

РЕДАКТИРОВАТЬ: я удалил MVC;Я новый в Java, поэтому я просто использую базовую Java (без ORM, без фреймворка) .Я не знаю, что такое Hibernate, я расследую.

Ответы [ 3 ]

3 голосов
/ 23 февраля 2012

Нужно ли добавлять ArrayList категории в качестве атрибута документа класса?И ArrayList документа как атрибута в категории?

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

document1.getCategories().get(0)...

, и вам не требуется доступ к документам с помощью таких категорий, как эта

category1.getDocuments().get(0)...

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


Мне также нужно внести изменения в некоторыеДокументы, мне нужно создать идентификатор атрибута в Class Document, чтобы сохранить идентификатор из таблицы в БД, чтобы обновление было проще?

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


Как вы сказали, что выизучают Java, я хотел бы добавить несколько общих замечаний:

Вы объявили список в следующем примере:

private ArrayList<String> category;

Вы должны предпочесть интерфейс List вместо конкретногокласс реализации ArrayList здесь.

private List<String> category = new ArrayList<String>();

Это позволит вам использовать любой вид реализации (например, ArrayList или LinkedList), поскольку ваш код больше не зависит от конкретного класса реализации.

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

0 голосов
/ 23 февраля 2012

Томас ответил очень хорошо. Я просто хочу добавить, что если вы хотите двунаправленных отношений, вы должны быть осторожны, чтобы списки партнеров с обеих сторон были согласованными.

Есть хорошая статья об этом Винсента Партингтона . Он пишет с точки зрения написания объектов для JPA, но шаблон, который он описывает (с помощью методов internal*), вполне применим к простым объектам.

0 голосов
/ 23 февраля 2012

Если вы используете ORM, такой как Hibernate, вы должны использовать ArrayList<Category> вместо одного для строк. Это был бы более чистый подход ООП. Не уверен, почему вы отметили это как MVC.

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