Здравствуйте, Аноним, Вы писали:
А>Имеется система, использующая модель предметной области + мапперы для ее отображения на реляционную БД. Согласно правилу паттерна, бизнес-классы системы не могут напрямую обращаться к мапперам. За них это делает реестр (он-же unit of work).
А>Т.е. если мне нужен новый объект, я иду в реестр, ищу его там по идентификатору (а метод поиска реестра уже сам определяет где взять объект, если уже загружен — то в кэше, если нет — обратиться к мапперу).
А>Но как быть с методами отчетов ? Например пользователь хочет узнать, какие клиенты сделали за месяц больше 10 заявок. Это требует выполнения sql-запроса и вывода на экран пользователю в гриде. Куда впихнуть этот метод и кто его будет вызывать ?
А>Или например поиск всех пользователей с именем Игорь. Опять нужен метод, возвращающий DataTable с результатом sql-запроса, но где он должен находиться непонятно.
Ну и зачем DataTable? Чем не устраивает список? Далее какой маппер используем? Например тот же хибернейт поддерживает HQL запросы, SQL запросы и запросы на основе критериев... Вообще такие вещи надо помещать в DAL, например
class ClientRepository
{
public List<Client> GetClientsByClaimCount(int claimCount)
{
...
}
}
Или я что-то не так понял?