I am starting to design a management software that should have the following features:
- In its “basic” version, it will run on a single PC.
- A second scenario involves its use always on the same local network, but the “Clients” that need to access the data can be more than one (about 2 to 6).
- A third scenario involves data access being possible even from outside the local network.
The system design that came to my mind, to maintain as much as possible a “transparent” approach to the 3 possible scenarios, is to have a RESTful API service as the “backend” with business logic that allows CRUD operations on data residing in a DB and one or more Clients that consume these APIs.
In this way, in the first scenario, everything (DB, RESTful Server, and client) would run on the same PC. In the second scenario, one of the PCs on the local network would become the “server” running the DB and RESTful server while the others would only run the client. In the third scenario, the entire backend could be moved to a cloud service like Azure or AWS, and the various clients would access it via the internet. Surely, for both scenario 1 and 2, there could be more efficient methods, but assuming I don’t want to change the data exchange methodology in all three scenarios, no other designs came to mind.
Technologically, I would feel comfortable using .NET technologies.
The Clients may have different tasks and need to run on different platforms, so I hypothesized the possibility of having different types of clients based on the task they need to perform and the platform they need to run on. For example, the store’s frontend could be developed with a WPF application running on a PC for easy access to local peripherals like barcode readers or POS printers, a web app for accessing statistics or managing configurations, and mobile applications (native or multi-platform) for accessing data when on the go.
Do you have any other ideas or suggestions?