web-dev-qa-db-ja.com

顧客固有の変更の処理

問題

[〜#〜] wcf [〜#〜]Flex アプリケーションによって使用されるサービスで構成されるC#プロジェクト。

お客様が機能の変更を要求する場合があります。その場合、お客様のために機能するようにコードを変更する必要があります。メソッド内の1行のコードである場合もあれば、メソッドが顧客xに対してまったく異なる方法で動作する場合もあります。

私のアイデア

  1. カスタマイズしている顧客にはブランチを使用します。リリースの準備ができたら、顧客のブランチにマージし、カスタマイズの目的を壊したり忘れたりしないようにします。 [〜#〜] svn [〜#〜] を使用します。コードベースが非常に大きいので、私はこれの大ファンではありません。

  2. 制御の反転依存性注入 、および [〜#〜] mef [〜#〜] を使用します。変更が必要なクラスのインターフェースを作成します。新しいクラスライブラリプロジェクト(つまり、customerabc)を作成し、作成したばかりのクラスを実装する新しいクラスを追加し、顧客の変更に応じてメソッドをオーバーライドします。 MEFエクスポートを追加します。次に、これをカスタマイズフォルダーに配置し、そこにMEFを指定します。フォルダ内にDLLファイルが見つかった場合、実行中のアセンブリからのエクスポートの代わりにそれを使用します。

オプション2が好きです。

長所:

  1. 簡単-通常の展開インストールしてから、DLLファイルにドロップします。
  2. 明らか-顧客がブランチからコードを実行しているかどうかは、あまり明確ではないかもしれません。このオプションを使用すると、カスタマイズフォルダを確認できます。
  3. クリーン-カスタマイズが必要なファイルのみが存在します。トランクの完全なコピーは必要ありません。 d。それはより良く促進します [〜#〜] solid [〜#〜] 将来の開発とリファクタリングのために(このプロジェクトにはほとんどありません [〜#〜] oop [〜#〜] ) 。

短所:

  1. 顧客プロジェクトへのトランクの変更を管理することはより困難になります。
  2. データベースの変更やFlex側の変更に関する私の問題を必ずしも解決するとは限りません。
  3. 変更が500行メソッドの1行のコードである場合、そのメソッドをオーバーライドし、コードをコピーしてカスタマーオーバーライドに貼り付け、1行の変更を行う以外のオプションは表示されません。これは私にとって [〜#〜] dry [〜#〜] の良い使い方ではありませんが、これを回避する良い方法はありますか?
  4. OK、OOPおよびSOLIDの原則をより適切に使用することで、これの一部を軽減できますが、単純な顧客の要求を実装するには、クラス全体に対するいくつかの主要なリファクタリング...潜在的に多くのクラス。

私は何をすべきか?

3
Paul Wade

オプション#1は合理的ですが、それは大きな面倒を表しています。

オプション#2は、オーバーエンジニアリングの辞書定義である必要があります。

オプション#:これを考慮してください:

複数のばらばらの要件セット(クライアントごとに1つ)の代わりに、すべての顧客をカバーする単一の要件セットがあり、アプリケーションの特定のインストールが指定された単一の顧客に対応する必要があるという追加の要件があるとします。構成で。

確かに、これは特定の顧客の懸念がコードベース全体に散在し、すべての顧客が非アクティブな機能、場合によっては未使用のデータベーステーブルや列を受け取ることを意味しますが、知る必要がありますか?そして、彼らが知る必要がある場合、彼らは気にしますか?彼らは気にしますか?彼らは彼ら自身のビジネスを気にかけて、あなたにとってより生産的な方法であなたにあなたの仕事をさせてくれませんか?

私の車のエンジンにはいくつかのフックがあります。私はこれらのフックを使いませんが、工場でのエンジンの取り付けがはるかに簡単で、そこでの労働者にとってはるかに安全であるため、これらのフックの存在は実際に私が支払った最終価格を下げました私の車。だから、私はこれらのそうでなければ役に立たないフックで完全に元気です。

4
Mike Nakis