After discussion with the team we agreed that Delta Shell solution structure will be changed to:
Advantages of the new structure are:
- Much more clear separation of concepts
- Common Domain Libraries - mainly libraries containing interfaces plus various reusable components
- Delta Shell - includes environment, graphical user interface and common plugins such as file format, netcdf, project explorer
- Application Plugins - high-level application plugins such as Habitat, River Flow Model 1D etc.
Why it is better?
- Current structure does not make clear separation on common and application plugins
- Common libraries are not located in one place
- Stimulates stabilization of the common libraries - all what becomes domain-related tends to move up to the Common, otherwise stays on the application plugin level
- Default Delta Shell plugins are located next to Delta Shell.
The following was also concluded:
- Dependencies between plugins are forbidden - if you need it - add it to some common library on a plugin level or later on a higher Common level
- Common goal is to stabilize Common libraries, boyscout rule applies 100% here: leave the code a little cleaner than you found it. ... simpler, more tested, more correct.
- In a bit longer term Common probably should include only facade / interface classes and implementation can be hidden and accessible only using Container Libraries (IoC, DI).
Actions to be taken during the first step:
- A lot of subversion move actions
- A lot of project file text editing actions
- Making sure everything still compiles and runs
- Removing unnecessary dependencies (while playing with projects I've detected ~10 wrong dependencies!)