「車輪の再実装は善」(角谷HTML化計画より)

フレームワークやライブラリが充実した便利な世の中になると、なかなか基礎体力を高めるチャンスがなくなってくるように思えます。以下は、WEB-DBの連載で、スペースの都合で載せられなかったコラムです。

■コラム あるものでも作れ!!
 CSVファイルのフィールドをチェックしたり、入力されたデータをチェックするなど、開発をしていると、検証のフレームワークがよく必要になってきます。筆者はプロジェクトのたびに何度も「検証フレームワーク」を、特にテスト初心者の方に作ってもらってきました。(コード:自作検証フレームワーク)既にJakarta Commons Validatorなどのライブラリや前のプロジェクトで作ったものがあるにもかかわらずです。これは、検証フレームワークがテストやオブジェクト指向の学習に向いているからです。検証は「数値かどうかを判定する」「文字列の長さを判定する」など入力データと結果がはっきりしているため、テストが非常に書きやすいのです。また、ペアプログラミングなどで一緒に1つ作った後、別の種類の検証を作ったりと、テスト初心者の方が1人で復習できる要素も持っています。また、複数の入力検証クラスを保持する、親玉検証クラス(例のValidatrorsクラスなど)で、コンボジットを体験したり、インタフェイスを使ったりと、Java/オブジェクト指向のよい教材としても働きます。もちろん完成したコードはプロジェクトに使うため、学習しているという意識はお互いありませんので、完成したときに満足感もあります。フレームワークやDIコンテナなどが整備されてきた昨今、このような余白がないと、学習機会があまりないというのが実情ですので、なかなかおすすめだと思います。

                                                                                  • -
コード:自作検証フレームワーク
                                                                                  • -
/** * 検証クラスのインタフェイス */ public interface Validator { /** * 検証をおこないます。 * エラーの場合、エラーメッセージを返します。 * 正常の場合、nullが返ります。 */ public String valid(String str); } /** * 文字列の長さ検証クラス */ public class StringLengthValidator { private final int maxLength; public StringLengthValidator(int maxLength) { this.maxLength = maxLength; } public String valid(String str) { if (str == null || str.length() <= maxLength) { return null; } else { return "文字列が長すぎます。(" + maxLength + "文字以内)"; } } } /** * 複数の検証クラスを保持し、一気にチェックします。 */ public class Validators implements Validator { private List validators = new ArrayList(); public void add(Validator validator) { validators.add(validator); } public boolean valid(String str) { for (Iterator it = validators.iterator(); it.hasNext();) { Validator validator = (Validator)it.next(); String result = validator.valid(str); if (result != null) { return result; } } return null; } }