Cheetah Release Architecture
This page includes proposed architecture ideas for the Cheetah release.
It should be noted that many discussions about these issues have come before both on and off the Mifos dev list and from various contributors. Some of these ideas have been captured on the following pages:
MifosAPI
ArchitecturePlans
Modularity
In this release we aim to divide Mifos into modules that can be developed, refactored or rewritten as independently of one another as possible.
Application Modules
Customer
Client
Group
Center
User
User
Office
Financial Products
Customer Account (Cash Account)
Loan Account
Savings Account
Surveys/PPI
Reporting
Accounting
Presentation/UI
It is worth some discussion about how the UI should be related to the individual modules it makes use of. An initial proposal would just be to consider the entire UI to be an independent module that can be replaced. Eventually to achieve a pluggable UI we might consider JSR-168 Portlets.
Infrastructure Modules
Security
Configuration
Change Logs (Audit Logs)
Database Upgrade Engine (Schema Evolution)
Internationalization
Logging
Batch Processing
Application Module Internal Structure
Within an application module, a standard layered architecture will be followed including the following layers:
Service Layer (application level operations)
Domain Layer (business objects encapsulating business logic)
Repository/DAO Layer (encapsulating CRUD persistence operations)
A repository layer is a buffer layer that decouples the domain layer from the database storage layer. Decoupling permits one to replace a database layer via Hibernate with another, perhaps in-memory store, that can speed up unit testing.
The Presentation Layer (UI) will only make calls to the application service layer. No business logic or transaction related code will be in this layer.
An Infrastructure Layer will provide services which are encapsulated in Infrastructure Modules.