6

問題:
ファイルを受け取り、翻訳し、実行するフレームワークを構築しています。フレームワークはあらゆる種類のファイルを処理できる必要があります。この目的のために、ファイルを変換および実行するためのクラスとメソッドを含む DLL をアップロードする方法を提供しました。私が探しているのは、プラグイン インターフェイスを定義する最良の方法です

解決策 A:
公開されているインターフェイスのセットを定義します。プラグインはこれらのインターフェースを実装する必要があります。

解決策 B:
公開されているいくつかの抽象クラスを定義します。プラグインは、これらのクラスの抽象メソッドを継承およびオーバーライドする必要があります。

ソリューション C: rcravens
コード内でインターフェイスを渡し、プラグインの拡張性を可能にするために公開されている抽象クラスを作成します。選択
このソリューションは、基本的な実装 (この場合は便利) を可能にするという理由だけで、インターフェースよりも先に選択されました。コード内でのモックを可能にするという理由だけで、抽象クラスの前に選択されました。コンポジション フレームワークは優れていますが、制限された拡張性のみが必要なこのアプリケーションのような軽量のものには少し過剰です。

ソリューション D: JayChris Shain
構成フレームワーク ( Managed Extensibility Framework(MEF)など) を実装し、それを中心に構築する

新しい解決策があれば、このリストに追加します。答えは、解決策を最も正当化できる人物に与えられます(利点と制限がある可能性があります)。

事前に感謝します、
Tech Test Dude

4

3 に答える 3

4

あなたが書いていることは、Managed Extensibility Framework がサポートしているもののように疑わしく聞こえます: http://mef.codeplex.com/。たぶんそれを使用して、車輪の再発明を避けますか?

于 2011-08-16T00:57:07.347 に答える
3

最低レベルでは、インターフェースが必要だと思います。これにより、ほとんどのモッキング フレームワークで偽物を簡単に提供できます。コードの周りでは、インターフェイスを渡す必要があります。抽象基本クラスにリファクタリングできる基本実装が必要な場合は、それを実行してください。抽象基本クラスとインターフェイスは、相互に排他的な概念ではありません。両方を持っていることが理にかなっている場合もあります。

于 2011-08-16T00:43:21.603 に答える
3

インターフェイスまたは抽象クラスの間により良い解決策があるとは思いません。それは本当に必要なものに依存します。しかし、個人的には、抽象クラスの方が柔軟性が高いという単純な事実から、おそらく抽象クラスを使用するでしょう。

abstractプラグインの特定の動作を定義するために不可欠ないくつかのメソッドを提供できますが、メソッドはオプションでデフォルトの動作をオーバーライドする方法virtualを提供します。

抽象クラスは、プラグインの作成者に役立ついくつかのユーティリティ メソッドも提供できます。

基本的に、抽象クラスはインターフェイスが提供するすべてのものを提供できます。したがって、おそらく将来の拡張には適しています。

于 2011-08-16T00:44:48.297 に答える