Mobile system design: bank tətbiqi nümunəsi
Mobile system design müsahibəsi ("mobil bank tətbiqi dizayn et") backend system design-dan fərqlidir — səndən gözlənilən çərçivə:
1. Tələbləri dəqiqləşdir (5 dəq) — funksional: hansı ekranlar (login, hesablar, köçürmə, tarixçə)? qeyri-funksional: offline dəstəyi? təhlükəsizlik səviyyəsi? cihaz spektri? Bu mərhələni atlamaq ən böyük səhvdir.
2. Yüksək səviyyəli arxitektura (10 dəq) — qatlar: UI (MVVM/MVI) → domain → data (repository, Room SSOT, Retrofit); modullaşdırma (feature + core); DI (Hilt).
3. Kritik axınların dərinliyi (15 dəq) — müsahibəçinin seçdiyi 1-2 axını detallaşdır:
- Login: token cütü, biometrika (CryptoObject), sessiya kilidi
- Tranzaksiya tarixçəsi: Paging + RemoteMediator, offline cache, köhnəlik göstəricisi
- Köçürmə: idempotency key, step-up auth, optimistic olmayan UI (server təsdiqi)
4. Kəsişən mövzular (10 dəq) — təhlükəsizlik (pinning, Keystore, hardening), performans (startup, baseline profile), monitorinq (crash, ANR, analytics), test strategiyası.
Hər addımda trade-off-ları səsləndir: "burada offline queue qura bilərdik, amma ödənişdə double-charge riski onu istisna edir".
[Transfer ekranı]
│ məbləğ + alıcı (client validasiya = yalnız UX)
▼
[ViewModel] ──── idempotencyKey = UUID yaradılır
│
▼
[TransferRepository]
│ POST /transfers (Idempotency-Key: header)
│ ├── timeout/şəbəkə xətası → EYNİ key ilə retry təklifi
│ │ (server key-i tanıyır → əvvəlki nəticə, double-charge YOX)
│ ├── 402 limit / 403 → error body-dən səbəb → UI
│ └── step-up tələbi (böyük məbləğ) → biometrika/OTP → təkrar
▼
[Server təsdiqi gələnə qədər "İcra olunur..."]
│ (optimistic "uğurlu" YOX — pul əməliyyatıdır)
▼
[Nəticə ekranı] → tarixçə cache-i invalidate → Room yenilənir → Flow UI-ı yeniləyirKöçürmə axınının dizaynı — lövhəyə çəkiləcək sxem
Qiymətləndirmə meyarları (müsahibəçinin vərəqindəki): tələb sualları verdimi? qatları ayırdımı? offline/xəta hallarını düşündümü? təhlükəsizliyi özü qaldırdımı (bank!)? trade-off-ları əsaslandırdımı? Ünsiyyət texniki dərinlik qədər vacibdir: düşünərkən səsli düşün, lövhəni istifadə et, müsahibəçidən istiqamət soruş ("login-i dərinləşdirim, yoxsa data qatını?").
🛠 Tapşırıq
45 dəqiqəlik taymer qur və kağız üzərində "mobil bank tətbiqi" dizayn et.
- İlk 5 dəqiqəni yalnız suallara ayır (özünə ver və yaz).
- Qatlar diaqramını çək, sonra köçürmə axınını (idempotency, step-up, server təsdiqi) detallaşdır.
- Son 5 dəqiqədə öz dizaynının 3 zəif nöqtəsini yaz.
Bitdi sayılır: vərəqdə diaqram + 5 tələb sualı + 3 trade-off qeydi varsa.
📚 Mənbələr və sənədlər
- App architecture bələdçisirəsmideveloper.android.com
- Arxitektura tövsiyələrirəsmideveloper.android.com