Last active
November 10, 2017 09:39
-
-
Save simonpang/cd5432fd8ec03d4cc3613108bdbc6d88 to your computer and use it in GitHub Desktop.
MVMUM Architecture (i.e. View ViewModel UseCase Model)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MVMUM Architecture (View ViewModel UseCase Model) | |
V > VM > UC > M ( i.e. direction of dependency) | |
<= direct of flow control | |
=> increasing relevant to domain (i.e. plain object) | |
<= increasing relevant to framework/environment (i.e. platform objects with side effect e.g. native GUI, database) | |
Example: (user login screen) | |
// View. UI event handling, layout. | |
class LoginView { | |
var viewModel: LoginViewModel | |
var loginButton = UIButton() | |
func viewDidLoad() { | |
viewModel = ViewModelFactory.newLoginViewModel(context) | |
… | |
} | |
} | |
// View model. Display formatting and navigation logics here. | |
enum Route { | |
case presentSuccessLogined | |
case forgetPasswordFlow | |
} | |
class LoginViewModel { | |
var useCase: LoginUseCase | |
var prefilledName | |
var localizedErrorMessage | |
var onLoadingIndicatorVisible: (Bool) -> Void | |
var onSubmitButtonEnabled: (Bool) -> Void | |
var onPromptError: () -> Void | |
var onNavigateTo: (Route) -> Void | |
init(context) { | |
useCase = UseCaseFactory.newLoginUseCase(context) | |
} | |
} | |
// Platform independent UseCase. All business logics here. | |
class LoginUseCase { | |
var session: SessionModel | |
var username | |
var password | |
func login() | |
func setUsername() | |
func setPassword() | |
var onLoading: (Bool) -> Void | |
var onError: (String) -> Void | |
var onSuccess: (SessionModel) -> Void | |
} | |
// Plain object Model. Entity only. | |
class SessionModel { | |
var userId | |
var sessionToken | |
var expiryTime | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment