На мой вкус это даже лучше, чем репозиторий или активный образец записи. С активной записью вам нужно будет добавить magic
к самому объекту, трудно отделить от него не очень прозрачно. С шаблоном репозитория вы получите множество небольших репозиториев, для каждой сущности, которые сами по себе очень немыслимы, и все их функции состоят в том, чтобы обернуть вызовы в базу данных развязанным образом, главным образом, чтобы иметь возможность тестировать на макет или in-memory db.
Но когда вы используете табличные запросы на своем уровне обслуживания (или Business Logic Layer, если хотите), вы не жертвуете тестируемостью (или связью вошь). Сама функциональность базы данных абстрагируется в файле scala.slick.driver.JdbcProfile, поэтому вам не нужно делать другую абстракцию, чтобы исключить ее.
Конечно, лучше всего группировать все запросы, которые используются более одного раза рядом с определением таблицы и импортировать их в ваши службы, но это не совсем репозиторий, а всего лишь множество композиционных запросов.
Надеюсь, это поможет.
Это очень полезно, однако я не полностью убежден. Причина, по которой я очень беспокоюсь, состояла в том, что в настоящее время я использую JPA (Hibernate), и сейчас я пересматриваю свой код, чтобы перейти на Slick. Сейчас его довольно сложно из-за плохого первоначального дизайна. Мне было интересно, если я напрямую использую объект Slick Table, не беспокоясь о связи, и в будущем я решил перейти на другую технологию, это может быть очень сложно. –
@vitalii, как бы вы издевались над гладкими звонками в модульных тестах? – Teimuraz
@moreo почему, я бы просто ввел тестовое соединение с базой данных (или тестовое соединение). Запросы отключаются от соединения, поэтому я могу иметь запросы на уровне сервиса и все еще иметь возможность тестировать службы без реального db. – vitalii