DEV Community

Pheak Pheasa
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
Enter fullscreen mode Exit fullscreen mode

Key Aspects of This Structure:

  1. MVVM Organization:

    • Each module has View, ViewModel, and Model folders
    • Clear separation of concerns with Storyboards in View folders
  2. Module-based Structure:

    • Banking features separated into distinct modules (Login, Dashboard, Accounts, etc.)
    • Each module is self-contained with its own Storyboard and components
  3. Core Services:

    • Network, Storage, Authentication layers separated from UI
    • Reusable services for banking operations
  4. Common Components:

    • Shared UI elements and protocols in Common directory
    • Coordinator pattern for navigation between modules
  5. 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)