Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 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, lack of transaction, cannot do joins?
    Given Mifos is still seen as one application by its users, creating separate database would be an overkill. Also, there are no performance requirements which would forces us on this route currently.
  • What the extent of vertical slicing of modules? (i.e. does it include the presentation, action)
    There are two ways to go about it. A functional module consists of service, domain, DTO and hibernate mapping. In this approach entire presentation layer action/workflow/UI-objects/ftl would be part of one maven module.
    A functional module also consists of its own presentation code. (Questionaire module is built like this). The presentation code which delivers data from one or more module need to be handled in common presentation a separate mashup module or something like that.
  • Which layers in a module are accessible to another module at the compile time?
    The service layer would serve as the API for a given module. This could be explicitly enforced using OSGi bundles as well.
  • Entities in one module would logically refer to entities in another module. Should these relationships be modeled at the entity level, as well? If not then how would the relationships be created?
    A module should not know about the entities in another module. This means that they cannot be linked together using hibernate relationship. But since there is relationship existing at database level, we should create reference objects and create mapping using it. Reference objects would have only the identifier (no behavior) and they would have immutable (hibernate term for read-only) mapping.
  • Which module would host the page when data displayed is from two functional modules?
    Since the functional modules own the presentation of their data. Cross module presentation should be done in a presentation only module. This module depends on functional modules and not vice-versa.
  1. 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?
  2. 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?
  3. When entities are updated in different modules, would transaction be taken care of? Would it be the case when we use OSGI?
  4. If there is a requirement which involves joining data across different modules. How would we resolve such issues? Where should this code lie? How would we do this using HQL?
  5. Each module potentially has some reference data in it. ReferenceData is something which doesn't change very often. If and when we need it, what should be the caching strategy for reference data?
  6. Should each module have their own session factory?
  7. Should each module have their own session?

...