問題
[〜#〜] wcf [〜#〜]Flex アプリケーションによって使用されるサービスで構成されるC#プロジェクト。
お客様が機能の変更を要求する場合があります。その場合、お客様のために機能するようにコードを変更する必要があります。メソッド内の1行のコードである場合もあれば、メソッドが顧客xに対してまったく異なる方法で動作する場合もあります。
私のアイデア
カスタマイズしている顧客にはブランチを使用します。リリースの準備ができたら、顧客のブランチにマージし、カスタマイズの目的を壊したり忘れたりしないようにします。 [〜#〜] svn [〜#〜] を使用します。コードベースが非常に大きいので、私はこれの大ファンではありません。
制御の反転 、 依存性注入 、および [〜#〜] mef [〜#〜] を使用します。変更が必要なクラスのインターフェースを作成します。新しいクラスライブラリプロジェクト(つまり、customerabc)を作成し、作成したばかりのクラスを実装する新しいクラスを追加し、顧客の変更に応じてメソッドをオーバーライドします。 MEFエクスポートを追加します。次に、これをカスタマイズフォルダーに配置し、そこにMEFを指定します。フォルダ内にDLLファイルが見つかった場合、実行中のアセンブリからのエクスポートの代わりにそれを使用します。
オプション2が好きです。
長所:
短所:
私は何をすべきか?
オプション#1は合理的ですが、それは大きな面倒を表しています。
オプション#2は、オーバーエンジニアリングの辞書定義である必要があります。
オプション#:これを考慮してください:
複数のばらばらの要件セット(クライアントごとに1つ)の代わりに、すべての顧客をカバーする単一の要件セットがあり、アプリケーションの特定のインストールが指定された単一の顧客に対応する必要があるという追加の要件があるとします。構成で。
確かに、これは特定の顧客の懸念がコードベース全体に散在し、すべての顧客が非アクティブな機能、場合によっては未使用のデータベーステーブルや列を受け取ることを意味しますが、知る必要がありますか?そして、彼らが知る必要がある場合、彼らは気にしますか?彼らは気にしますか?彼らは彼ら自身のビジネスを気にかけて、あなたにとってより生産的な方法であなたにあなたの仕事をさせてくれませんか?
私の車のエンジンにはいくつかのフックがあります。私はこれらのフックを使いませんが、工場でのエンジンの取り付けがはるかに簡単で、そこでの労働者にとってはるかに安全であるため、これらのフックの存在は実際に私が支払った最終価格を下げました私の車。だから、私はこれらのそうでなければ役に立たないフックで完全に元気です。