9

これについて最善の方法がわかりません:

いくつかの「プロジェクト」オブジェクトの基本的な CRUD 機能を実装する、作成中の Web アプリケーションがあります。そのため、ユーザーは独自のプロジェクト セットを作成できます。

プロジェクトを追加/削除/一覧表示するための REST API を作成し、Reagent フロントエンド クライアントを作成しました。ご想像のとおり、クライアントのプロジェクトは試薬アトム (ratom) に保持されます。

ここが興味深いところです。

私が見たすべてのチュートリアルでは、ratom を更新する方法を示しており、GUI は自動的に更新されます。私はそれを持っています、それはうまくいきます。

私が現在行っていることは、クライアントの状態を更新する時点で、データベースのサーバーの状態を更新するために REST POST 呼び出しを行うことです。

しかし、これは気分が悪い。現在、クライアントとサーバーの 2 つの場所に状態を保存していますが、どちらも異なる可能性があります。

これを単純な古い Web ページとして実装した場合、サーバーはデータベースの最新の状態を含むページをクライアントに送り返します。しかし、状態はクライアントのラトムに既に存在しており、どのように同期すればよいかわかりません。

最初の POST が成功した後、サーバーに別の呼び出し (GET 要求) を行う必要がありますか? これにより、ratom の内容が置き換えられる可能性があります。それから私は2つの要求をしています..無駄に思えます。

または、コードセンテなどを使用してクライアントの状態を非同期に管理することをお勧めします。これは、他のユーザーからの変更がクライアント側で即座に更新されることを意味するため、より優れています。しかし、これらのいずれかに反応することを示すチュートリアルが表示されないため、間違った方向に進んでいる可能性があります。

したがって、問題は単純に、組み合わせて REST とどのように反応するべきかということです。

ありがとう

4

3 に答える 3

3

あなたの問題は、clojureや試薬よりもクライアントとサーバーの同期に関するものであるという@myguidingstarに同意します。たとえば、GWTで同様の問題が発生する可能性があります(そこにありました...)

最初の POST が成功した後、サーバーに別の呼び出し (GET 要求) を行う必要がありますか? これにより、ratom の内容が置き換えられる可能性があります。それから私は2つの要求をしています..無駄に思えます。

POST 要求がサーバーからの応答をトリガーすることもできることを見逃しているようです。

The big question here is why do you need the DB state on the client? Do you have requirements which force you to minimize the amount of GET requests to fetch data from the server? Or do you have business logic implemented on the client (ClojureScript/reagent) side that just doesn't need server interaction? You need to consider also the other side of the same issue: Is it okay if your client state doesn't get updated in a while or could you run into consistency issues because "something else" is modifying the data on the server behind your client's back?

Finally, you say that you

.. don't know how I should synchronise it.

What exactly are your issues? Why not just update the app-state (swap! app-state update-in ...) after you've fetched the data from the server, as described in the reagent-tutorial?

于 2014-11-27T09:11:14.777 に答える
2

これは、ほとんどの Web アプリが苦労しているクライアントとサーバーの同期に関する大きな問題です。

まさに問題のためのTonskyによるライブラリがあります:

https://github.com/tonsky/datascript

彼のブログ投稿と例を読んでdatascript-chat、設計を理解してください。これには多くのことを学ぶ必要がありますが、「気分が悪い」ということのない唯一の方法だと思います。

于 2014-11-27T01:50:11.847 に答える