Представленный вами интерфейс репозитория представляет собой очень простой в использовании интерфейс CRUD, который может хорошо работать во многих типах приложений. В общем, я бы предпочел не иметь параметров или параметров подкачки и сортировки в моем репозитории, вместо этого я бы предпочел вернуть IQueryable и позволить вызывающим абонентам составлять эти типы операций в запросе (если вы используете IQueryable, такую технологию, как EF) или nHibernate может перевести эти операторы в SQL - если вы прибегаете к IList или IEnumerable, это все в операциях с памятью).
Хотя я избегаю разбиения на страницы и сортировки, у меня могут быть более конкретные операции с хранилищем, чтобы защитить бизнес-логику от некоторых деталей. Например, я мог бы расширить IEmployeeRepository из IRepository и добавить метод GetManagers или что-то подобное, чтобы скрыть выражение Where, необходимое в запросе. Все зависит от приложения и уровня сложности.
Одна важная заметка по этому предложению в вашем посте:
Конечно, единица работы будет
внедрить контекст данных (фанат Microsoft)
в новый репозиторий, где блок
работы будет иметь метод .Save (),
вызов Save во всех контекстах данных.
Убедитесь, что вы используете один контекст данных / контекст объекта внутри каждой единицы работы, потому что контекст, по сути, является базовой единицей работы. Если вы используете несколько контекстов в одной и той же логической транзакции, тогда у вас фактически будет несколько единиц работы.
У меня есть несколько примеров реализации в этом проекте:
http://odetocode.com/downloads/employeetimecards.zip
Код может иметь больше смысла, если вы прочитаете эту статью:
http://msdn.microsoft.com/en-us/library/ff714955.aspx
Надеюсь, это поможет,