I remember this from when I was a student, I'm sure my lecturer called it something like "state shadowing" (permutations of that name covered by the "shadow state" and "variable shadowing") - basically what I'm remembering is related to hardware programming where there's a time cost associated with querying the state of a connected hardware peripheral, so when setting the hardware state you also set a variable in-memory - that way whenever you need to know the hardware state you can just reference the variable.
Does anyone know what this kind of pattern would be called?
I'm looking for some inspiration on how to design something, so I'm just looking for any kind of related literature, but it's a bit hard to find anything when you don't know the name.
I would call it a cached result, but maybe some other term is in common usage among embedded system developers who work close to the hardware. Objects sometimes do the same thing to avoid calculating a result that clients frequently use.
We are starting a new project and are discussing about which architecture to use in our project.
We want to decide between Monolithic and Microservices architecture.
Just to give a overview of our project,
We have four functional modules, each with a specific functionality.
Each of these module is part of a process flow of the project.
After completion of each stage of the flow, that data will be used by the next module for further processing.
This will be a web application which can be used by anyone by registering.
Number of hits to this application may not be as much as with other applications, as it will be used only by people with specific expertise.
May be by around one million people.
Please suggest your thoughts on how to go about this project.
My thinking is that microservice architecture brings a lot of operational complexity and inter-service communication (i.e. you should handle failures during communication gracefully, manage contract changes between services, etc). So you should consider them carefully not just use them as a new default.
I also feel that there are not enough details in your questions. But I think you should use microservices:
- if some of processing stage is more resource-consuming and you need to deploy multiple instances of it.
- if your processing stages belong to different bounded contexts or business domains.
If the goal is just to reduce code complexity then SOLID and vertical slices are your friends.
I guess the most sensible approach is to start with a monolith and extract microservices once needed.