Sto cercando alcuni consigli su come consentire una facile personalizzazione e l'estensione di un prodotto principale per cliente. So che probabilmente è una domanda troppo grande. Tuttavia, abbiamo davvero bisogno di avere qualche idea, come se avessimo l'impostazione sbagliata che potrebbe causarci problemi per anni. Non ho molta esperienza nella personalizzazione e nell'estensione dei prodotti esistenti.Qual è una buona soluzione per consentire una facile personalizzazione di un prodotto per cliente?
Abbiamo un prodotto principale che di solito pubblichiamo su base cliente. Abbiamo recentemente riscritto il prodotto in C# 4 con un frontend MVC3. Noi abbiamo riscritta e ora hanno 3 progetti che compongono la soluzione: (. Namespace - projectname.domain *) -
- progetto dominio anime che consistono in modelli di dominio (per l'uso da EF), interfacce di servizio del dominio, ecc (interfacce repository) progetto di infrastruttura
- Domain (-projectname.infrastructure namespace *) -. che implementa il contesto dominio del servizio-EF, implementazione Repository, caricamento di file/interfaccia per il download implementazioni ecc
- MVC3 (namespace -. projectname.web *) -project che consiste in controller, viewmodels, CSS, contenuto, script ecc. Ha anche IOC (Ninject) che gestisce la DI per il progetto.
Questa soluzione funziona bene come prodotto standalone. Il nostro problema è l'estensione e la personalizzazione del prodotto per cliente. I nostri clienti di solito vogliono che la versione del prodotto principale sia data loro molto rapidamente (di solito entro un paio di giorni dalla firma di un contratto) con CSS e styling personalizzati. Tuttavia, il 70% dei client desidera che le personalizzazioni cambino il modo in cui funziona. Alcune personalizzazioni sono piccole come proprietà aggiuntive su modello di dominio, viewmodel e vista ecc. Altre sono più significative e richiedono modelli di dominio e controller completamente nuovi ecc.
Alcune personalizzazioni sembrano essere utili a tutti i client, quindi periodicamente vorremmo per cambiarle da personalizzazioni e aggiungerle al nucleo.
Attualmente stiamo memorizzando il codice sorgente in TFS. Per avviare un progetto di solito copiamo manualmente la fonte in un nuovo progetto di squadra. Cambiare lo spazio dei nomi per riflettere il nome del client e iniziare a personalizzare le parti di base e quindi distribuirlo ad Azure. Questo ovviamente si traduce in una base di codice completamente duplicata e sono sicuro che non è il modo giusto per farlo. Penso che probabilmente dovremmo avere qualcosa che fornisce le funzionalità principali e che estende/sovrascrive dove richiesto. Tuttavia non sono davvero sicuro su come procedere.
quindi non vedo per qualsiasi consiglio sulla migliore configurazione di progetto che consentirebbe:
- Implementazione rapida del codice - così facile da iniziare un nuovo client per consentire di branding/piccole modifiche
- prevenire la necessità di copiare e incollare del codice
- l'utilizzo di ben dI possibile per mantenerlo debolmente accoppiati
- Consenti per bespoking del codice su un per la base di cliente
- La possibilità di estendere il prodotto di punta in un unico luogo e hanno tutti i clienti a ottenere che la funzionalità se otteniamo la ultima versione del core e ri-distribuire
Qualsiasi aiuto/consiglio è molto apprezzato. Felice di aggiungere ulteriori informazioni che chiunque pensi possa aiutare.
Dopo aver provato la ramificazione per client per 5 progetti, abbiamo rinunciato. Ora lo abbiamo scritto come un singolo prodotto che utilizza MEF e DI per combinarlo in base alla configurazione del client. Significa anche che possiamo implementarlo su un singolo host web e che si adatta meglio. – GraemeMiller
Vedi questo su multi-tenancy che copre praticamente la situazione http://codeofrob.com/entries/multi-tenancy-in-asp.net-mvc---ddd8-video.html – GraemeMiller