views:

74

answers:

2

We have a base product that has bespoke development for each client that extends and overwrites the functionality of the base.

We also have a custom framework that the base product and sits on top of.

We use inherited forms to override the base functionality and to date all the forms and classes have been lumped in the same projects i.e. UI, Data, Business...

We need to clean up the code base now to allow multiple client project to run off the base product at once and I was looking for advice around the following areas:

  1. Ways of organising the solution to fit with the above requirements, the number of projects in the solution is quite large and we want to reduce this to increase developer productivity, we are think of making the Framework DLL references instead of project references
  2. Are there any build and deployment tricks we are missing, we currently have a half automated build and release process
  3. What is the best way to manage versioning
  4. Any best practices for product development
+1  A: 

I personally strongly believe that highly modular architecture will fit here nicely: core application should provide basic/common services, and all customer-specific functionality should be implemented as plug-ins (think MEF). Hence, several thoughts:

  1. I'd go for one solution for core application plus additional solution for each and every customer.
  2. One-step build is a must. Just invest some time in writing a handful of MSBuild scripts: this will pay off tenfold.
  3. See APR's Version Numbering for inspiration.
  4. Too broad a question.
Anton Gogolev
+1  A: 

I can give you an advice on your first question and maybe a little of the forth : If i were you I would go with a framework DLL solution that could easily be managed and futher developed by a team and different solutions for each subsequest project. However, the framework solution would have to be propely developed, with extra care to one design principle: Open/closed principle [1] so future development of the framework does not break the existing implementations.

[1] http://en.wikipedia.org/wiki/Open/closed_principle

AlexDrenea