We have a product consisting of several different modules. Customers can choose which modules are installed.
All modules share the main part, which processes user logins and other very common site functions.
The complication is that some of the modules are dependent on others. We took a modular approach to easily accept large chunks of code and easily create new modules.
All of the above, we have a similar situation in that each module is versioned and potentially released separately. To handle this, we did two things.
First, each module is registered in a common db table with the current revision number. It also logs all security roles and activities in shared tables. These checks are versatile enough for the kernel to handle this. Secondly, each module has its own schema inside the database. those. module1.Table1, module2.Table2. This allows us to have the same table names for several modules.
When we update this module, it only affects its own DDL (structure / data / s'procs / views). If there is a dependency between the modules, this is handled by the update tool. It checks the database to see if the xyz version (or better) of the associated module is installed. If this happens, the update will continue. If not, the update is interrupted and informs the user that they need to update other parts first.
The main thing to remove is dependency checking. If your modules are truly separate and share common security checks, that doesn't really matter. However, if there are some other overlaps, then for each installer it is necessary to check the versions to make sure that they are compatible.
You might even imagine a βfullβ installer that updates both applications to the current level for those who are not synchronized.
Notme source share