Keep coding, keep learning


私が気をつけているのは

  • 目標をもつ
  • コードは書き続ける。どんどん書く。
  • 技術論だけじゃなくて、思考方法論とかまわりのビジネス概況などなど。
  • さまざまなことに興味を持つ。柔軟性を維持する。

やっぱりやり続けるのが大事だと思うので。
いろいろあったとしても手は止めないでコード書いてますし、いろいろ見ています。

続きを読む

目標をたてること。

上記のようにいっても、数年先がわからないから目標をたてないっていう人も
いますが、自分はそうではなく目標というかテーマをある程度長いスパンで持つのは
大事なことだと思います。というわけでお粗末な方法ながらオープンにしてみます。

続きを読む

Oval

Ovalってなんかあんまやってるひとがいなそうなので、
少しやってみようかと思います。コードみがてら。


(追記)

ふむ、動かすのは凄く簡単ですね。

Validatorをインスタンス化して、オブジェクトぶちこむだけ。

依存ライブラリゼロでもいけるのはGoodGood.敷居は低いかんじ。


public class Main {

	public static void main(String[] args) {
		Hoge hoge = new Hoge();
		Validator validator = new Validator();
		List<ConstraintViolation> list = validator.validate(hoge);
		for (ConstraintViolation violation : list) {
			System.out.println(violation.getMessage());
		}
	}
}


ターゲットのオブジェクトは以下のような感じです。

public class Hoge {

	@NotNull
	@NotEmpty
	@Length(max=32)
	private String name;
}

Oval3

http://d.hatena.ne.jp/yone098/20080125/1201216262
http://d.hatena.ne.jp/cero-t/20071129/1196351867
かな?単体で利用出来るのが嬉しい。
まさに求めてる薄い部品ですかねぇ。

http://d.hatena.ne.jp/shot6/20080308#c1204941305

リンクありがとー。
うん、そうすね。非常に楽に使いこなせるならGoodかもですね。
バリデーションてやってみると意外と奥が深いので単純なアノテーションとかで
全部が実現できるとは思えないんだけど、そこらへんOvalどうするのかが見もの。
ローカリゼーションとか相関チェックとかのしやすさとか、カスタマイズ性が重要かな。

たぶん相関チェックはcheckWithで自分でがんばれ!だと思うけど、
まあがっちりかけるならそれでいいと思う。


ま、もう少し遊んでみます^_^

Oval4


メソッドの場合は@IsInvariantつけてね、と。

ちなみにValidatorにaddExpressionLanguageしたりすれば評価式を
他の式言語とかにも簡単に切り替えられますね。
デフォルトでもMVELとかOGNLとかはロードしようとしてる。

バリデーションのアノテーションは@Constraintをつけて、そこにAnnotationCheckを
実装したクラスを書いておくのね。

public class Foo {

	protected String name;
	
	@IsInvariant
	@NotNull
	@Length(max=4)
	public String getName() {
		return name;
	}
}

Oval5


だんだん横道にそれてるけど、まあいいや。

Ovalは設定のほうほうがいくつかあって、XMLだけじゃなくてPOJOの設定クラスみたいなのを
くわせることもできそう。

あと、メッセージリソースに日本語のものがないから、これは作ってあげて
なげてみようかな。そんないっぱいねーし。

メッセージリソース結構いっぱい揃ってるんだけど、日本のがないから、
日本の開発で使う分には各アノテーションでerrorCode()を各アノテーションで設定オーバライドしたりとか
そんなんしなくちゃいけないかも。


(追記)
正確にはerrorCode()とmessage()かな。

Oval6

バリデーションのON/OFFの切り替えも簡単にできる。Goodっすね。
アノテーションに対して、profiles項目を指定する。
Validatorに対して、disableProfile/enableProfileで切り替える。

public class Baz {

	@NotNull(profiles="a1")
	@NotEmpty(profiles="a1")
	@Length(min=4, profiles="a2")
	protected String name;
}
public class Main {

	public static void main(String[] args) {
		Baz baz = new Baz();
		Validator validator = new Validator();
		baz.name = "";
		validator.disableProfile("a1");
		validator.enableProfile("a2");
		List<ConstraintViolation> list = validator.validate(baz);
		for (ConstraintViolation violation : list) {
			System.out.println(violation.getMessage());
		}
	}
}