Arhitektura i obrasci u mobilnom razvoju: šta su, koje vrste postoje i kako primeniti

Аутор: IT Sectr Објављено: 2026-02-20 Време читања: 9 мин

Arhitektura aplikacije je način organizovanja koda kako bi ga bilo lako razvijati, testirati i menjati. Obrasci projektovanja su proverena rešenja tipičnih problema. Prema JetBrains Developer Ecosystem (2025), MVVM se koristi u 45% Android projekata, MVC u 28%, a Clean Architecture u 22%. Razumevanje arhitekture razlikuje početnika od profesionalnog programera.

Glavno

  • MVVM — preporučeni obrazac od strane Google za Android i Apple za iOS. Razdvaja View, ViewModel i Model.
  • Clean Architecture — višeslojna arhitektura sa Use Cases, Entities i Repository Pattern.
  • Obrasci kreiranja: Singleton (jedna instanca), Factory (kreiranje), Builder (sklapanje).
  • Strukturni obrasci: Adapter (konverzija interfejsa), Facade (pojednostavljenje), Delegate (delegiranje).
  • Upravljanje stanjem: ViewModel + StateFlow (Android), Provider/Riverpod (Flutter).

Glavni arhitektonski obrasci

Arhitektonski obrazac određuje kako se odgovornosti raspoređuju između klasa aplikacije. Izbor obrasca utiče na lakoću dodavanja novih ekrana i testiranja koda.

MVC (Model-View-Controller)

MVC je klasičan obrazac gde Model upravlja podacima, View prikazom, a Controller logikom. U iOS-u, MVC je podrazumevani (UIViewController); u Android-u, Activity. Nedostatak je što Controller često postaje "masivan" (Massive View Controller). Prema anketi iOS programera (Reddit, 2025), njih 62% navodi MVC kao glavni uzrok nečitljivog koda u starim projektima.

MVP (Model-View-Presenter)

MVP se razlikuje po tome što Presenter upravlja View-om putem interfejsa, poboljšavajući testabilnost. MVP je bio popularan u Android-u pre Jetpack-a, ali zaostaje za MVVM-om po udobnosti.

MVVM (Model-View-ViewModel)

MVVM je preporučeni obrazac od strane Google za Android i Apple za iOS. ViewModel čuva stanje, a View se pretplaćuje na promene putem Data Binding ili @Published. ViewModel ne zavisi od View-a i lako se testira. U IT Sectr-u koristimo MVVM kao glavni obrazac u svim projektima.

MVI i VIPER

MVI je reaktivni obrazac gde svaka akcija prati ciklus Intent → Model → View. MVI garantuje predvidljivo stanje. VIPER je iOS obrazac sa pet slojeva (View, Interactor, Presenter, Entity, Router), koji pruža maksimalnu izolaciju, ali zahteva mnogo šablonskog koda.

Clean Architecture

Clean Architecture je koncept Roberta Martina koji deli aplikaciju na slojeve: spoljašnji slojevi (UI, baza podataka, mreža) zavise od unutrašnjih (poslovna logika, entiteti). U mobilnom razvoju, Clean Architecture uključuje tri sloja: data (repozitorijumi), domain (Use Cases) i presentation (ViewModels, UI).

Repository Pattern je ključna komponenta Clean Architecture, koja apstrahuje izvor podataka. Repozitorijum odlučuje da li će preuzeti podatke iz mreže ili lokalnog skladišta (Room, Core Data) i vraća jedinstveni format. Prema Google-u (Architecture Guide, 2025), Repository Pattern se preporučuje za svaku aplikaciju sa mrežnim zahtevima. Clean Architecture je opravdana u projektima od 3–5 ekrana — za jednostavne aplikacije počnite sa MVVM.

Obrasci kreiranja

Singleton

Singleton je arhitektonski obrazac koji garantuje jedinstvenu instancu klase i pruža globalnu tačku pristupa njoj. Koristi se za baze podataka, menadžere podešavanja i keš memoriju. U Kotlin-u se kreira putem object. Nedostatak je što komplikuje testiranje zbog globalnog stanja.

Factory i Builder

Factory delegira kreiranje objekata fabričkom metodu — umesto new, pozivate fabriku. Builder je obrazac postepenog konstruisanja složenih objekata sa mnogo parametara (AlertDialog.Builder, NotificationCompat.Builder). Builder poboljšava čitljivost i omogućava objektima da ostanu nepromenljivi nakon sklapanja.

Strukturni i bihejvioralni obrasci

Adapter, Facade, Delegate, Protocol

Adapter je arhitektonski obrazac koji pretvara interfejs jedne klase u interfejs koji klijent očekuje. U Android-u, to je RecyclerView.Adapter. Facade pruža pojednostavljeni interfejs složenom sistemu — na primer, fasada za API koja skriva detalje autentifikacije. Delegate je iOS obrazac gde objekat delegira zadatak (UITableViewDelegate). Protocol je pandan interfejsu u Swift-u.

Observer i Strategy

Observer je obrazac pretplate na promene: subjekt obaveštava pretplatnike o ažuriranjima. U mobilnom razvoju, Observer je osnova LiveData, StateFlow, RxJava i Combine. Strategy je obrazac zamenjivih algoritama: priključujete različitu strategiju (sortiranje, validacija) bez višestrukih if-else naredbi.

Injektovanje zavisnosti i upravljanje stanjem

Dependency Injection je arhitektonski obrazac gde objekat prima svoje zavisnosti spolja umesto da ih sam kreira. Umesto new Database(), prosleđujete bazu podataka kroz konstruktor. DI pojednostavljuje testiranje — možete koristiti Mock umesto prave baze podataka — i olakšava zamenu implementacija. Popularni DI frejmvorci: Dagger i Hilt (Android), Swinject (iOS), Koin (Kotlin). Hilt — omotač oko Dagger-a koji preporučuje Google — smanjuje podešavanje DI za 3 puta.

Service Locator je alternativa DI-ju sa centralnim registrom zavisnosti. Jednostavniji za implementaciju, ali skriva zavisnosti klase, otežavajući testiranje. Moderni projekti preferiraju DI putem Hilt-a ili Koin-a.

Upravljanje stanjem u Flutter-u

U Flutter-u, upravljanje stanjem je poseban ekosistem. Redux — jedinstveni Store sa promenama kroz Actions → Reducer → State. Google-ov BLoC razdvaja događaje i stanja kroz Stream. Provider — jednostavan DI kontejner koji Google preporučuje za Flutter do 2023. Riverpod — poboljšani Provider koji rešava probleme sa kompilacijom i testiranjem. GetX — mikro-frejmvork sa rutiranjem, DI i upravljanjem stanjem. Za početnike u Flutter-u preporučujemo Provider ili Riverpod kao najbolje dokumentovana rešenja.

SOLID i DRY principi

Pored specifičnih obrazaca, postoje opšti principi arhitektonskog dizajna koji su primenljivi u bilo kom jeziku i frejmvorku.

SOLID — pet principa objektno-orijentisanog dizajna: Single Responsibility (jedna klasa — jedan zadatak), Open-Closed (otvorena za proširenje, zatvorena za izmenu), Liskov Substitution (podklase zamenjuju nadklasu), Interface Segregation (mali interfejsi), Dependency Inversion (zavisnost od apstrakcija). U mobilnom razvoju, SRP je najkorisniji princip: svaka klasa radi samo jednu stvar. Prema iskustvu IT Sectr-a, kršenje SRP-a je uzrok 70% problema sa testiranjem u komercijalnim projektima.

kotlin
// Пример: нарушение SRP
class UserManager {
    fun saveUser(user: User) { /* сохранение */ }
    fun validateEmail(email: String): Boolean { /* валидация */ }
    fun sendEmail(user: User) { /* отправка */ }
    fun formatUser(user: User): String { /* форматирование */ }
}

// Исправление: разделяем на отдельные классы
class UserRepository { fun save(user: User) {} }
class EmailValidator { fun isValid(email: String): Boolean {} }
class EmailService { fun send(user: User) {} }
class UserFormatter { fun format(user: User): String {} }

Primer u Kotlin-u pokazuje kako od jedne UserManager klase sa četiri odgovornosti dobijamo četiri klase sa po jednom odgovornošću. Takav kod je lakše testirati, menjati i ponovo koristiti.

DRY (Don't Repeat Yourself) — izbegavajte dupliranje koda. Izdvajajte ponavljajuću logiku u zajedničke metode ili klase. KISS (Keep It Simple, Stupid) — jednostavnost je važnija od elegancije. YAGNI (You Aren't Gonna Need It) — ne pišite kod za nešto što možda neće biti potrebno. Ovi principi pomažu u pisanju čistog, održivog koda bez suvišnosti.

Platformski obrasci Android

ViewModel (Android) je Jetpack arhitektonska komponenta za čuvanje UI stanja, otporna na rotaciju ekrana. ViewModel ne sadrži reference na Activity i automatski se čisti. LiveData — posmatrački kontejner podataka sa svešću o životnom ciklusu. StateFlow — moderna zamena za LiveData zasnovana na Kotlin Flow. SharedFlow — Hot Flow za jednokratne događaje (navigacija, tostovi).

Data Binding i Two-Way Binding — mehanizmi za povezivanje UI i podataka u Android-u. Data Binding deklariše vezu u XML-u; Two-Way Binding automatski ažurira polje u ViewModel-u. Unidirectional Data Flow — princip gde podaci teku u jednom smeru: State → UI → Event → State. U IT Sectr-u koristimo Unidirectional Data Flow u svim novim projektima — smanjuje broj bagova uzrokovanih neočekivanim promenama stanja.

KomponentaSvrhaZamena
ViewModelČuvanje stanja, otpornost na rotaciju
LiveDataPosmatrački sa svešću o životnom ciklusuStateFlow
StateFlowKotlin Flow za UI stanjeLiveData
SharedFlowJednokratni događajiLiveData Event

Često postavljana pitanja

Koji arhitektonski obrazac početnik treba da izabere?

Početnicima se preporučuje MVVM — podržan je od strane Google i Apple i ima jasnu podelu. MVC za jednostavne ekrane. Clean Architecture za projekte od 3–5 ekrana.

Šta je Dependency Injection?

Dependency Injection — objekat prima zavisnosti spolja umesto da ih sam kreira. Umesto new Database(), prosleđujete bazu kroz konstruktor. Alati: Hilt (Android), Swinject (iOS), Koin (Kotlin).

Čemu se razlikuje Singleton od Factory?

Singleton — jedna instanca za celu aplikaciju. Factory — novi objekat svaki put. Singleton za resurse, Factory kada su potrebne različite konfiguracije iste klase.

Šta je upravljanje stanjem?

State Management — kako se podaci prenose između komponenti i kako UI reaguje na promene. U Flutter-u: Provider, Riverpod, BLoC. U Android-u: LiveData, StateFlow, ViewModel.

Sažetak

  • MVVM — glavni arhitektonski obrazac za Android i iOS. Clean Architecture za složene projekte.
  • Singleton, Factory, Builder — obrasci kreiranja za upravljanje objektima.
  • Adapter, Facade, Observer, Strategy — strukturni i bihejvioralni obrasci.
  • DI (Hilt, Koin, Swinject) je neophodan u modernim projektima za testabilnost.
  • Upravljanje stanjem: ViewModel + StateFlow (Android), Provider/Riverpod (Flutter).
  • Počnite sa MVVM, dodajte Clean Architecture kako projekat raste.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту