私はSpringを使ってリアクティブプログラミングの世界に加わりたいと思っています。私が気づいたように、it gives me a choice between two different paradigms:注釈ベース(よく知られている通り、@Controller
、@RequestMapping
)と反応性のあるもの(which is intended to resolve an "Annotation Hell")です。Spring 5を使用した実際のコントローラの例:Web Reactive
私の問題は、典型的なリアクティブコントローラがどのように見えるか理解していないことです。 - 私はルータとこれらのメソッドを登録し、その後、コンクリートHandlerFunction<T>
インスタンスを返し、各特定ServerRequest
するための方法を定義
HandlerFunction<T>
(1):私は私のコントローラクラスで使用できる3つの概念的なインターフェイスがあります。右?
RouterFunction
(2)及びFilterFunction
(3) - HandlerFunction
Sを対応するすべてのRequestPredicate
sが置かれるべき具体的な場所はありますか?あるいは、私は各コントローラで別々に行うことができますか(私はアノテーションのアプローチと同じでした)?もしそうなら、どのようにこのコントローラからこのルータ部分を適用するためにグローバルハンドラ(ルーターがあれば?)に通知するのですか?
それは私が今では反応コントローラ「テンプレート」を参照してください方法は次のとおりです。それは、アノテーションとそれをマークせず、コントローラであることを言って最後に、どのように、
public class Controller {
// handlers
private HandlerFunction<ServerResponse> handleA() {
return request -> ok().body(fromObject("a"));
}
// router
public RouterFunction<?> getRouter() {
return route(GET("/a"), handleA()).and(
route(GET("/b"), handleB()));
}
// filter
public RouterFunction<?> getFilter() {
return route(GET("/c"), handleC()).filter((request, next) -> next.handle(request));
}
}
と?
私はSpringのリファレンスとこの問題に関するすべての記事を公式ブログで読んだことがあります。たくさんのサンプルがありますが、それらはすべてコンテキスト(IMHO)から取り出されており、完全な画像に組み立てることはできません。
実世界の例と、これらの機能間のやりとりを構成する方法の良いプラクティスを提供できれば、私は感謝します。私の知る限り、関係として
これは、特にしばらくので、おそらく提起として広すぎますAPIはおそらくほぼ安定していますが、Spring 5はまだ技術的にRCでさえありません(そしてSpring Security Reactiveは依然として大きな進歩を遂げています)。 – chrylis
_ "Springと反応するプログラミングの世界は、2つの異なるパラダイムの間で選択肢を与えます:アノテーションベースのものと反応性のもの" _アノテーションベースの機能的なもの "のようなものでなければなりません。どちらも反応的ですが、アノテーションベースのスタイルだけが古典的なコントローラを持っています。 – zeroflagL
ここで質問されていることは、特に機能モデルの場合、「コードを整理する方法」だと思います。私もこれで苦労しました。サンプルコードでは、すべてのリクエストマッピング(ルート)を1つの長いNLPスタイルチェーンで宣言する必要があります。これにより、同じクラスファイルに記述する必要のないルート間の結合が導入され、ハンドラ固有のクラスを作成しようとすると、そのルートが別々に格納されます。 アノテーションベースのアプローチは、これらの問題に対処するように見えますが、私はまだそのメソッドを動作させるようにしていません。それがうまくいっても、なぜ機能的なアプローチがありますか? – allenru