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/shot6/20080308#c1204941305
http://d.hatena.ne.jp/cero-t/20071129/1196351867
かな?単体で利用出来るのが嬉しい。
まさに求めてる薄い部品ですかねぇ。
リンクありがとー。
うん、そうすね。非常に楽に使いこなせるなら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; } }
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()); } } }