Мені важко зрозуміти шаблон сховища.
Є багато думок на цю тему, як у шаблоні репозиторію, зробленому правильно, але також інші речі, такі як репозиторій - це новий синглтон або знову, як у випадку не використовувати DAO використовувати репозиторій або просто взяти Spring JPA Data + Hibernate + MySQL + MAVEN, де-небудь сховище схоже на об'єкт DAO.
Мені набридло читати ці речі, оскільки це не може бути такою важкою справою, як це показано у багатьох статтях.
Я бачу це так: Здається, що я хочу, це приблизно так:
------------------------------------------------------------------------
| 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об’єкт від клієнта.
Наскільки я це зрозумів, я міг написати ToolSetRepositorya методом, ToolSetRepository.save(ToolSetDTO toolSetDto)який " знає, як зберігати " a ToolSetDTO. Але майже кожен підручник не проходить, *DTOа Entityзамість цього.
Мене тут турбує те, що якщо ви візьмете мій ToolSetприклад згори, мені доведеться виконати такі дії:
- Візьміть
toolSetDtoі перевірте, якщо ніnull - Для кожного, що
tool*DtoналежитьtoolSetDto
а) Якщо має дійсний ідентифікатор, перетворіть з,DTOщобEntityінакше створити новий запис бази даних
b)toolDescriptionDtoта перетворіть / збережіть його в базі даних або створіть новий запис - Після перевірки наведених вище примірників
ToolSet(сутності) та налаштування для збереження у базі даних
Все це занадто складно, щоб просто дозволити службовій функції (інтерфейс для клієнта) обробляти це.
Я думав про те, щоб створити, наприклад, ToolSetRepositoryале, але питання тут
- Це бере об'єкт
ToolSetсутності або використовуєDTOоб'єкт? - У будь-якому випадку: чи
*Repositoryдозволено використовувати інші об’єкти сховища? Як коли я хочу заощадити,ToolSetале я маю зберігати,ToolіToolDescriptionспочатку - чи скористаюся яToolRepositoryіToolDescriptionRepositoryвсерединіToolSetRepository?
Якщо так: чому це не порушує шаблон сховища? Якщо цей шаблон є в основному шаром між службою та моєю структурою ORM, він просто не "почувається правильно" додавати залежності до інших*Repositoryкласів через причини залежності.
Я не знаю, чому я не можу розібратися з цим. Це не здається , що складно , але там все ще допомогти там , як Spring Data. Інша справа, яка мене турбує, оскільки я справді не розумію, як це робить щось простіше. Тим більше, що я вже використовую Hibernate - я не бачу користі (але, можливо, це вже інше питання).
Отже .. Я знаю, що це довге питання, але я вже кілька днів досліджував його. Вже існує код, над яким я зараз працюю, який починає перетворюватися на безлад, бо я просто не бачу цього шаблону.
Я сподіваюся, хтось може дати мені загальну картину, ніж більшість статей та навчальних посібників, які не виходять за рамки реалізації дуже, дуже простого прикладу шаблону сховища.