мне следует избегать условий тестирования внутри преобразователя запросов в mybatis? - PullRequest
0 голосов
/ 25 октября 2019

Мне сказали сегодня, что правильное решение - не создавать параметризованные сопоставители, как показано ниже, а вместо этого иметь отдельные запросы для каждой функции сопоставления. В основном, чтобы не проверять нулевые или другие условия для создания другого запроса.

Мне также сказали, что если я изменю запрос, который запускается на основе параметров, таких как startIdx и broadcastOnly ниже, то я не могу проверить эту логикуиспользуя юнит-тесты.

Мне пришлось бы проводить интеграционные тесты, которых у нас нет.

Поэтому мне сказали, что предпочтительнее перенести всю эту логику на уровень обслуживания. Однако, если я выполняю другой запрос, основанный на служебной логике, и не имею таких логических операторов в коде mybatis, то мне понадобится много, много функций, вызывающих соответствующую в правильной ситуации.

Должен ли я действительно удалять эти условия из запросов и каждый раз выполнять отдельный вызов другой функции на основе логики обслуживания?

считается ли наличие этих условий внутри картографа имеющей бизнес-логику на уровне базы данных? Я не был уверен, что люди имели в виду операторы переключения базы данных, когда говорят о бизнес-логике на уровне базы данных, или они включают маппер в определение «уровня базы данных».

Я хочу научиться делать что-топравильно, но я привык иметь ORM обрабатывать вещи для меня. кажется, они думают, что наличие логики в генерации запроса приведет к тому, что его будет сложно поддерживать и невозможно выполнить код модульного тестирования. Я гибкий человек и хочу совершенствоваться, поэтому, пожалуйста, дайте мне несколько советов

<select id="getNotificationsListSize" resultType="long">
        select count(*)
        from notification n
        join notification_box nb on notification_idx = n.idx
        where
        n.status = 'ACTIVE'
        <if test="startDate != null">
            and nb.received_date >= #{startDate}
        </if>
        <choose>
            <when test="broadcastOnly">
                and (nb.account_idx = -1)
            </when>
            <otherwise>
                and (nb.account_idx = -1 or nb.account_idx = #{accountId})
            </otherwise>
        </choose>
        <if test="useStartIdx">
            and nb.idx >= #{startIdx}
        </if>
    </select>
...