Уровень сервиса достаточно динамичен, чтобы приложение могло отправлять запросы / фильтры? - PullRequest
0 голосов
/ 14 сентября 2011

У нас есть настройка уровня доступа к данным для использования репозиториев, сервисов и спецификаций (для предварительно определенных запросов). Сервисный уровень при сохранении данных принимает DTO, которые преобразуются в фактические объекты до их сохранения. При запросе данных мы получаем либо один DTO, либо набор DTO. Уровень приложений знает только о DTO. Он не знает реальных сущностей.

Так что сервис и интерфейс могут выглядеть так:

public class UserService: IUserService
{

     IUserRepository _repository;

     public UserService(IUserRepository repository)
     {
        _repository = repository
     }
     public UserDto GetByUsernameAndPassword(string username, string password)
     {
         return _repository.Find(UserSpecifications.MatchByUsernameAndPassword(username,password));
     }
}

public interface IUserService: IBaseService<UserDto>
{
     public UserDto GetByUsernameAndPassword(string username, string password);
}

Недавно у меня возникла необходимость разрешить прикладному уровню генерировать запрос для передачи на сервисный уровень. Передача строки для поиска по индексу или отдельному полю довольно проста, и когда мы хотим выполнить сортировку, фильтрацию и поиск по объекту, использующему несколько полей, это вызывает у меня затруднения.

Вот несколько сценариев:
О. Допустим, у нас есть контроль сетки в нашем приложении. Этот элемент управления позволяет нам сортировать по нескольким полям. Нам нужно передать это выражение сортировки в службу, преобразовать это выражение в список свойств объекта, который будет передан в хранилище. Хранилище знает, как обрабатывать несколько сортировок в коллекции сущностей.

B. Приложение позволяет пользователю создавать запросы на основе полей в DTO. DTO выглядит так:

public class UserDto
{
    string Username {get;set;}
    string FirstName {get;set;}
    string LastName {get;set;}
    AddressDto Address{get;set;}
}

Запрос будет построен таким образом, чтобы пользователь мог выбирать поля и предоставлять термины: // Это и пример того, как пользователь может написать запрос в системе. Где имя пользователя SartsWith "A" И Address.City = "Миртл-Бич"

Итак, у нас может быть выражение, которое мы отправляем в Службу:

u => u.Username.StartsWith("A") && u.Address.City == "Myrtle Beach"

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

Я думал о том, что приложение отфильтровывает результаты из службы, но меня беспокоит, что набор результатов может быть огромным. Я только хотел вернуть то, что было нужно из базы данных через репозитории.

1 Ответ

0 голосов
/ 16 сентября 2011

Я закончил тем, что пошел с Lucene для моего индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...