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!)

1 Comment

  1. Unknown User (muurman)

    To add to the TODO list. You would also have a LOT of namespace changes to reflect the new location on disc (wink)