質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.00%

ユーザーの現在購読中の商品を判定するロジックってバックエンド側に持つべきですよね?

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 551
退会済みユーザー

退会済みユーザー

クライアント側でログインユーザーの定期購読状況と全商品リストをAPIから取得して、それらをクライアント側で照らし合わせて、そのユーザーが現在定期購読中の商品を表示するのっておかしいですよね?

どの商品を定期購読中かはバックエンド側で処理して、それをクライアント側に渡すのが適切ではないのでしょうか?

僕は間違っていますでしょうか。。。
というか、僕が間違っているのでしょうか。。。

補足

あ、上記のAPIというのは他社のAPIではなく、自分のところで開発しているAPIのことです。

補足

SPAです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+7

そのユーザーが現在定期購読中の商品を表示するのっておかしいですよね?

これ自体はおかしい話じゃない。

各演算をサーバーでやらせるとサーバーの負荷になる。
なのでバックエンドはJSONのデータだけクライアントに渡して、
後は各クライアントが勝手に計算して画面表示させるという手法もある。

因みにJSは10万件程度のデータの演算でも大して速度は落ちないよ(前職で確認済)
計算量が階乗にならずにn+1件で済むように工夫すればクライアントの演算は強気で大丈夫。

どの商品を定期購読中かはバックエンド側で処理するのが適切ではないのでしょうか?

上記のように設計次第。
なんでバックエンドが適切かと思ってるのか、下記が理由かな?

バックエンドは不正なデータを詰め込まれないようにしっかり見張る必要がある。
なので全ての処理をクライアントに任せる事は出来ない。
もしフロントエンドに処理を移譲すると、大抵のケースでビジネスロジックが2重になり気持ち悪い。

その考えも一理ある。
クライアントに処理を移譲させると設計が複雑になる、
全てをサーバーサイドでやれば処理が一貫してて綺麗な設計になりやすい。

プロジェクト次第だと思うよ。
何を重視するかよく考えてみて。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/03 22:00

    なるほど…
    この質問が出るってことはSPAかな?
    バックエンドのロールがAPIならJSON鯖に徹するのが正解だから、バックエンド側の人の話も一理ある。
    でも、SQL文で簡単に実現出来るような内容なら何とかバックエンドで気の利いたエンドポイント吐いて欲しいって意見もあるよね。

    両者潔癖にならずに、話し合って決めてね。

    キャンセル

  • 2017/09/04 07:53

    ありがとうございます。とりあえずまずはバックエンドの人に理由を聞いてみます!クライアント側でその処理のためだけに全アイテムリストと購読ステータスのデータを抱える意味がわからないので。。

    キャンセル

  • 2017/09/04 22:58

    納得した上でフロント側で対応することになりました!

    キャンセル

+2

すでに回答が出ていると思いますので、ちょっと言葉を変えて同じことを言ってみます。

全体のシステムを俯瞰した上で、ユーザビリティと保守・試験工数を勘案して決めることになるかと思います。
クライアント側に処理をさせる場合には、どのようなクライアントを想定し、最低スペックのクライアントでも想定通りのユーザビリティが実現できるかが求められるでしょうし、サーバに持ってくる場合には、単位時間当たりどの程度のアクセスを想定し、最大のアクセスでも想定するユーザビリティが実現できるかが求められます。

また、クライアント側で処理をさせる場合には、その部分に関しては、動作させる環境ごとに試験をする必要があります。
どのようなシステムかにもよりますが、改修が想定される場合、どのような影響範囲があるのかも考慮が必要でしょう。
もちろん、miyabi-sunさんが最初に指摘されているように、簡単に分離できる処理ではない場合、明確に判断できないケースもあるかと思います。

さらに一連のやりとりを見ると、単に実装工数をどちらが負担するかということになっていると思いますので、miyabi-sunさんがおっしゃる通り、話し合いで決めれば済むことのような気もします。

ということで、回答の趣旨は、システムの設計次第ですし、話し合って決めてよというすでに回答済みの同じ内容となります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • Javaに関する質問
  • ユーザーの現在購読中の商品を判定するロジックってバックエンド側に持つべきですよね?