English
Open in Telegram

Post #ARCH-11 Architecture Learning — Mapper, Domain Invariant & Business Rule

8 October 2026
F
Flutter Dev Talk
#ARCH-11 Architecture Learning — Mapper, Domain Invariant & Business Rule Payment flow’da API’dan kelgan ma’lumotni Domain Model’ga aylantirish faqat fieldlarni ko‘chirish emas. Muhim savol: Tashqi tizimdan kelgan ma’lumotga qachondan boshlab ishonishimiz mumkin? Masalan, Payment API quyidagicha response qaytardi: { "bill_id": "12345", "amount": -100000, "commission": 1500, "status": "CREATED" } Bu yerda uchta tushunchani ajratishimiz kerak. 1️⃣ Mapper — Data’ni tarjima qilish PaymentStatus mapStatus(String status) { return switch (status) { 'CREATED' => PaymentStatus.created, 'PAID' => PaymentStatus.paid, 'EXPIRED' => PaymentStatus.expired, _ => throw FormatException('Unknown status'), }; } Mapper API representation’ni application tushunadigan formatga aylantiradi. 2️⃣ Domain Invariant — Model doim valid bo‘lishi kerak class Payment { Payment({ required this.amount, required this.commission, }) { if (amount <= 0 || commission < 0) { throw ArgumentError('Invalid payment'); } } // Summalar eng kichik pul birligida final int amount; final int commission; int get total => amount + commission; } Invariant — model mavjud bo‘lishi uchun bajarilishi shart bo‘lgan qoida. Masalan, bizning taxminiy talabimizda: - amount > 0 - commission >= 0 - Bu shartlar buzilsa, valid Payment yaratib bo‘lmaydi. 3️⃣ Business Rule — Payment qilish mumkinmi? bool canPay({ required Payment payment, required int balance, }) { return balance >= payment.total; } Payment modeli valid bo‘lishi uning to‘lanishi mumkinligini anglatmaydi. Masalan: Amount: 100 000 Commission: 1 500 Total: 101 500 Balance: 100 000 Payment valid, lekin balans yetarli emas. Flow: Payment API ↓ PaymentDto ↓ Mapper → API data validmi? ↓ Payment Model → Invariant bajarilganmi? ↓ Business Rule → Payment qilish mumkinmi? ↓ Application → Payment flow 💡 Senior yondashuvi Mapper tashqi data’ni tarjima qiladi. Domain Model o‘z invariantlarini himoya qiladi. Business Rule esa operation bajarilishiga ruxsat borligini aniqlaydi. Biroq client’dagi canPay tekshiruvi serverning yakuniy validation’ini almashtirmaydi. Balans yoki payment status tekshiruvdan keyin o‘zgarishi mumkin. 🎯 Asosiy xulosa: Valid Payment ≠ Payable Payment Model valid bo‘lishi boshqa, shu model bilan payment operation bajarishga ruxsat bo‘lishi boshqa masala. Architecture’da muhim narsa har bir `if`ni alohida layer’ga chiqarish emas, balki har bir qoida uchun to‘g‘ri owner tanlashdir. @flutterDevTalk
113 ·

Nearby in the feed

FFlutter Dev Talk#ARCH-9 Validation Boundary Dasturlarda ko'p uchraydigan savol qaysi logicani qayerda tekshirishim kerak, buni validation misolida ko'rib chiqamiz. Validation’dFFlutter Dev Talk#ARCH-10 Architecture Learning — DTO, Domain Model & Mapper Bugun hammaga qiziq bo'lgan va o'zim farqiga borishga juda qiynalgan mavzuni ko'rib chiqamiz. Bundan
this message
FFlutter Dev TalkUzum ertalabdan beri ishlamayapti. Bunga sabab yandex serverlari dron hujumiga uchragani va uzum yandex serverlaridan foydalangani deyishyapti. Shu to’g’rimikinFFlutter Dev Talk#ARCH-12 Architecture Learning — Soft vs Hard Boundary Flutter’da kodlarni bir-biridan ajratishning ikki xil usuli bor. 1️⃣ Soft Boundary — Yumshoq chegara Kodl
FFlutter Dev TalkFlutter Dev Talk@flutterdevtalk · channel
133subscribers5posts in 30 days
Venue feed Open in Telegram

An open public feed from the search index ChatCrawler — “Google for public Telegram”; refreshed as the venue is crawled. Times are UTC.

Public content only, official Telegram API. About · FAQ · Index limits · Remove a page · Catalog · Search · How we count