[seasar-dotnet:783] Re: DTOの入力値検証について
Masayuki TAMADA
[E-MAIL ADDRESS DELETED]
2008年 3月 4日 (火) 00:11:26 JST
タマダです。
ボクは以下の様に実装することで、AOPでジョインポイントに対し、
検証用のbeforeアドバイスを利用して引数のDTOを検証する様にしています。
1. DTOのプロパティ毎の検証は、検証用の汎用属性クラスを作成し、
各プロパティに仕掛ける様にしています。
2. また、DTOクラス内のプロパティ間の検証については、DTOクラスと共に
インナークラスとして、クラス検証用の検証クラスを作成してDTOクラスに
仕掛ける様にしています。
イメージだけで申し訳ないですが、以下の様な感じになります。
[PersonDtoValidator]
public class PersonDto {
<snip>
[IntRangeValidator(0, 120)]
public int Age
{
<snip>
}
[NotNullValidator]
[StringLengthValidator(10, 70)]
public string Name
{
<snip>
}
}
class PersonDtoValidatorAttribute : Attribute {
public void DoValidate(object target) {
PersonDto dto = target as PersonDto;
if ( dto == null)
{
throw new ArgumentException();
}
ここにプロパティ間の検証内容を実装します。
}
}
あとは、検証発火用のinterceptorと.diconファイルの作成のみでOKです。
# どの様な順番で検証するか等は各仕様があるかと思いますので、ここでは
# 記述しません。
結局DTOの変更が行われる場合、プロパティの検証に関しても、プロパティ間の
検証に関しても変更は行われるものだと思います。
汎用の属性クラスやインナークラスを利用することで、該当のDTOクラスの
ファイルのみ変更する事で修正完了ですし、見通しが良いものになるかと。
参考になれば。
On Mon, 3 Mar 2008 20:02:50 +0900
[E-MAIL ADDRESS DELETED] wrote:
# お世話になっております。藤井と申します。
#
# 最近、S2.NETを勉強し始めたばかりです。
#
# S2.NETとは直接、関係ない質問になると思いますが、
# DTOへの入力値検証について、皆様はどのように実装されていますでしょうか?
#
# DTOへVaridateメソッド等を組み込むと、DTOでなくなるように思いますし、
# Varidateクラスを作成したとしても、DTOが変更になれば、変更する必要があると
# 思います。
#
# DTOの属性等で何かできないものかと考えていますが、なにぶん、
# 初心者なもので、なかなかできません。
#
# 一般的なDTOへの入力値検証方法をアドバイス頂ければ幸いです。
#
# 以上、宜しくお願いいたします。
# _______________________________________________
# seasar-dotnet mailing list
# [E-MAIL ADDRESS DELETED]
# https://ml.seasar.org/mailman/listinfo/seasar-dotnet
seasar-dotnet メーリングリストの案内