TGViewer
Мобильная разработка Мобильная разработка @mobi_dev · 13.1K subscribers
Post #4830 650
Два String — и платёж ушёл не туда

Идентификаторы продавца и банка могут выглядеть одинаково. Если оба представлены строками, перепутанные аргументы спокойно проходят компиляцию.

В разборе опыта Verifone для каждого понятия вводят свой Kotlin value class: MerchantId, AcquirerId и другие. После этого подмена одного идентификатора другим становится ошибкой типов.

Та же логика распространяется на состояние операции. Обязательное поле не делают nullable «на всякий случай», а разные исходы описывают sealed-типами. Таймаут запроса сам по себе не доказывает, что платёж не состоялся.

Эти приёмы пригодятся и в мобильном клиенте: на границе API сырые данные проверяют и превращают в типы предметной области, с которыми дальше работает приложение.
  • 🔥 1
More from @mobi_dev
  1. Oct 18, 2026Lottie в пейволле: обычный пример с CDN не заработает В RevenueCat можно добавить собствен…
  2. Oct 17, 2026Кнопка закрытия sheet переехала на боковую панель На внешнем экране iPhone Duo привычное м…
  3. Oct 17, 2026Границы модулей, которые нельзя обойти случайным import Фича оформления заказа захотела ав…
  4. Oct 16, 2026Долгая задача продолжится, даже если Android-приложение закрыли Помощник собирает маршрут:…
  5. Oct 16, 2026Как согласовать скругления карточки и контейнера в SwiftUI Одинаковый cornerRadius у внешн…
  6. Oct 16, 2026Пользователь отменил покупку. Это ещё не ошибка Собственный экран оплаты и собственная обр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →