Pheak Pheasa
Posted on • Edited on
MVVM Directory Structure for a Large Banking Mobile App Project
For a large bank mobile app using MVVM with Storyboards, here's a well-organized directory structure:
BankApp/├── Application/│ ├── AppDelegate.swift│ ├── SceneDelegate.swift│ ├── Info.plist│ └── Assets.xcassets/├── Resources/│ ├── Fonts/│ ├── Localization/│ │ ├── en.lproj/│ │ │ └── Localizable.strings│ │ └── es.lproj/│ │ └── Localizable.strings│ └── Constants.swift├── Core/│ ├── Network/│ │ ├── NetworkManager.swift│ │ ├── APIEndpoints.swift│ │ ├── RequestBuilder.swift│ │ └── NetworkError.swift│ ├── Storage/│ │ ├── KeychainManager.swift│ │ ├── CoreDataManager.swift│ │ └── UserDefaultsManager.swift│ ├── Authentication/│ │ ├── AuthenticationManager.swift│ │ └── BiometricAuthManager.swift│ └── Analytics/│ └── AnalyticsManager.swift├── Extensions/│ ├── UIKit+Extensions.swift│ ├── Foundation+Extensions.swift│ └── Date+Extensions.swift├── Utilities/│ ├── ThemeManager.swift│ ├── Logger.swift│ └── CurrencyFormatter.swift├── Models/│ ├── Account.swift│ ├── Transaction.swift│ ├── Card.swift│ ├── User.swift│ └── InvestmentPortfolio.swift├── Services/│ ├── AccountService.swift│ ├── TransactionService.swift│ ├── CardService.swift│ ├── NotificationService.swift│ └── InvestmentService.swift├── Modules/│ ├── Login/│ │ ├── View/│ │ │ ├── LoginViewController.swift│ │ │ └── Login.storyboard│ │ ├── ViewModel/│ │ │ └── LoginViewModel.swift│ │ └── Model/│ │ └── LoginResponse.swift│ ├── Dashboard/│ │ ├── View/│ │ │ ├── DashboardViewController.swift│ │ │ ├── Dashboard.storyboard│ │ │ ├── Cells/│ │ │ │ ├── AccountSummaryCell.swift│ │ │ │ └── QuickActionCell.swift│ │ │ └── Components/│ │ │ └── BalanceSummaryView.swift│ │ ├── ViewModel/│ │ │ └── DashboardViewModel.swift│ │ └── Model/│ │ └── DashboardData.swift│ ├── Accounts/│ │ ├── View/│ │ │ ├── AccountsViewController.swift│ │ │ ├── AccountDetailViewController.swift│ │ │ ├── Accounts.storyboard│ │ │ └── Cells/│ │ │ ├── AccountCell.swift│ │ │ └── TransactionCell.swift│ │ ├── ViewModel/│ │ │ ├── AccountsListViewModel.swift│ │ │ └── AccountDetailViewModel.swift│ │ └── Model/│ │ └── AccountDetails.swift│ ├── Transfer/│ │ ├── View/│ │ │ ├── TransferViewController.swift│ │ │ ├── TransferConfirmationViewController.swift│ │ │ ├── Transfer.storyboard│ │ │ └── Components/│ │ │ └── RecipientSelectionView.swift│ │ ├── ViewModel/│ │ │ ├── TransferViewModel.swift│ │ │ └── TransferConfirmationViewModel.swift│ │ └── Model/│ │ └── TransferRequest.swift│ ├── Cards/│ │ ├── View/│ │ │ ├── CardsViewController.swift│ │ │ ├── CardDetailViewController.swift│ │ │ ├── Cards.storyboard│ │ │ └── Components/│ │ │ └── CardView.swift│ │ ├── ViewModel/│ │ │ ├── CardsListViewModel.swift│ │ │ └── CardDetailViewModel.swift│ │ └── Model/│ │ └── CardDetails.swift│ ├── Payments/│ │ ├── View/│ │ │ ├── PaymentsViewController.swift│ │ │ ├── BillPaymentViewController.swift│ │ │ ├── Payments.storyboard│ │ │ └── Cells/│ │ │ └── PayeeCell.swift│ │ ├── ViewModel/│ │ │ ├── PaymentsViewModel.swift│ │ │ └── BillPaymentViewModel.swift│ │ └── Model/│ │ └── PaymentRequest.swift│ ├── Investments/│ │ ├── View/│ │ │ ├── InvestmentsViewController.swift│ │ │ ├── InvestmentDetailViewController.swift│ │ │ ├── Investments.storyboard│ │ │ └── Components/│ │ │ └── PortfolioChartView.swift│ │ ├── ViewModel/│ │ │ ├── InvestmentsViewModel.swift│ │ │ └── InvestmentDetailViewModel.swift│ │ └── Model/│ │ └── InvestmentData.swift│ ├── Profile/│ │ ├── View/│ │ │ ├── ProfileViewController.swift│ │ │ ├── SecuritySettingsViewController.swift│ │ │ └── Profile.storyboard│ │ ├── ViewModel/│ │ │ ├── ProfileViewModel.swift│ │ │ └── SecuritySettingsViewModel.swift│ │ └── Model/│ │ └── UserProfile.swift│ └── Support/│ ├── View/│ │ ├── SupportViewController.swift│ │ ├── ChatSupportViewController.swift│ │ └── Support.storyboard│ ├── ViewModel/│ │ ├── SupportViewModel.swift│ │ └── ChatSupportViewModel.swift│ └── Model/│ └── SupportTicket.swift├── Common/│ ├── Views/│ │ ├── CustomButton.swift│ │ ├── CustomTextField.swift│ │ ├── AlertView.swift│ │ └── LoadingView.swift│ ├── Protocols/│ │ ├── Reusable.swift│ │ └── Coordinator.swift│ └── Coordinators/│ ├── AppCoordinator.swift│ ├── LoginCoordinator.swift│ └── MainCoordinator.swift└── Configurations/ ├── Debug.xcconfig ├── Release.xcconfig └── Staging.xcconfig
Key Aspects of This Structure:
MVVM Organization:
- Each module has View, ViewModel, and Model folders
- Clear separation of concerns with Storyboards in View folders
Module-based Structure:
- Banking features separated into distinct modules (Login, Dashboard, Accounts, etc.)
- Each module is self-contained with its own Storyboard and components
Core Services:
- Network, Storage, Authentication layers separated from UI
- Reusable services for banking operations
Common Components:
- Shared UI elements and protocols in Common directory
- Coordinator pattern for navigation between modules
Resources & Configuration:
- Properly organized resources for localization, fonts, etc.
- Different configuration files for various build environments
This structure supports scalability and maintainability while following MVVM principles and leveraging Storyboards for UI design in a large banking application.
Top comments(0)
Subscribe
For further actions, you may consider blocking this person and/orreporting abuse