Какова хорошая структура решения, позволяющая легко настраивать продукт для каждого клиента?

Я ищу несколько советов о том, как обеспечить простую настройку и расширение основного продукта для каждого клиента. Я знаю, что это, вероятно, слишком большой вопрос. Однако нам действительно нужно получить некоторые идеи, как будто мы неправильно это настроили, это могло бы вызвать у нас проблемы на долгие годы. У меня нет большого опыта в настройке и расширении существующих продуктов.

У нас есть основной продукт, который мы обычно заказываем для каждого клиента. Недавно мы переписали продукт в C # 4 с помощью внешнего интерфейса MVC3. Мы провели рефакторинг, и теперь у нас есть 3 проекта, которые составляют решение:

Core domain project (namespace - projectname.domain.*) - consisting of domain models (for use by EF), domain service interfaces etc (repository interfaces) Domain infrastructure project (namespace -projectname.infrastructure.*) - that implements the domain service-EF Context, Repository implementation, File upload/download interface implementations etc. MVC3 (namespace - projectname.web.*)-project that consists of controllers, viewmodels, CSS, content,scripts etc. It also has IOC (Ninject) handling DI for the project.

Это решение прекрасно работает как самостоятельный продукт. Наша проблема заключается в расширении и настройке продукта для каждого клиента. Наши клиенты обычно хотят, чтобы базовая версия продукта была предоставлена им очень быстро (обычно в течение нескольких дней после подписания контракта) с использованием фирменного CSS и стиля. Однако тогда 70% клиентов хотят, чтобы настройки изменили способ его работы. Некоторые настройки невелики, такие как дополнительные свойства модели домена, модели представления и представления и т. Д. Другие более важны и требуют совершенно новых моделей домена и контроллеров и т. Д.

Некоторые настройки кажутся полезными для всех клиентов, поэтому периодически мы хотели бы изменить их как настройки и добавить их в ядро.

В настоящее время мы храним исходный код в TFS. Чтобы начать проект, мы обычно вручную копируем исходный код в новый командный проект. Измените пространство имен, чтобы отразить имя клиента, и начните настраивать основные части, а затем разверните в Azure. Это, очевидно, приводит к полностью дублированной кодовой базе, и я уверен, что это не правильный путь. Я думаю, что у нас, вероятно, должно быть что-то, что обеспечивает основные функции и расширяет / переопределяет, где это необходимо. Однако я действительно не уверен, как это сделать.

Поэтому я ищу любые советы по наилучшей конфигурации проекта, которые позволили бы:

Rapid deployment of the code – so easy to start off a new client to allow for branding/minor changes Prevent the need for copying and pasting of code Use of as much DI as possible to keep it loosely coupled Allow for bespoking of the code on a per client basis The ability to extend the core product in a single place and have all clients gain that functionality if we get the latest version of the core and re-deploy

Любая помощь / совет с благодарностью. С удовольствием добавлю больше информации, которая, как кто-либо думает, поможет.

Ответы на вопрос(2)

Ваш ответ на вопрос