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

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

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

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

オブジェクト指向

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

Q&A

解決済

2回答

1011閲覧

オブジェクト指向の考え方

anonymous001

総合スコア96

Java

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

オブジェクト指向

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

0グッド

0クリップ

投稿2018/11/01 00:17

編集2018/11/01 00:19

serviceクラスがあった際に
public Result calculate(Object obj1)
このようなメソッドがあったとします。

Resultがnullになるケースの対応方法として(もちろんOptionalを使ってもいいのですが)
calculateがexceptionを出すべきなのか。nullを返してもいいのか
呼び出し先でcheckするべきなのか。
引数のobj1に関してもobjのvalidationをcalculateメソッド内ですべきなのか
呼び出し先でそもそもcheckすべきなのか

Serviceクラスの責務などでよくわからなくなります。
なにかよくまとまっているものURLや本などもちろん解説も嬉しいです。

Javaの振る舞いは覚えたものの、この機能はここが持つべきじゃないみたいな議論でしばしばわからなくなります。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Resultがnullになることが業務上普通にあり得ることなのであれば、nullを返してもいいような気はしますね。
もちろんnullableなOptionalで返すべきです。
Resultがnullになることは明らかな異常事態なのであれば例外の方がいいのではないかと思います。
エラーハンドリングを強制させたいなら、Runtime系ではない例外がいいです。
でも、本当にここはケースバイケースという感じです。

validationに関してですが、ここは賛否両論ありそうですが、持論を申し上げますと
Serviceでvalidationは絶対NGです。
Serviceは業務ロジックです。入力値の検証は業務ではないので役割外ということです。
Serviceに不正な値がくればエラーが発生してプログラムは停止すべきです。

入力値の検証はプレゼンテーションロジックの役割です。
Serviceを呼ぶ前(Actionなど)のところでやってください。
ログインチェックや在庫チェックなどの業務チェックは別ですよ?
プレゼンテーションロジックとは入力値を検証したり、業務処理用に加工したり、
業務処理の結果を画面表示用に加工したりなどを担うロジックですね。

投稿2018/11/01 01:00

編集2018/11/01 01:15
root_jp

総合スコア4666

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

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

退会済みユーザー

退会済みユーザー

2018/11/01 01:50

横から失礼致します。ここでおっしゃられてる検証というのは、ただ値が不正か確認するだけではなく、不正な値だった場合は再入力させるまでを言う、という理解であってますか?
root_jp

2018/11/01 01:52

そうです。validationです。
root_jp

2018/11/01 01:55

不正といっても、例えばログイン時のパスワードが間違ってるから再入力させるとかは、業務が入ってきてますので、Service層でも問題ないですが、半角英数のみで入力されてるか?などをServiceまで持ち込まないでくださいね。ってことです。
退会済みユーザー

退会済みユーザー

2018/11/01 02:19

なるほど、ありがとうございます!('_'*
anonymous001

2018/11/01 04:59

ありがとうございます!! 例えばserviceが複数のservoceを依存関係にもち injectionされてた際に。 Result result = serviceA.calculate(obj1,obj2) NewResult a = serviceB.filter(result) こんな記述があったときに obj1,obj2のvalidationやnull checkやresultのcheckをここですべきなのか serviceAやB内ですべきなのかってどうやって判断していますか?
root_jp

2018/11/01 05:36

何度も言っていますが、validationはcalculateする前に終わらしておいてください。 resultのチェックはどういったものがあるか分からないので何とも言えませんが、serviceA内で例外を投げるのであれば、ここでキャッチするしかありません。 例外ではなくnullを返すとして、resultがnullであるということを想定内の1つの結果として扱うのであれば、filter内にそのまま渡してNewResultとして何のエラーかを表してもいいと思います。 しかし、filterするまでもない、NewResult化するまでもないとか言うレベルのことなのであれば ここでif切ってリターンして、filter実行前に処理すべきじゃないでしょうか。
guest

0

場合によってやり方を変えます。
場合によっては例外を出すメソッドと出さないメソッドの二種類を用意します。

投稿2018/11/01 00:25

Zuishin

総合スコア28660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問