I would suggest the following comment: from the very beginning, your approach will create a tight connection. This is directly related to your requirement No 3 "No problem."
In your diagram, you have identified two modules. The main module and Module 2. I would suggest that these two modules are different from each other. I mean, you can develop them completely separately, and then connect them, because the business problems they handle are different.
However, your current architectural approach:
- Pairs Main module and module 2 data into one database
- Couples Main Module and Module 2 business objects at the same business level
- Services of the main module and module 2 at the same level of service
- Pairs of deployment and management of the main module and module 2
What might be worth considering: build the main module and module 2 as separate vertical service desks.
I mean, the main module and module 2 become the main service and service 2
Each service has its own database, its own business layer, its own service layer, and its own user interface components.
However, this is a concern: how do core services and services 2 work together to create my product?
To solve this problem:
At the end of the user interface, you stitch your front end using the client-side code to download responses from the Main Service and Service 2 in one view.
On the back, you use subscription subscription publishing so that the Main Service can subscribe to events occurring in Service 2 and vice versa.
This will lead to the creation of an application built from scratch on top of loosely coupled vertical service stacks that maintain consistency through asynchronous messaging.
If you need to add a new module to your application, you can create a new service stack that supports the required features and connect it to the minimum or even without changes necessary for other stacks (ideally, this is the only reason for changing existing stacks to be that they want to subscribe to events from the new module).
This is a completely different approach to the one you offer, but the one that allows you to better cope with the requirement for free communication in my version.