Не уверен, как это связано с разделением интересов.Я могу видеть, где может показаться, что абстракция протекает;Вы обеспокоены тем, что кажется, что пользователи должны знать слишком много о том, как хранилище хранит ваши Статьи?
Пока кто-то не придумает эффективный метод отделения реализации от моделей, абстракции хранилища всегда будут дырявыми.Вы можете побить себя за это или просто сделать все возможное и иметь дело.
Ваш второй метод, ИМХО, хуже первого.Вы все еще должны указать категорию и позицию в своей статье, поэтому у вас все еще есть утечка в дополнение к странному API, который путает параметры с сущностями.
Я бы определенно пошел с первой версией над второй.Если бы мне нужно было что-то сделать, я бы реорганизовал создание сущностей CategoryIndex и ArticlePosition (таблицы Category и Position, связанные с таблицей Article).Затем вы можете изменить свой API на более привлекательный:
var cat = CategoryRepository.GetCategory("foo");
var pos = PositionRepository.GetPosition("bar");
var article = ArticleRepository.GetArticle(cat, pos);
Это лучше, чем у вас уже есть?Возможно нет.