Monolithic systems have the problem of coupling. Cognizant of this fact, we want to move to a modular system.
What is a Mifos module?
Mifos modules should be carved out based on functional cohesion. There can be a two kinds of modules functional and cross-functional. (For list of modules please check here.)
All modules ...
- would be identifiable in the source code as a maven module.
Functional modules...
- would encapsulate the data and behavior for a part of the system.
- is responsible for its presentation. The code (markup and others) which provide the presentation for the module would owned by this module.
Cross functional modules...
- can be used as libraries by other modules.
Questions (provides a list of issues)
Should module be decoupled from each other to the extent that they can possibly have their own database? Implications: no foreign key relationship, possible independent hosting and deployment.
Which layers in a module are accessible to another module at the compile time?
Entities in one module would refer to entities in another module. In such a case should there be hibernate based relationship between entities?
Which module hosts the page which displays data from two functional modules?
In case of One-to-One/One-to-Many/Many-to-One (logical) relationships between entities how to decide who refers to whom? How to avoid cyclic relationships between modules?
If there is no domain relationship between entities in different modules. A parent entity (in module A) has child entity (in module B), when the child entity is created, how does parent entity get the id for it?
Guidelines
A functional module's service/domain-layer wants to read the data owned by another functional module.