2

私は現在、非常にステートフルなコンポーネントベースのAPIを開発しています。トップレベルのコンポーネントは、それぞれ約12のインターフェイスを実装します。

したがって、ストックのトップレベルコンポーネントは、複数のミックスイン実装を含み、複数のミックスインインターフェイスを実装する抽象実装のスタックの上に配置されます。

これまでのところ、とても良いです(私は願っています)。

問題は、基本機能の実装が非常に複雑であるため(5層の基本クラスに1,000行)、コンポーネントライターがインターフェイス自体を実装するのではなく、基本クラス(すべてのボイラーが存在する場所)を拡張することを望んでいることです。プレートコードはすでに書かれています)。

したがって、APIが、コンポーネントライターに拡張してほしい抽象実装への参照ではなくインターフェイスを受け入れる場合、実装者が他のコード領域で必要とされる検証を実行しないリスクがあります。

したがって、私の質問は、APIメソッドが実装するインターフェイスへの参照ではなく、抽象的な実装参照を使用してAPIメソッドをパラメーター化することが有効な場合があるということです。

この手法を使用する適切に設計されたAPIの例がありますか、それとも私は自分自身を悪い習慣に話そうとしていますか?

4

1 に答える 1

1

これまでのところ、とても良いです(私は願っています)。

完全ではありません。ダースのインターフェースを実装することは良い兆候ではありません。しかし、コードがわからないので、再構築の方法がわかりません。

したがって、私の質問は、APIメソッドが実装するインターフェイスへの参照ではなく、抽象的な実装参照を使用してAPIメソッドをパラメーター化することが有効な場合があるということです。

まれに、はい。例(Java):

  • JSF:javax.faces.context.FacesContext抽象的ですが、パラメーターとして渡されます。
  • EL:javax.el.ELContext-同上。
  • AWT:java.awt.Image-同上。

しかしとにかく、私はノーと言うでしょう。開発者を実装に制約するのは良くありません。上記の検証を実行してはならないモックを提供したい場合や、動的プロキシを使用したい場合があります。

最後に、インターフェイスを再構築できないことが絶対に確実な場合は、抽象クラスパラメータをできるだけ少なくすることができます。

于 2010-05-09T17:26:55.183 に答える