定義的プログラミング
定義的プログラミングっていう言葉を思いついたから、メモしとく。
イメージ的にはこんなん。
Before: 普通の処理コード
public Dto process(Map<String, String> input) { Dto dto = new Dto(); dto.userName = input.get("ユーザ名"); dto.password = input.get("パスワード"); ValidateUtils.checkRequired(dto.userName); ValidateUtils.checkLength(dto.userName, 0, 24); ValidateUtils.checkRequired(dto.password); ValidateUtils.checkLength(dto.password, 8, 24); ValidateUtils.checkAlphanumericSymbol(dto.password);
After: 定義的プログラミング
static { define("ユーザ名", "userName", REQUIRED, ALPHANUMERIC); define("パスワード", "password", NOT_REQUIRED, ALPHANUMERIC_SYMBOL); } public static void define(String columnName, String propertyName, FieldType... types) { nameMap.put(columnName, propertyName); typeMap.put(columnName, types); } public T process(Map<String, String> input, Class<T> clazz) { // がんばる感じのコード }
仕様書に載っている表をそのままコードに落とすようなイメージなので
バグが減らせるし、仕様変更にも対応しやすい。
状態遷移のような、複雑な処理ほど効果的だと思う。
自分で実装する時はよくこんな感じにするのだけど、
なかなか後輩には伝えにくかった。
名前をつけておけば伝えやすくなるかなと思って、メモしといた。