So programmieren Sie drei Editionen Light, Pro, Ultimate in einer Lösung

8

Ich würde gerne wissen, wie ich am besten drei verschiedene Editionen meiner C # ASP.NET 3.5-Anwendung in VS2008 Professional (die ein Web-Bereitstellungsprojekt umfasst) programmieren kann. Ich habe eine Light, Pro und Ultimate Edition (oder Version) meiner Anwendung. Im Moment habe ich alles in eine Lösung mit drei Build-Versionen im Konfigurations-Manager und ich verwende Präprozessor-Direktiven über den gesamten Code (es gibt etwa 20 solcher Konstrukte in einigen zehntausend Zeilen Code, so dass es überschaubar ist):

%Vor%

Ich habe stackoverflow stundenlang gelesen und dachte, wie z. Microsoft macht das mit seinen verschiedenen Windows-Editionen, hat aber nicht das gefunden, was ich erwartet habe. Irgendwo gibt es eine heftige Diskussion darüber, ob Präprozessordirektiven böse sind.

Was ich an diesen # if-Anweisungen mag, ist:

  • der Side-by-Side-Code der Unterschiede, also werde ich den Code für die verstehen verschiedene Ausgaben nach sechs Monaten
  • und der besondere Vorteil, nicht zu geben kompilierten Code anderer Versionen aus an den Kunden.

OK, lange Erklärung, wiederholte Frage: Was ist der beste Weg zu gehen?

    
Henry99 31.05.2010, 10:36
quelle

3 Antworten

7

Ich wäre versucht, die Unterschiede während runtime mit verschiedenen Lizenzen zu verwalten und Features mithilfe dieser Konfiguration zu aktivieren / deaktivieren. Warum?

  1. Sie müssen nur einen bereitstellbaren erstellen.
  2. Sie können dies viel einfacher testen, anstatt drei Versionen zu erstellen und dies zu testen.
  3. Benutzer können upgraden und erhalten einfach eine neue Lizenz. Sie müssen nicht upgraden / neu installieren.

Sie müssen dies gegen Ihr Interesse an der Verteilung einer Lösung abwägen, für die Ihre Kunden nicht wirklich bezahlt haben (und können sie einfach über einen entsprechend sicheren Lizenzschlüssel aktivieren).

    
Brian Agnew 31.05.2010, 10:44
quelle
2

Mein erster Gedanke ist, Ihre Software in verschiedene Module (Projekte / Assemblies) aufzuteilen und dann drei verschiedene Setup-Projekte in Ihrer Lösung zu erstellen, eines für jede Version. In der Konfiguration enthalten Sie nur die Module, die Sie benötigen.

Sie werden den "Side-by-Side" -Code verlieren, aber IMHO erstellt dies nur komplizierte Methoden anstelle von wartbarem Code. Verwenden Sie Erweiterungsmethoden, wenn Sie mehr Funktionalität für einen Typ bereitstellen oder Klassen ableiten möchten.

    
Marcel 31.05.2010 10:46
quelle
0

Ich würde vorschlagen, die grundlegenden Klassen und Features als normal zu erstellen, aber Override für die Mathods zu erlauben, die editionsspezifisch sind.

Dann erstellen Sie eine Light / Pro / Ultimate Edition-Assembly, die diese Methoden überschreibt.

Dann brauchen Sie eine Factory, die die richtigen Überschreibungsarten abhängig von der Edition instanziiert.

Hier könnten Sie mit dem internen Accessor arbeiten und die Code-Assembly für die edition-assemblies sichtbar machen

    
Jack 31.05.2010 10:44
quelle