UI Development


Mifos is currently in the process of changing how the user interface or presentation layer of the application is developed.

Mifos was originally developed using the following technologies:

  • HTML/CSS/JavaScript
  • JSP (jsp tags)
  • Struts
  • Home grown security

Technologies aside, the following problems existed for development on Mifos:

  • Domain entities were used in the presentation layer which resulted in business logic creeping up
  • Data access was executed directly from presentation layer (jsp tags)
  • Struts actions had lots of business logic within them
  • Alot of the creation and update flows relied on 'passing and storing' directly in http session causing trouble with state mangement (back button, refresh) for various flows
  • Alot of business-level (domain) validation done in presentation layer
  • Localisation and Internationalisation were broken in places

The vision for Mifos is to move toward a presentation layer that uses newer technologies and frameworks such as:

  • HTML
  • blueprint (CSS)
  • jQuery (JavaScript)
  • Freemarker (templating language)
  • Spring MVC and Spring Web Flow
  • Spring Security
  • Spring framework (Dependency Injection)

Also, to prevent business-logic from leaking out and to decouple the core mifos platform functionality from any client, the mifos presentation layer deals only with Data Transfer Objects (DTOs) (returned from mifos platform application service API's) and UI specific beans. This is enforced by defining presentation layer code in the userInterface module, ServiceFacade interfaces and DTOs in the serviceInterfaces module, and Service Facade implementations in separate domain modules. Since the userInterface module has no dependencies on domain modules compile errors result if domain object leak up into the userInterface module. Only the contract defined by the interfaces and DTOs in the serviceInterfaces module is exposed to the userInterface module.