Шаблон репозитория - как его понять и как он работает со «сложными» сущностями?

Мне трудно понять шаблон репозитория.

Есть много мнений на эту тему, как вШаблон репозитория сделан правильно но и другие вещи, такие какРепозиторий нового Синглтона или снова как вНе используйте DAO используйте репозиторий или просто взятьSpring JPA Data + Hibernate + MySQL + MAVEN где каким-то образом репозиторий выглядит так же, как объект DAO.

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

Я вижу это так: кажется, что я хочу что-то вроде этого:

         ------------------------------------------------------------------------
         |                            Server                                    |
         ------------------------------------------------------------------------
         |                    |                        |                        |
Client <-|-> Service Layer  <-|->  Repository Layer  <-|-> ORM / Database Layer |
         |                    |                        |                        |  
         ------------------------------------------------------------------------

Service Layer принимает*DTOобъекты и передает ихRepository Layer это в основном не более, чем "парень", который знаеткак сущность может быть сохранена.

Например, предположим, что у вас есть набор некоторых инструментов (обратите внимание, что это просто псевдокод)

@Entity
class ToolSet {
  @Id
  public Long id;
  @OneToOne
  public Tool tool1;
  @OneToOne
  public Tool tool2;
}

@Entity
class Tool {
  @Id
  public Long id;
  @OneToMany
  public ToolDescription toolDescription;
}

@Entity
class ToolDescription {
  @Id
  public Long id;
  @NotNull
  @OneToOne
  public Language language

  public String name;
  public String details;
}

То, что я не получаю, это та часть, где я получаюToolSetDTO объект от клиента.

Как я понял до сих пор я мог написатьToolSetRepository с методомToolSetRepository.save(ToolSetDTO toolSetDto) тот "умеет хранить"аToolSetDTO, Но почти каждый учебник не проходит*DTO ноEntity вместо.

Что меня беспокоит, так это то, что если ты возьмешьToolSet Пример сверху я должен был сделать следующие шаги:

приниматьtoolSetDto и проверь если нетnullДля каждогоtool*Dto принадлежитtoolSetDto
а) Если есть действительный идентификатор, то конвертировать изDTO вEntity в противном случае создайте новую запись в базе данных
б)toolDescriptionDto и преобразовать / сохранить его в базе данных или создать новую записьПосле проверки вышеупомянутых экземпляровToolSet (сущность) и настроить его для сохранения в базе данных

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

То, о чем я думал, создавало, например,ToolSetRepository но вопрос здесь

Требуется лиToolSet объект объекта или он используетDTO объект?В любом случае:*Repository разрешеноиспользование другие объекты хранилища? Например, когда я хочу сохранитьToolSet но я должен хранитьTool а такжеToolDescription первый - я бы использовалToolRepository а такжеToolDescriptionRepository внутриToolSetRepository?
Если так: Почему это не нарушает Шаблон Репозитория? Если этот шаблон в основном является слоем между службой и моей средой ORM, он просто «не чувствует себя правильным» для добавления зависимостей к другим*Repository классы по причинам зависимости.

Я не знаю, почему я не могу обдумать это. Не звучиттот сложно, но есть еще помощь там, какSpring Data, Еще одна вещь, которая беспокоит меня, так как я действительно не понимаю, как это делаетчто-нибудь Полегче. Тем более, что я уже использую Hibernate - я не вижу выгоды (но, возможно, это другой вопрос).

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос