0

どちらが好ましいか、より良いか悪いかについてフィードバックを収集したいと思います...

Function<I, O> {
  List<O> take( I );
}

また

Receiver<T> {
  void take( T );
}

Processor<I, O> {
   void processor( I, Receiver<O>> );
}

簡単な答えは機能であることはわかっていますが、プロセッサにはいくつかの利点があります。

  • ものとしてフィルタリングする Receiver を渡す機能が追加されました。
4

1 に答える 1

1

明確に好ましい代替案はありません。ユースケースによって異なります。

あなたが指摘したように、前者を使用する主な理由は単純さです。インターフェイスを使用するために、クライアントは何も実装する必要はありません。サービス API の場合、返されるO の数がアプリオリにわからない可能性があるため、Function が常に最適な選択であるとは限りません。

後者を採用する主な理由はスケーラビリティです。たとえば、何百万もの O オブジェクトを生成している場合、何かを返す前にそれらすべてをメモリに詰め込もうとするのは自殺行為です。ただし、Processor のようなコールバック パターンをサービス API に押し込むのは難しいです。

サービス API に最適なのはハイブリッドです。

Function<I, O> {
  List<O> take( I, OToken );
}

返された最後のページの終わりを表す OToken から開始して、O の「ページ」を返します。ちなみに、OTokenのものを抽象化するクライアント側で、その上に別のレイヤーを置くことができIterator<O>ますList<O>.

于 2012-05-30T03:15:48.790 に答える