Как правило, вам следует избегать запросов к модели вашего домена. Агрегаты, как правило, не подходят для запросов, поскольку они чаще, чем не представляют какую-либо форму графика. Часть ваших данных также может быть инкапсулирована, и это может показаться не идеальным для запроса.
Я бы предложил перенести запрос и, соответственно, выполнить разбиение на страницы для явного уровня запроса, который возвращает данные вформа, которая имеет смысл. Я склонен использовать 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; }
}
}