Page from the Nawy mobile app
-
Code Files separated by Package-by-feature Concept (Each Package contains all its dependents)
-
App's Architecture implemented by MVVM Concept with Bloc State Management as a Viewmodel
-
Each layer in MVVM separeated from upper layer , it doesn't know about its Upper Layer ( View -> VM -> Repo ) ViewModel doesn't care about View , ViewModel doesn't have View Reference , Just subscribing with VM's Stream Subject which callback with any updates
-
Model Layer contains Every thing about Data (Remote data Source Netoworking , Pojo Model classes , Repository )
-
Code is made Testable with dependency injection concept , you can test Repo separately & test VM separately without View
Some of SOLID Principles applied :
-
D Dependency Inversion Principle as every Function depends on Abstraction & injected by dependent paramter instead of closing it in the scope , it makes the code testable for unit-testing assertion and helps in loosing the tightly coupling
-
I Interface Segregation Principle as each layer has its own interface that contain only primary functions for Implementer classes , so there on unneeded Override for child classes
-
S Single-Responsibility Principle as each Function for only one job
Most of Functions are Pure Functions doesn't affect out of its scope (takes paramter return result)