[ There is a slack channel hosted on Mifos.slack.com called #Fineract.
There are 368 participants on that channel and so it is a place where
people are having discussions.  My note to the host is to make sure content
makes it back to the list if it is of broad interest... ]

A recent thread is perhaps useful to capture here for the listserv archive.
   It starts with Ahmed making a summary and asking questions... I then
follow up.


================
FROM AHMED :
Hi contributors
As part of my journey to understand *Fineract's codebase and workflow*, I
found the following videos which helped me to understand multiple things,
and found it useful to share, already will help anyone .

   - Modularizing Fineract <https://youtu.be/8qp3zQGh5s4>
   - Monolith to Microservices: Modularizing Fineract 1.x
   <https://youtu.be/fn9uhpOWrHk>
   - Expanding Fineract capabilities <https://youtu.be/sfp7ox3wMKk>

*I took some notes here, but for sure the videos are much more valuable.*

   - As the Fineract community and codebase grew over time, the monolithic
   architecture introduced natural scalability challenges. Core domain
   classes, such as Loan.java (exceeding *7,000 lines of code*) fineract is
   monolithic not microservices architecture but it's well structure.
      - For that, the need for modularity and separation comes into the
      scene, check this Picture
      
<https://martinfowler.com/bliki/images/microservice-verdict/productivity.png>
      .
   - The flow of the application goes as follows:
      - External clients (web/mobile apps) send HTTP requests to the
      Fineract backend.
      - API layer (RESTful APIs developed with JAX-RS) receives the request
      - When receiving PUT or POST requests the attached JSON is stored as
      a string blob and is converted manually with GSON library to Java POJO.
      - A portion of the requests are translated into commands.
      - The commands are related to CQRS pattern for separation between
      Reads & Writes. (e.g. GLAccountReadPlatformService and
      GLAccountWritePlatformService)
      - The commands go to a spring injectable service for command
      processing (handler packages) which delegates the command to the service
      layer where business logic resides.
      - All The execution flow happens synchronously.
      - Check this image
      
<https://github.com/apache/fineract/assets/87117386/d66494ec-41b2-467d-9ba3-4c6de7a4f2a0>
   - The code structure consists of 12 top-level
   
<https://github-production-user-asset-6210df.s3.amazonaws.com/87117386/311600210-c11b5493-b0f4-4973-ab4b-dbe01e7c5e31.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20250420%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250420T015137Z&X-Amz-Expires=300&X-Amz-Signature=1679e4b6964f4fab1c740a89d04da7cce4ea176f1cbe4558c49ee0ac48f491b4&X-Amz-SignedHeaders=host>
   .
   - Identifiable patterns in the codebase:
      - api : The API layer that receives the client requests and is
      implemented with JAX-RS, which exposes some end-points that the client
      communicates with.
      - data : The *Data Transfer Objects* which encapsulates the data and
      transports it among different parts of the application which use Spring
      Data *JPA *(e.g. LoanRepository).
      - domain : Contain JPA/Hibernate (e.g., Loan, Client) entities that
      map between database tables and java classes.
      - serialization : responsible for de/serializing between *JSON* files
      and java *POJO*s
      - exception : hold the project exceptions.
      - utility : some utility classes that contain some reusable code.
      - handler : delegate the commands to the suitable service.
      - mapper : contains the mapper classes that are responsible for
      mapping between entities and DTOs.
      - service : the service layer which contain the business logic.

Finally, these insights are personal effort (any feedback would be
appreciated).
What about my suggestions ?
I recommend watch the videos and read documentation
<https://fineract.apache.org/docs/current/> where you will find more info
about the history and the challenges for scalability and consistency and
how they have been tackled
thanks for your attention.
[image: YouTube] <https://www.youtube.com/>YouTube
<https://www.youtube.com/> | The ASF
<https://www.youtube.com/@communityovercode>
Modularizing Fineract: The journey so far <https://youtu.be/8qp3zQGh5s4>
<https://youtu.be/8qp3zQGh5s4>
[image: YouTube] <https://www.youtube.com/>YouTube
<https://www.youtube.com/> | The ASF
<https://www.youtube.com/@communityovercode>
Monolith to Microservices: Modularizing Fineract 1.x - A. Vidakovic, N.
Ambali, I. Molnar, V. Romero <https://youtu.be/fn9uhpOWrHk>
<https://youtu.be/fn9uhpOWrHk>
[image: YouTube] <https://www.youtube.com/>YouTube
<https://www.youtube.com/> | The ASF
<https://www.youtube.com/@communityovercode>
Expanding Fineract capabilities, a practical example - Frank Nkuyahaga
<https://youtu.be/sfp7ox3wMKk>
<https://youtu.be/sfp7ox3wMKk>
(105 kB)

Reply via email to