【Java】変更に強いコード追加編 - Validation 機能
6773 ワード
もっと!変更に強いコードを目指す
- 前回の
【Java】変更に強いコード実践編 - 値オブジェクト2(Value Object)
では、
Valueオブジェクトを使ってタイポがない、凡ミスがないコードにしようo(^^)o
- ということで、建物の緯度経度を表すBuildeingクラスを作りました
- Valueオブジェクトで型を指定することで、Buildingに渡す引数の順番間違え(Latitude、Longitudeの順番)を防止できました👍
Validation機能追加
- さらに堅牢なコードを目指し、LatitudeにLongitudeの値(139.761102f)を入れてしまうことを防ぎたい。。。
- 値オブジェクトの初期化時に間違った実値を渡してしまう事を抑止するのはValidation機能で行うことができます
new Latitude(139.761102f),
new Longitude(35.663114f)
- Latitudeクラスを以下のように変更したら、範囲外の値を入力した時に実行時例外を出すことができるので、さらに堅牢なコードになりますね⭐️o(^o^)o
- 構成は以下のようになっています
Project Root
└─src
└─ main
└─ java
└─ Main
└─ values
└─ Building
└─ Building2
└─ BuildingName
└─ Longitude
└─ Latitude
└─ Main
- 他の全コードは前回の
【Java】変更に強いコード実践編 - 値オブジェクト2(Value Object)
参考にしてください
Latitude.java
package values;
public class Latitude {
private float value;
public Latitude(float value) throws Exception {
if(value < -90 || 90 < value ){
throw new Exception("Out of Range");
}
this.value = value;
}
public float getValue() {
return value;
}
}
Main.java
package values;
public class Main {
public static void main(String[] args) throws Exception {
Building mitaka = new Building(
new BuildingName ("三鷹の森"),
//fつけないとリテラルとして認識されない
new Latitude(35.6962303f),
new Longitude(139.5704895f)
);
/*緯度と経度の値を逆にしてしまった場合にValidationが効いて実行時エラー
Exception in thread "main" java.lang.Exception: Out of Range
*/
Building totoro = new Building(
new BuildingName ("トトロの森"),
new Latitude(139.4219994f),
new Longitude(35.7818004f)
);
/*緯度と経度の引数順を間違えてしまった場合はコンパイルエラー
Building totoro = new Building(
new BuildingName ("トトロの森"),
new Longitude(139.4219994f),
new Latitude(35.7818004f)
);
*/
/*コンパイルエラーにならない例
Building2 totoro2 = new Building2(
"トトロの森",
139.4219994f,
35.7818004f
);
*/
System.out.println("pause");
}
}
Valueオブジェクトを使ってタイポがない、凡ミスがないコードにしようo(^^)o
new Latitude(139.761102f),
new Longitude(35.663114f)
Project Root
└─src
└─ main
└─ java
└─ Main
└─ values
└─ Building
└─ Building2
└─ BuildingName
└─ Longitude
└─ Latitude
└─ Main
【Java】変更に強いコード実践編 - 値オブジェクト2(Value Object)
参考にしてください
Latitude.java
package values;
public class Latitude {
private float value;
public Latitude(float value) throws Exception {
if(value < -90 || 90 < value ){
throw new Exception("Out of Range");
}
this.value = value;
}
public float getValue() {
return value;
}
}
Main.java
package values;
public class Main {
public static void main(String[] args) throws Exception {
Building mitaka = new Building(
new BuildingName ("三鷹の森"),
//fつけないとリテラルとして認識されない
new Latitude(35.6962303f),
new Longitude(139.5704895f)
);
/*緯度と経度の値を逆にしてしまった場合にValidationが効いて実行時エラー
Exception in thread "main" java.lang.Exception: Out of Range
*/
Building totoro = new Building(
new BuildingName ("トトロの森"),
new Latitude(139.4219994f),
new Longitude(35.7818004f)
);
/*緯度と経度の引数順を間違えてしまった場合はコンパイルエラー
Building totoro = new Building(
new BuildingName ("トトロの森"),
new Longitude(139.4219994f),
new Latitude(35.7818004f)
);
*/
/*コンパイルエラーにならない例
Building2 totoro2 = new Building2(
"トトロの森",
139.4219994f,
35.7818004f
);
*/
System.out.println("pause");
}
}
Author And Source
この問題について(【Java】変更に強いコード追加編 - Validation 機能), 我々は、より多くの情報をここで見つけました https://qiita.com/suema0331/items/967d379c06c9ee501653著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .