3

複数の顧客のサーバーにインストールされている「ホワイト ラベル」のアプリケーションがあります。どのインストールでも、相違点にはコンテンツ、スタイル シート、グラフィックが含まれますが、実際のコードやビジネス ロジックも含まれます。TFS サーバーでアプリケーションのすべてのフレーバーを自動的に構築したいと考えています。これを行うためのオプションは何ですか? たとえば、テーマを使用する必要がありますか? #if 条件付きコンパイル フラグはどうですか。

PS 質問は、ビルド サーバーのセットアップ方法ではありません。既に完了しています。

4

2 に答える 2

3

ビジネス ロジックについては、相違点を個別のライブラリに抽象化します。その後、IoC / DI パターンまたはプロバイダー パターンを使用して、実行時に正しいビジネス ロジックを解決できます。

コンテンツに関しては、テーマを検討します。基本的に、ビルド サーバーですべてのコードを一度ビルドし、コードをパッケージ化するときに、必要なアセンブリを選択して適切な構成を使用し、手元のクライアントに適切なテーマ フォルダーを選択することができます。

この場合、 # ディレクティブを使用するのは好きではありません。考えてみると、単体テストは条件ごとに実行する必要があります。条件を削除して違いを抽象化すると、単体テストはすべてのプラグ可能なアセンブリで一度に実行できます。

于 2009-09-24T19:20:27.880 に答える
0
  1. コンテンツ/画像 - 独自の HtmlHelper/UrlHelper 拡張機能を作成して Html\Url.Content() を実行し、適切なフォルダーから必要なファイルをコピーするだけでなく (単純に /Content + /ContentCustomer1, 2, ...)。
  2. 答えは一つではないと思います。簡単な答えの 1 つは、Order.Calculate() メソッドを部分クラスに移動することです。
    • OrderPartsForCustomer1.cs
    • OrderPartsForCustomer2.cs

どこにいるでしょう

public partial class Order
{
   public Money Calculate()
   {
   }
}

次に、必要な .cs クラスをインクルードするだけで、#if でコードを乱雑にしないでください。

すべてに共通のコードが必要で、特定の顧客だけにオーバーライドが必要な場合は、顧客固有のオーバーライドがない場合にコピー/使用する OrderPartsCommon.cs を使用できます。

于 2009-09-24T19:22:24.043 に答える