Может ли хранилище возвращать коллекции подкачки в DDD? - PullRequest
0 голосов
/ 21 октября 2019

Можно вернуть объект страницы в хранилище домена, например, метод findUsers страницы (int page, int limit) в UserRepository.

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Как правило, вам следует избегать запросов к модели вашего домена. Агрегаты, как правило, не подходят для запросов, поскольку они чаще, чем не представляют какую-либо форму графика. Часть ваших данных также может быть инкапсулирована, и это может показаться не идеальным для запроса.

Я бы предложил перенести запрос и, соответственно, выполнить разбиение на страницы для явного уровня запроса, который возвращает данные вформа, которая имеет смысл. Я склонен использовать I{AggregateName}Query, но вы можете назвать это как угодно. Я мог бы использовать следующие методы:

public interface ICustomerQuery
{
    IEnumerable<Query.Customer> Search(Query.Customer.Specification specification);
    int Count(Query.Customer.Specification specification);
    Page<Query.Customer> Search(Query.Customer.Specification specification, int page);
}

Здесь у меня было бы пространство имен Query в моем основном пространстве имен, которое может содержать модели чтения , которые являются простыми объектами передачи данных (контейнеры данных). ), которые содержат только форму и без поведения. Доменный агрегат Customer вполне может содержать список контактов и адресов, которые я не хочу использовать, чтобы показать их в списке. Модель чтения Query.Customer, с другой стороны, довольно плоская, хотя вы можете решить включить что-то более сложное для определенных стратегий извлечения. Например:

namespace SomeProduct.Query
{
    public class Customer
    {
        Guid Id { get; set; }
        string Name { get; set; }
        string PrimaryAddress { get; set; }
    }
}
0 голосов
/ 21 октября 2019

Вы ищете что-то подобное?

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.PagingAndSortingRepository;

public interface UserRepository<User> extends PagingAndSortingRepository<User, Long> {

    Page<User> findUsers(Pageable pageable);
}
...