Simplify packaging to speed up software developments


Once the team wrote the source code of an application, why should split that app into many modules (assembly, jar, dll, exe, binaries in general) ?

Sometime there are no choices: i.e.
  • when different part of the applications are developed with different technologies that require different compilers or even different operative systems.

Some other time when a group of classes are used by 2 or more applications, instead of duplicating the classes they must go in a module and be reused. Here is when the REP come in use:

REP The Release Reuse Equivalency Principle The granule of reuse is the granule of release.



In all the other cases, splitting classes in modules up-front without an concrete actual needs just
  • increase the complexity: when classes are grouped in different projects they are harder to find and it become easier to duplicate existing functionality by mistake, plus the dependency graph grow more and more complex

  • increase the build time: merging 70 small projects in 5 big projects with Visual Studio reduced build times by 40%

  • does not bring any advantage: when classes that are changed and released together and are coupled together, splitting them in many modules will not reduce coupling and will decrease cohesion (fyi: namespaces should be used to logically group classes instead of projects).
Here is where CCP and CRP come:
CCP The Common Closure Principle Classes that change together are packaged together.
CRP The Common Reuse Principle Classes that are used together are packaged together.





Print | posted @ Friday, August 27, 2010 3:15 PM

Comments have been closed on this topic.