Application needs to be splitted into 2 sepparate and independent modules.
For simplification purposes, we will call the modules: Sales and Workflow.
Sales could work without workflows, and workflows without sales, but they could work together too.
1. A Class needs to be split into 2 assemblies but the Main application needs to load it with the same Class and Properties Names so it wont break current code. Currently there is a Class called "Configuration" that class has properties and there are reports and code referring to them that should continue working without modification
Considerations: There are some properties that are from custom types, like [url removed, login to view] . DefaultPriceLevel is a Class inside the sales module. Some solutions could fall into circular reference between assemblies.
2. The modules should be able to work together and communicate, but also work independently. For example: Sales call the Method UpdateStatus() of the module Workflow, there are thre scenarios:
-module workflow is activated, the code in UpdateStatus() will execute
-module workflow is NOT activated, no code will be executed (dummy interface implementation?)
-an external workflow module will be used, some kind of proxy to execute an external code (dynamic assembly load?)
3. There are classes that are shared between modules, for example "Customer". Customer has fields specific to each module, for instance, [url removed, login to view] (Sales), [url removed, login to view] (Workflow). There should be a base class with basic fields like Name, Address, etc. And classes in the module assemblies that extends the base class with the properties and methods specific to that module. In the end, the main application should resolve to the same Class and property names.
The deliverable is a Solution with the different projects illustrating how to solve the 3 problems