2010-05-31 1 views
8

Mi piacerebbe sapere come programmare al meglio tre diverse edizioni della mia applicazione C# ASP.NET 3.5 in VS2008 Professional (che include un progetto di distribuzione Web). Ho una versione (o versione) Light, Pro e Ultimate della mia applicazione. Al momento ho messo tutto in una soluzione con tre versioni di build in Configuration Manager e utilizzo le direttive del preprocessore in tutto il codice (ci sono circa 20 di tali costrutti in circa diecimila righe di codice, quindi è overmabile):Come programmare tre edizioni Light, Pro, Ultimate in un'unica soluzione

#if light 
//light code 
#endif 
#if pro 
//pro code 
#endif //etc... 

Ho letto in stackoverflow per ore e ho pensato di incontrare come ad es. Microsoft lo fa con le sue diverse edizioni di Windows, ma non ha trovato quello che mi aspettavo. Da qualche parte c'è una discussione pesante su se le direttive del preprocessore sono malvagie.

Quello che mi piace con quegli # Se direttive è:

  • il codice side-by-side delle differenze, così capirò il codice per i diverse edizioni dopo sei mesi
  • e il vantaggio speciale di NON fornire codice compilato di altre versioni al cliente.

OK, lunga spiegazione, domanda ripetuta: Qual è il modo migliore per andare?

risposta

7

sarei tentato di gestire le differenze durante il runtime con diverse licenze, e attivare/disattivare caratteristiche che utilizzano quella configurazione. Perché ?

  1. devi solo costruirne uno dispiegabile.
  2. è possibile testare l'unità molto più facilmente, piuttosto che creare 3 versioni e testarlo.
  3. gli utenti possono aggiornare e semplicemente ricevere una nuova licenza. Non dovranno aggiornare/reinstallare.

Devi valutare questo problema rispetto alla tua preoccupazione per la distribuzione di una soluzione che i tuoi clienti non hanno effettivamente pagato (e può semplicemente abilitare tramite una chiave di licenza appropriatamente sicura).

+0

Grazie mille per questa risposta. Ho letto molto sui codici di licenza et al .. Il mio attuale parere è quello di mettere meglio la maggior parte dello sforzo nello sviluppo di nuove funzionalità rispetto al tempo di investire in licenze/offuscamenti che complica tutto e viene facilmente aggirato dagli hacker. Poiché si tratta di un'applicazione ASP.NET, utilizzata nelle aziende: - Invio l'edizione corretta (Light, Pro ..) a ciascuna società - e addebito entro l'anno - vicino alla fine della licenza viene visualizzato un promemoria (Chiama anche il cliente) - se non viene effettuato alcun rinnovo, una timebomb ferma l'esecuzione - al rinnovo invio una nuova app con timebomb differito – Henry99

0

suggerirei di creare le classi e le funzioni di base normalmente, ma di consentire l'override per quei mathods che sarebbero specifici dell'edizione.

quindi si crea un assembly light/pro/ultimate edition che sovrascrive tali metodi.

quindi avete bisogno di una fabbrica, che instanziate i tipi di sovrascrittura corretti a seconda dell'edizione.

qui si potrebbe lavorare con l'interno-di accesso e rendere il codice assembly interna visibile all'edizione-montaggi

2

Il mio primo pensiero è dividere il software in vari moduli (progetti/assiemi) e quindi creare tre diversi progetti di installazione nella soluzione, uno per ogni versione. Nella configurazione, includi solo i moduli necessari.

Perderai il codice "side-by-side", ma IMHO questo crea solo metodi complicati, invece di codice manutenibile.Utilizzare i metodi di estensione, se si desidera fornire più funzionalità per un tipo o derivare classi.