Мені важко зрозуміти шаблон сховища.
Є багато думок на цю тему, як у шаблоні репозиторію, зробленому правильно, але також інші речі, такі як репозиторій - це новий синглтон або знову, як у випадку не використовувати 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
об’єкт від клієнта.
Наскільки я це зрозумів, я міг написати ToolSetRepository
a методом, 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 - я не бачу користі (але, можливо, це вже інше питання).
Отже .. Я знаю, що це довге питання, але я вже кілька днів досліджував його. Вже існує код, над яким я зараз працюю, який починає перетворюватися на безлад, бо я просто не бачу цього шаблону.
Я сподіваюся, хтось може дати мені загальну картину, ніж більшість статей та навчальних посібників, які не виходять за рамки реалізації дуже, дуже простого прикладу шаблону сховища.