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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

296閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/09/03 10:04

編集2017/09/03 13:42

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

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

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

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

###補足
SPAです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

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

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

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

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

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

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

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

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

投稿2017/09/03 12:24

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/09/03 12:42

ご回答ありがとうございます。 クライアント側に処理を委譲する理由って、サーバー負荷を減らす以外には何かありますでしょうか? 自分的にはサーバー側は誰がログイン中のユーザーか知ってるのだから、そのユーザーの購読中のアイテムだけを取り出してクライアントに返してくれよって思ってしまうのですが。。
退会済みユーザー

退会済みユーザー

2017/09/03 12:46 編集

しかも、自分の例の場合、その演算対象はわすが数件のモックデータだし、本番でも1万件以下のリストだし。。。バックエンドの人にそっちで処理してくれよって言いたいのですが、自分が間違ってるかもと思い質問投稿しました汗
miyabi-sun

2017/09/03 13:00

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

退会済みユーザー

2017/09/03 22:53

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

退会済みユーザー

2017/09/04 13:58

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

0

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

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

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

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

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

投稿2017/09/04 08:16

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問