2016-03-04 5 views
0

Я сам с этим немного борюсь. У меня есть граф объекта с 30 объектами. Большинство из них связаны через двунаправленные отношения. Некоторые соединения очень полезны, а некоторые нет, потому что они служат только для удобства в случае делегирования между объектами.JPA Двунаправленные отношения против репозитория/DAO-Use

Кроме того, у меня есть хранилища для создания/поиска/хранения объектов. К сожалению, для каждого объекта существует репозиторий, и похоже, что эти репозитории являются окнами в мой граф объектов. Является ли такая вещь рекомендуемой реализацией?

Из-за кода плиты котла, вызванного двунаправленными отношениями, поддерживающими родительские/дочерние ассоциации, у меня возникла идея заменить некоторые из этих двунаправленных отношений и поместить их в репозиторий. Некоторые из этих связей полезны только в сочетании с дополнительными параметрами. Давайте возьмем классический Заказчик < -> Пример заказа. Я считаю, что направление Customer -> Order не всегда хорошо, потому что иногда необходимо ограничить результат конкретным периодом.

Мой вопрос: что вы рекомендуете выбраться из этой борьбы? Вы всегда используете двунаправленные отношения в больших проектах для удобства? Или вы заменяете их конкретными запросами репозитория? Можно ли поддерживать репозитории для каждого объекта?

Я разорванный на некоторое время ... :-(

ответ

0

Ну, по-моему, это трудно сказать, не зная немного больше о вашей установке. Вы используете Spring CrudRepositories, пользовательские Daos или EntityManager Возможно, это не так уж важно, но мне интересно об этом.

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

Посмотрите, кто использует приложение и как они называют свои отделы. Сделайте услугу для этого отдела. Положите вызов для каждой потребности в этом отделе, даже если вы дублируете некоторый код из других отделов. Не забывайте ИТ-отдел. Позже, когда вы получите хорошее представление о том, как эти службы формируются, вы можете учитывать общие действия.

Надеюсь, это поможет.

+0

спасибо. Фактически, я перепутал некоторые вещи, которые я узнал недавно. За последние пару недель я начал работу с Domain-Driven-Design. К сожалению, у меня были проблемы с определением моих агрегатов из-за проблем с производительностью. Например, есть университет с примерно 400 курсами обучения. Таким образом, университет будет моим совокупным корнем, и курс исследований будет внутри него. Каждый раз, когда мне нужно работать с объектом, он должен быть загружен из базы данных, и мое понимание производительности было раздраженным. И поэтому я решил сделать совокупный корень на сущность с репозиторием. – Thomas

+0

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

+0

Дизайн, как правило, имеет самые жесткие решения. Домены могут помочь много. DAO или Entities действительно представляют собой просто таблицы. Я часто создавал объекты «View» или DTO вместе с уровнем сервиса, уникальным для каждого отдела. Таким образом, у меня есть объекты, которые имеют смысл для отдела, который их использует. –

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