Become a sponsor to codewithmukesh
codewithmukesh
Having quite a lot of experience with POS & Inventory Management systems, we set out to build out a full-fledged open-source system using our favorite tech stack and tools. Modular development was a prime requirement for us when we got started. Adapting to a Microservice architecture was the first choice we had. But given the complexities with the mentioned architecture, we decided to stay away from it at least for the starting.
There actually was no real need to implement microservices. fluentpos was meant to help businesses in their day-to-day activities. For this, a well-designed monolith application would also do the trick. We were clear to have the API and UI separated, to give opportunities to multiple client apps in the future.
For API, ASP.NET Core 5.0 was our obvious choice. As for the UI, we decided to go with Angular 12 Material UI.
The WebAPI application had to be highly modular to improve the development experience. This needed breaking down the application to logical modules like Identity, Catalog, Sales, Inventory. Each of these modules has its own controllers/interfaces / dbContext. As for the DB providers, Postgres / MySQL will be used. One module cannot directly talk to the other module nor modify its table. CrossCutting concerns would use interfaces/ events. And yes, domain events are also included in the project using mediator Handler. Each of the modules follows a clean architecture design / Onion / Hex.
fluentpos was meant for retail businesses. The modular monolith architecture would help us to extend fluentpos to support other business modules like cafes, restaurants, warehouses and so.
Meet the team
-
Mukesh Murugan iammukeshmSoftware Engineer and Blogs @ codewithmukesh.com