The problem with MVC is there are some massive controller, so to maintain and add new features might be painful. So I'm trying to using MVVM to make sure separate the logic bussiness and the UI
- Engine: Shared classes, enums, structures, or logic, business on backend, networks, parsers, helpers, caches, data store, etc…
- Manager: Contains Singleton class to handle Application product, Authentication manager, Push notifications manager, REST manager files
- Constant: AppConstants file, RESTConstants file, Constants file,…
- Utility: AppUtils file, RESTUtils file, …
- Config: Contains everything contribute for configuration app, AppConfig file: Configure all setting in app: Feedback, geting started with third party libraries, configure server’s hosts, configure logger, …
- Extension: Extend class / struct / enum
- Service: ApiService: Call API, SystemService: Handle system service (Push Notification, …)
- Persistence: Store entities here
- Manager: Contains Singleton class to handle Application product, Authentication manager, Push notifications manager, REST manager files
- Model: Every object in app e.g: User, Topic
- ViewModel: Model for view e.g: TopicsViewModel is model for view of topics
- View: Every module contains View & anything related to front end.
- Component: The views that they will be share between multiple screens. With each screen should be has a folder for itself
- View: Represent for the screens. With each screen should be has a folder for itself. E.g. Feed: TopicsViewController
- Component: The views that they will be share between multiple screens. With each screen should be has a folder for itself
- Resource: Can be contains Images, Sounds, Layout config file, etc. Assets.xcassets, Localizable.strings, …
- Storyboard: Put all storyboards at here. With each screen should be has a storyboard file for itself => Reduce conflicts when merge Pull Request
- AppDelegate.swift
- Info.plist
There are 2 main screens:
- TopicsTableViewController: Display the list of Topics, users able to Up/Down vote
- NewTopicViewController: Allow user to contribute topic
- Add new feature from on
develop
branch - After finish the feature, merge to
develop
- Make a release will go to
release
branch - Finished release merge to
master
- Do the hotfix on
hotfix
branch
To test project without open by XCode: fastlane scan