2011-02-06 1 views
0

当社のソフトウェアのサービスレイヤーのバージョンが異なるクライアントがあります。新しいサービスコンポーネントには、古いサービスコンポーネントにはない機能がいくつかあります。私たちはすべてのクライアントに提供したい新しいプレゼンテーション層に取り組んでいます。これは、古いサービスを持つクライアントでは機能しますが、クライアントが最新のサービスレイヤを実行している場合は、新しい機能にアクセスできます。サービスレイヤバージョン間の機能の差異の処理

可能性のある機能の違いについてifステートメントを使用してコードを浪費しないようにしたいと思います。特に、サービスレイヤに新しい機能を追加してサポートし続ける場合は特にそうです。どのようなデザインパターンがあれば、この違いを最もきれいに処理するために提案するでしょうか?

答えて

1

ほとんどの場合、ビューに部分的な違いがある場合は、部分的なビューとRenderPartialをカスタム拡張RenderPartialIfSupportedに置き換えると、コードがきれいに保たれるはずです。バージョンのフォルダにビューを配置し、必要なバージョンをメインビューコードで直接指定する必要はありません。

バージョンの違いがアクションに簡単にリンクされている場合は、アクションフィルタ属性を使用することをお勧めします。[RequireVersion(1.1)]を普遍的にサポートされていないアクションに追加することができます。

ActionLinkのカスタムバージョンと組み合わせて、関連するアクションとそのRequireVersion属性を見つけ、アクションがサポートされていない場合は何も表示しません。

+0

素晴らしい提案のためにアップしてください。私は、ビューとコントローラがバージョン番号や異なるリポジトリ機能について何も知らないソリューションを期待しています。リポジトリの依存関係を私たちのコントローラに注入するので、我々はそれを私たちのDIフレームワークに任せて、どんなバージョンが当っているのかを知ることができます。 – traffichazard

+0

同じアプローチは、バージョン番号の代わりに必要なインターフェイスまたはプロパティ名を使用しても動作します。複数の機能をチェックする必要がある場合は、フィルタ属性メソッドを使用する必要があります。ビューの場合、RenderActionとRenderPartialの間に何かを設定することができます - アクションメソッドを呼び出してフィルタ属性をチェックできるようにしますが、モデルはアクションによって生成されるのではなくパラメータとして渡されます。 –

関連する問題