Идеализированная модель чтения очень похожа на кеш - вы получаете запрос, вы используете запрос для вычисления ключа кеша, вы возвращаете байты, которые хранятся с использованием этого ключа кеша.
Что происходитпо кешу пропустить?Затем вам нужно поискать данные и вычислить, какими должны быть возвращенные байты.
Итак, вы пытаетесь достичь нужного состояния из вашего долговременного хранилища, а затем преобразовать это состояние вСериализованное представление, которое будет понимать вызывающая сторона, без лишней суеты.
Например, представьте веб-API, в котором клиент передает вам целевой URI и ожидает ответа application/json
.Хранилище данных с состоянием - это некая СУБД, поэтому вы используете готовый SQL-клиент для выполнения запроса, который выдает ResultSet
.Затем вы бы использовали что-то вроде DOM-компоновщика для построения дерева, перебирая строки в наборе результатов и копируя столбцы данных в дерево.Когда дерево будет готово, вы будете использовать библиотеку json для добавления представления дерева в UTF-8.Тада, у тебя есть представление ответа, который ты можешь вставить в кеш и вернуть клиенту.
Если тебе удобнее с O / RM, то ты можешь определить представление объекта в памяти,и пусть O / RM беспокоится о создании в памяти представления результата, которое вы затем передаете в библиотеку десериализации JSON.
Дело в том, что этот компонент перевода должен понимать, как интерпретировать значение, котороебыл извлечен из долговременного хранилища, и как выразить это значение в представлении, которое будет понято клиентом - но вам не нужны сущности .Вы «просто» берете сообщения и превращаете их в другие сообщения.
В зависимости от того, какие части перевода стабильны и какие должны быть заменяемыми, у вас может быть несколько полезных вариантов здесь.Но реализация вашего перевода не должна зависеть от деталей реализации вашей модели записи.