Omar and I are creating a range of commercial business products for our company. Products like bookkeeping (accounting), inventory control, payroll and personnel, point-of-sale and so on. When studying the market, we discovered that some customers require Inventory Control only, while others wanted Inventory Control with bookkeeping, for example.
The problem is, the code base for the Inventory Control module and the Bookkeeping module should stay the same and they should, somehow, know whether the other module is installed and act accordingly.
For example, when posting a sales invoice, there are usually 3 steps to carry out if the bookkeeping module is NOT installed. BUT if the bookkeeping module is installed then there are 5 steps and not 3, and so forth and so on.
You can say that either module is an add-on to the other.
Now, my question is, 'is there a design pattern to working with add-ons that you know of that can help us in this situation?'