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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

4回答

1524閲覧

リクエストパラメータのカプセル化は必要でしょうか?

tomoyuki123

総合スコア273

Java

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

1グッド

1クリップ

投稿2020/09/17 01:56

JavaのBeansというものを知りました。

リクエストパラメータをprivateとして持ちセッターゲッターを用意する理解です。
ただこのリクエストパラメータをなぜカプセル化する必要があるのかわかりません。

カプセル化は意図せぬデータの書き換えを防ぐことができると思います。
しかしリクエストパラメータはただそれを使うだけでカプセル化するメリットがわかりません。
メンバーの頭がおかしくなってリクエストパラメータをどこかで書き換えるケースを防止することくらいしか思い浮かびません。

普段Laravelで開発していて、このようにRequestクラスから取得しているのでメリットがわかりません。

$id = $request->route('id'); $text = $request->input('text');

カプセル化する必要があるなら、別途DTO層を用意するなどする検討したいです。
よろしくお願いいたします。

A-pZ👍を押しています

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

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

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

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

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

m.ts10806

2020/09/17 02:21

「Laravelがリクエストパラメータをカプセル化していない」という出典を明示してください。
tomoyuki123

2020/09/17 02:26

明示しないと回答できないですか?
tomoyuki123

2020/09/17 02:27

リクエストパラメータのカプセル化は必要でしょうか?という質問に
m.ts10806

2020/09/17 02:36

既にカプセル化されているならわざわざする必要はないですし、されてないなら検討が必要で、本件にようやく入れます。 質問内容からどこまで調べた上での質問かが分かりませんでした。(既にカプセル化されているという指摘をしているわけではなく、どこまで調べたか分からないための確認)
tomoyuki123

2020/09/17 02:38

全然違います。カプセル化する必要があるからしている訳でその理由が知りたいのです。答えられないなら結構です。
tomoyuki123

2020/09/17 02:39

この質問は抽象的なことを聞いています。
tomoyuki123

2020/09/17 02:40

私が何を調べたかどうかで回答が変わるのですか?
tomoyuki123

2020/09/17 02:40

回答が変わるのであればせっかくなので教えてください。何も調べていない場合はどうなって、調べた場合がどうなるのかを。
m.ts10806

2020/09/17 02:45

Laravelのほうもそうですが、「Java Beans」自体のメリットを知りたいのかどうかは興味はありますね。 どこまで調べたかどうかで回答は変わりますよ。なにも知らない人に教えるのと、ある程度知っている人に教えるのとでは内容もレベルも確度も違います。 調べてないならまず調べるところからですし(なにも調べず試さずは丸投げです)、調べているのなら何をどう調べたのか書かないと誰にも伝わらないし、「もうそれは見た」「それは知っている」と後だしされたら時間も心も浪費しますよね。 お互いの無駄をなくすためにも、質問者が持っている情報はなるべく全て提示してくださいね。 書いてないことは誰にも分かりませんし、抽象的な質問には抽象的な答えしか返ってこないので、それこそあなたが消化不良になるのでは?
tomoyuki123

2020/09/17 02:48

意味がわかりませんでした。ありがとうございます。
m.ts10806

2020/09/17 02:55

どこが分かりませんか? 日常的にもある話をしています。
maisumakun

2020/09/17 03:04 編集

> カプセル化する必要があるからしている訳で そうとも限りません。「形を合わせる」ことのほうが主目的で、結果的にカプセル化のように見える…だけということも考えられます(特に、publicで素通しするだけのゲッター・セッターがある状態でしたら、カプセル化としての「変更からの保護」も成立しません)。
tomoyuki123

2020/09/17 02:57

抽象的なことを聞いてるって書いてるのに「Java Beans」自体のメリットを知りたいのかどうかは興味はありますねって人の文章まともに読んでないなと印象です。これ以上は時間の無駄かと思います。
m.ts10806

2020/09/17 03:01

(2回目)なにも知らない人に教えるのと、ある程度知っている人に教えるのとでは内容もレベルも確度も違います。 なにも知らないなら知らないで最近知ったというBeansのメリットのところまで遡る必要がありますからね。最近知ったっていうけどどこまで把握してるんだろうか?どんな使い方をしてきたんだろうか? それによってはカプセル化云々以前の問題(大きく勘違いしている可能性もあるから) そろそろ伝わって、質問に追記されるはず…。 ご自身が勘違いしたままによりこの先の人生無駄にしたいというのであればお好きにどうぞ。正しい理解をしたいかどうか、これでは分かりませんので
quickquip

2020/09/17 03:25 編集

> 私が何を調べたかどうかで回答が変わるのですか? 変わります。 想定回答は「必要あります。○○だからです」もしくは「必要ありません。それでもなお使っているのは○○という理由からです」なのですが、○○に何を書くか? の点が、"質問者さんが自分の質問の内容をどう捉えているか?"に依って大きく変わります。 (そして回答者の技量は、○○に何を書くか? で決まると言ってもいいでしょう) 回答が変わらないと思っているなら、回答者の立場からは「必要ありますorありません。あとは自分で調べてください」という回答でも私は満足しますということかな? と感じます。 ---- 編集で追記。想定回答はもっとあります。「必要あるかないか、という問い自体に意味がありません」とか。
honto

2020/09/17 03:14

わざわざgetter setterでプライベートにする必要があるの?Laravelは直接取れるよね?なんで?という疑問を質問してるだけと、文脈で読み取れるのでその解答(答えじゃなくても考え)を答えればいい気がします。 どこまで調べたかは関係ないと思う。
honto

2020/09/17 03:26

m.ts10806 さんは一体何と闘っているんだろう?そっちの方が興味ある。
quickquip

2020/09/17 04:25 編集

AというものにBを使っていてそれはCという性質が理由だと思うんだけど本当にCなんて要る? という質問ですからね。「性質Cが要らない(と思った)なら、なんでBを使っているの?」=「Bを使うメリットはなに?」という疑問には**当然**至るはずなので、そこには興味ないの? と気にするのはまぁ自然だと思いますが。 真面目に答えようと思ったらそこは避けられないポイントですしね。
quickquip

2020/09/17 23:29

質問の情報が増えないようで、もうベストアンサーを選ぶのがよいと思います。
guest

回答4

0

ベストアンサー

Javaではリクエストパラメータを必ずBeansに入れないといけない、という決まりはありません。

String id = request.getParameter("id"); String name = request.getParameter("name");

最初の受け取りは大体こんな感じで書いて大丈夫です。

ただ、リクエストパラメータで受け取ったを専用のクラスに入れて管理していれば、処理内での値の受け渡しが楽になりますし、処理そのものもわかりやすくなります。

おそらく、この辺りはLaravelと同じところもあるのではないでしょうか。
私はJava専門なので逆にLaravelの手法を知らないため、検索して出てきたサイトの記述をちらっと眺めた程度ですが…。

投稿2020/09/17 03:45

編集2020/09/17 03:48
deaf_tadashi

総合スコア200

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

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

0

JavaのBeansというものを知りました。

ゲッター・セッターは、Beansのルールに合わせるために用意しているものではありませんか?ゲッターもセッターもpublicで何の加工もチェックもしない、というのであれば、カプセル化としての恩恵はゼロです。

投稿2020/09/17 03:20

maisumakun

総合スコア146018

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

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

0

リクエストパラメータをprivateとして持ちセッターゲッターを用意する理解です。

JavaBeansと関係ありませんし、その理解は違います。

たとえば、BMIを算出するJavabeansを作成する場合、
身長や体重をJavaBeansに格納(設定)するかもしれませんが、それはリクエストパラメータを隠蔽するのが
目的でなく、単純にBMIを算出する機能に対するパラメータを設定してるだけです。

ただこのリクエストパラメータをなぜカプセル化する必要があるのかわかりません。

その必要はありません。

投稿2020/09/17 05:09

momon-ga

総合スコア4826

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

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

0

言語の歴史もあるかなと思います。

メンバ変数はprivateにしてgetter/setterを準備しましょう、という習慣がJavaにはあります。

C#はJavaを意識して作られた(と私は思っています)getter setterをプロパティという概念を導入して メンバ変数にアクセスするかのうように振舞わせる言語設計にしました。

このプロパティという考えは未だJavaでは取り込まれていませんが、SwiftやKotlinなど多くの言語で採用されています。

PHPは元々オブジェクト思考ではなく、手続き型言語だった経緯があります。
またarrayというものが大きな力を持っています。
通常の配列もarrayだし、連想配列もarrayです。
CakePHPのORMもarrayのオンパレードです。

PHPもたしか5? くらいからclassを扱えるようになって private やメソッドを持つことになりました。
しかし、連想配列としてのarrayの力が強くわざわざデータオブジェクト(メソッドを持たない値を扱うだけのオブジェクト)を扱うのにclassを定義するよりは $data['id'] で取った方がPHP的なんです。

私的にはそんなイメージを持ってます。

投稿2020/09/17 03:46

honto

総合スコア34

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

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

m.ts10806

2020/09/17 05:27

PHPにおけるオブジェクト指向サポートは3からっぽいです(5から関わっているのでそこまで詳しくはないですが) https://www.php.net/manual/ja/history.php.php 5からは強化されて、実用にたえるようになったと言っても良いかもしれません。
honto

2020/09/17 07:17

歴史的にはそういう背景だと言うことを言いたいがため、どうでもいい事なので、たしかPHP5?とコメントしてます。質問者本人ならまだしも部外者がわざわざ調べて返信することでもないでしょう。 文脈も読み取れない、物事の本質も分からない国語能力の低さ。
m.ts10806

2020/09/17 07:23 編集

あくまで個人的な興味から確認した内容を書いただけで、間違いを指摘したわけでもないのに罵詈雑言を並べられても、ちょっと。 何か私、あなたを傷つけるようなことしましたか?
honto

2020/09/17 07:27

追記と修正依頼のあなたのコメントを見て、質問者も変な人に粘着されてかわいそうだなあ、と思っただけです。 ランキング5位なんですね。頑張ってコメントたくさんしてくださいね。
m.ts10806

2020/09/17 07:30

物事の本質はどこいったんですか? まあ、別に良いです。本回答はリクエストパラメータにもカプセル化にもほとんど答えてないので。
honto

2020/09/17 07:34

変な人に絡まれちゃったなあ、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問