2017-10-11 3 views
0

はあなたとコンソールアプリケーションを持っていると言う:ユーザー入力の検証は、クラスレベルまたはUIレベルで行う必要がありますか?

Main.javaClassA.java

あなたのメインクラスは、あなたのプログラムを実行public static void main(String[] args)方法が含まれており、引数はClassAでメソッドを呼び出すように、ユーザの入力を使用しています。

ClassAメソッドに引数を送信する前に、ユーザー入力確認をmainメソッドに入れますか?

OR

は、あなたが戻って成功した入力かを示すメッセージを中継しますClassA方法でユーザー入力の検証を入れますか?または例外をスローしますか?

つまり、無効な入力があるとInteger.Parse(...)NumberFormatExceptionとなります。

+0

"ClassA"で提供されているコンソールまたはグラフィカルユーザーインターフェイスからの入力はありますか?あなたがクラスが人だと想像すれば...誰がそれらの議論を「所有するか」?あなたはまったく同じ引数を持つ別のコンテキストでClassAを使用すると想像できますか?これらの議論を使ってClassAだけかClassBとClassCが存在するのでしょうか? – Stefan

+0

@Stefan入力はコンソール(非グラフィカルユーザーインターフェイス)から来る – NoName

+0

そしてClassAは 'main'メソッドでのみ使用されています。 – NoName

答えて

1

classAに意味のある例外をスローし、mainメソッドでそれらの例外を処理するかどうかを決めることができます。クラスAを再利用する場合、新しい発信者は他の決定をしたいかもしれません。

ブッククリーンコード(Robert C. Martin)の「ErrorHandling」の章をお勧めします。たとえば、「通常のフローを定義する」、「コードを返すのではなく例外を使用する」、「ビジネスロジックとエラー処理を分ける」などがあります。

場合によっては、高速フィードバックを得ることが重要です。計算が完了するまで2時間待たずに、90%で例外を取得してください。それ以外の場合は、詳細なフィードバックを得ることが重要です。また、参照してくださいData validation: fail fast, fail early vs. complete validation

あなたのコードを読んで、通常の流れを理解するのが簡単かどうか確認してください。各関数は抽象化の1つのこと/モデル1つのレベルのみを実行する必要があります。例外処理は、レベルob抽象化です。

+0

ありがとうございます。UIレベルで、入力がクラスメソッドに渡される正しいデータ型になっていることを確認しました(つまり、クレジットカード番号は実際には数字です)。また、クラスメソッドにおいて、ビジネスロジックを検証する(すなわち、クレジットカード番号が実際にクレジットカード番号である場合)。 – NoName

+0

mabe commons cliはあなたにとって興味があります:http://commons.apache.org/proper/commons-cli/コマンドライン引数を解析するためのその他のオプション:https://stackoverflow.com/questions/367706/how-to- parse-command-line-arguments-in-java – Stefan

関連する問題