Rearchitecture: High-Level Design (TECH)

Description: Discuss rearchitecture to address identified technical pain points, propose high-level designs 


Leads: Karl, Josh


Rapporteur/Notetaker:  Rich

Audio recording:  High level Architecture d2s1.mp3

Notes from Session:

High Level Review of Architecture (by Josh)

  • Traditional 3 layer
  • Requests go to controller, thin layer of mybatis to database
  • Arranged in gradle sub-projects, fairly logical though all javascript/controllers/front-end stuff is in openlmis-web, including migration and authentication.
  • Some of the bigger problems: 
    • Migration scripts are sequentially named.  Too many to get an idea of what's going on.
    • Encapsulation:  no domain model, mainly a transactional model
    • Error handling:  no structure, just throwing a runtime exception and moving on.
    • Not leveraging single page application model:  it's really a "collection of single page applications"
      • Unnecessary bandwidth usage.  TW and JSI encountered performance issues in various projects
        • Compression helped (verified by JSI in other deployments).  TW studying CDN.
        • Many of the standard libraries, like Angular, are using minified versions, but OpenLMIS angular/JavaScript scripts are NOT minified 
      • Specific library version dependencies, so it's difficult to tell whether a specific version is required or not. 

 

Solution/Direction Ideas [Jeff]

  • Some inspirations from a TW-built PtP lending platform:
    • Described a complex stateful operation carried out as a series of RESTful calls, which can be strung together between websites and mobile devices.  A good analogy is a shopping cart, where someone may add something to a cart on their desktop, then view and buy it via mobile (These are long transaction-like processes, state is stored in domain model)
    • Benefits:  once domain model is stable, hides complexity of processes, clients just need to invoke the series of RESTful calls to fulfill the process.  This could apply to processes like R&R
    • This work extremely difficult to do incrementally - implies a rewrite of OpenLMIS.  This time around, we have the benefit of the domain knowledge and requirements up front.
    • For application to OpenLMIS:  need core domain model, then define processes (like R&R)
    • Difficult for offline operation
  • OpenLMIS lacks a domain model
  • [OpenLMIS could export a "star schema" for reporting and handling extensible fields]
  • Discussion of business logic separation in a domain model [Adam]
    • Domain is about data management
    • Service layer is about the business process
    • General agreement that variations on this theme exist.
  • "Does OpenLMIS need a domain model?"
  • Common business problem is updating R&R, say adding a new tab with some extra data to collect - how does this fit in the TW PtP model?
    • Thought problem:  add DOB to every line on a Req
      • Extend the domain object via name-value pair
        • Does not add a column to the DB.  Need to export data (via star schema or other technique) for reporting and such
    • Subclass business logic for validation
    • UI:  new HTML files
    • Spring selects new versions at build and runtime

Some other needs

  • Need "contribute back" process (coming in further sessions)
  • Need DB update strategy
  • Reporting is a perennial need and request from ministries.  Need a solid reporting solution
  • Need to define extension points for processes like R&R


 


OpenLMIS: the global initiative for powerful LMIS software