Component Architecture
Overviewโ
BankLingo's component architecture follows a modular, domain-driven design with clear separation of concerns. The system is organized into functional modules that encapsulate business logic, data access, and API boundaries.
High-Level Component Diagramโ
Module Dependenciesโ
Administration Moduleโ
Purpose: Core administration and system management
Dependencies:
- Process Engine (BPMN execution)
- Transaction Management (universal commands)
- Audit Service (compliance tracking)
Key Components:
- User Management
- Branch Management
- Product Configuration
- System Settings
- Authorization Engine
API Endpoints: /api/bpm/*, /api/admin/*
Deposits Moduleโ
Purpose: Deposit account and transaction management
Dependencies:
- Transaction Management (deposit/withdrawal transactions)
- Accounting Services (GL posting)
- Process Engine (workflow automation)
- Notification Service (customer alerts)
Key Components:
- Deposit Account Lifecycle
- Transaction Processing (Deposits/Withdrawals)
- Interest Calculation
- Fee Management
- Account State Management
API Endpoints: /api/bpm/cmd (deposit commands)
Domain Entities:
DepositAccountDepositTransactionDepositProductDepositProductAccountingRule
Loans Moduleโ
Purpose: Loan account and transaction management
Dependencies:
- Transaction Management (loan transactions)
- Calculation Services (interest, amortization)
- Accounting Services (GL posting)
- Process Engine (approval workflows)
Key Components:
- Loan Account Lifecycle
- Loan Disbursement
- Repayment Processing
- Loan Reschedule/Refinance
- Arrears Management
- Loan Write-off
API Endpoints: /api/bpm/cmd (loan commands)
Domain Entities:
LoanAccountLoanTransactionLoanProductLoanSchedule
Tellering Moduleโ
Purpose: Teller operations and till management
Dependencies:
- Transaction Management (teller transactions)
- Vault Module (cash transfers)
- Deposits Module (account operations)
- Cheque Module (cheque processing)
Key Components:
- Till Management (Open/Close)
- Cash In/Cash Out
- Teller Transactions
- Till Reconciliation
- Cheque Clearing
API Endpoints: /api/bpm/cmd (teller commands)
Domain Entities:
TellerTillTellerTransactionCashTransaction
Vault Moduleโ
Purpose: Branch vault and cash management
Dependencies:
- Transaction Management (vault transactions)
- Tellering Module (till funding)
- Accounting Services (cash GL)
Key Components:
- Branch Vault Management
- Vault Funding
- Till-to-Vault Transfers
- Cash Position Tracking
API Endpoints: /api/bpm/cmd (vault commands)
Domain Entities:
BranchVaultVaultTransactionCashPosition
Cheque Moduleโ
Purpose: Cheque registration and clearing
Dependencies:
- Transaction Management (cheque transactions)
- Deposits Module (account updates)
- Tellering Module (teller processing)
Key Components:
- Cheque Book Registration
- Cheque Deposits
- Cheque Withdrawals
- Cheque Clearing
- Cheque Bouncing/Cancellation
API Endpoints: /api/bpm/cmd (cheque commands)
Domain Entities:
ChequeRegistrationChequeClearingTransactionChequeBook
Cross-Cutting Componentsโ
Process Engineโ
Purpose: BPMN workflow execution and automation
Responsibilities:
- BPMN 2.0 process execution
- User task management
- Gateway evaluation
- Event handling
- Script execution (ServerScript/ClientScript)
Key Features:
- Context loaders (dynamic data injection)
- Event-driven architecture
- Process instance state management
- Activity tracking
Dependencies:
- All domain modules (executes workflows for all)
- Notification Service (user task notifications)
Implementation: BankLingo.Entities.ExecutionEngine
Transaction Managementโ
Purpose: Universal transaction lifecycle management
Responsibilities:
- Transaction state management (PENDING/SETTLED/CANCELLED/REVERSED)
- Approval workflow coordination
- Transaction impact tracking
- Reversal processing
Key Components:
ApproveTransactionCommandRejectTransactionCommandCancelTransactionCommandReverseTransactionCommandTransactionImpactRecordsystem
Dependencies:
- All transaction modules (Deposits, Loans, Teller, Vault, Cheque)
- Audit Service (transaction trail)
Implementation: CB.Administration.Api/Commands/BPMCore/TransactionManagement
Notification Serviceโ
Purpose: Multi-channel notification delivery
Responsibilities:
- Email notifications
- SMS notifications
- Push notifications
- In-app notifications
- Notification templating
Dependencies:
- Azure Service Bus (message queue)
- External SMS gateway
- Email service provider
Channels:
- Email (SendGrid/SMTP)
- SMS (Twilio/local gateway)
- Push (Firebase Cloud Messaging)
Audit Serviceโ
Purpose: Compliance and audit trail management
Responsibilities:
- Activity logging
- Transaction auditing
- Change tracking
- Compliance reporting
- Audit trail storage
Dependencies:
- Azure Blob Storage (log archival)
- SQL Database (audit records)
Logged Events:
- All transactions
- State changes
- User activities
- System events
Component Interaction Patternsโ
1. Transaction Processing Flowโ
2. Approval Workflowโ
3. Process Engine Integrationโ
Dependency Graphโ
Module Communication Patternsโ
1. Command Pattern (MediatR)โ
All modules use MediatR for command handling:
Implementation details removed for security.
Contact support for implementation guidance.
Benefits:
- Decoupling of modules
- Single responsibility
- Easy testing
- Pipeline behaviors (logging, validation)
2. Event-Driven Patternโ
Modules communicate through domain events:
Implementation details removed for security.
Contact support for implementation guidance.
Benefits:
- Loose coupling
- Asynchronous processing
- Scalability
- Audit trail
3. Repository Patternโ
Data access abstraction:
Implementation details removed for security.
Contact support for implementation guidance.
Benefits:
- Abstraction of data access
- Testability
- Centralized data logic
- Query optimization
API Boundariesโ
BPM Command APIโ
Endpoint: POST /api/bpm/cmd
Purpose: Unified command execution endpoint
Request Format:
{
"commandName": "InitiateDepositCommand",
"data": {
"accountEncodedKey": "...",
"amount": 1000.00,
"requireApproval": false
}
}
Response Format:
{
"isSuccessful": true,
"statusCode": "00",
"message": "Transaction completed successfully",
"data": {
"transactionKey": "DEP123456",
"balance": 11000.00
}
}
Supported Commands:
- Deposit transactions
- Withdrawal transactions
- Loan transactions
- Teller transactions
- Vault transactions
- Cheque transactions
- Universal transaction management
Query APIโ
Endpoint: POST /api/bpm/query
Purpose: Data retrieval and reporting
Request Format:
{
"queryName": "RetrieveDepositAccountQuery",
"data": {
"accountNumber": "1234567890"
}
}
Process APIโ
Endpoint: POST /api/bpm/process
Purpose: BPMN process management
Operations:
- Start process instance
- Complete user task
- Query process state
- Cancel process
- Pause/Resume process
Component Scalabilityโ
Horizontal Scalingโ
Stateless Components (can scale horizontally):
- API Gateway
- All domain modules
- Query services
- Command handlers
Stateful Components (require coordination):
- Process Engine (sticky sessions)
- Transaction Management (distributed locks)
Vertical Scalingโ
Resource-Intensive Components:
- Calculation Services (interest, amortization)
- Reporting Services (large datasets)
- Batch Processing (end-of-day)
Technology Stack by Componentโ
| Component | Technology | Version |
|---|---|---|
| API Gateway | ASP.NET Core Web API | .NET 8 |
| Domain Modules | C# Class Libraries | .NET 8 |
| Process Engine | Custom BPMN Engine | .NET 8 |
| Command Handling | MediatR | 12.x |
| Data Access | Entity Framework Core | 8.x |
| Caching | Redis | 7.x |
| Validation | FluentValidation | 11.x |
| Mapping | AutoMapper | 12.x |
| Logging | Serilog | 3.x |
| Testing | xUnit, Moq | Latest |
Component Isolationโ
Bounded Contextsโ
Each module represents a bounded context in DDD:
- Deposits Context: Deposit accounts, transactions, products
- Loans Context: Loan accounts, schedules, repayments
- Tellering Context: Tills, teller operations, cash
- Vault Context: Branch vaults, cash positions
- Cheque Context: Cheque books, clearing, bouncing
Context Integrationโ
Shared Kernel:
- Transaction Management (universal)
- Audit/Logging (universal)
- Authentication (universal)
Published Language:
- Commands (for operations)
- Queries (for data retrieval)
- Events (for notifications)
Component Deploymentโ
Deployment Unitsโ
-
Core API (single deployment):
- All domain modules
- Process Engine
- Transaction Management
- Shared services
-
Background Services (separate deployments):
- Notification Service
- Batch Processing Service
- Report Generation Service
Advantages of Monolithic Deploymentโ
- Simplified deployment
- Shared transaction boundaries
- Easier debugging
- Lower operational overhead
Microservices Migration Pathโ
Future potential microservices:
- Notification Service รขโ โ Independent service
- Reporting Service รขโ โ Independent service
- Batch Processing รขโ โ Independent service
Related Diagramsโ
- System Architecture - Overall system overview
- Deployment Architecture - Infrastructure and deployment
- Data Flow Architecture - Transaction flows
- Integration Architecture - External integrations
- Security Architecture - Security layers
Summaryโ
The component architecture demonstrates:
- รขลโฆ Clear separation of concerns - Modules with single responsibilities
- รขลโฆ Loose coupling - Modules communicate through abstractions
- รขลโฆ High cohesion - Related functionality grouped together
- รขลโฆ Scalability - Stateless components can scale horizontally
- รขลโฆ Testability - Components can be tested in isolation
- รขลโฆ Maintainability - Changes localized to specific modules
Key Design Principles:
- Domain-Driven Design (DDD)
- SOLID principles
- Command Query Responsibility Segregation (CQRS)
- Event-Driven Architecture
- Repository Pattern
- Dependency Injection