Шаблон репозитория - пример Java для составных объектов - PullRequest
0 голосов
/ 09 июня 2018

Мне трудно разобраться с шаблоном хранилища.

Одна вещь, которую я не могу понять, как подсказывает большинство уроков, это то, что хранилище должно действовать как база данных в памяти,т.е. они должны иметь методы add(), remove(), find() и т. д.Но если я не использую какой-либо персистентный фреймворк, такой как Hibernate, где я должен поместить логику для сохранения этих объектов в базу данных?Должен ли быть отдельный слой доступа к данным ?

Что происходит, когда объект содержит ссылку на другой объект?

Например, Customer может иметь много Address (es) и существует идентифицирующая связь между Customer и Address

public class Customer {
    private String firstName;
    private String lastName;

    private List<Address> addresses; // one or more addresses


    // ...

}

public class Address {
    protected String street;  
    protected String city;

    // ...
}

Должны ли быть два отдельных хранилища для Customer и Address?

Как должна выглядеть такая структура репозитория, если в нее включена справочная таблица (например, A Book, имеющий Owner, в неидентифицирующем отношении )?

1 Ответ

0 голосов
/ 09 июня 2018

Для меня шаблон репозитория - это просто объект, который отвечает за сохранение и извлечение объектов домена из основного хранилища.

Но если я не использую какую-либо среду хранения, такую ​​как Hibernate, где следуетЯ поставил логику, чтобы сохранить эти объекты в базу данных?Должен ли быть отдельный уровень доступа к данным?

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

Что происходит, когда объект содержит ссылку на другой объект?Должны ли быть два отдельных репозитория для Клиента и Адреса?

Да.У меня были бы отдельные репозитории для Клиента и Адреса.В зависимости от используемой вами постоянной технологии вы можете собрать клиента и его адреса (например, используйте простой JOIN в случае JDBC).Или вы можете повторно использовать AddressRepository, введя его в CustomerRepository, чтобы помочь вам получить адрес для клиента.

...