UI-Service-Business-Data Access-Database という階層化された APS.Net アプリケーションがあります。
たとえば、ユーザーを保存または更新するときは、UserDto オブジェクトを作成し、UI にプロパティを入力してから、そのオブジェクトをレイヤーを下ってデータ アクセサーの Save メソッドに渡します。
保存すると、更新または挿入されたユーザーの ID が返されます。
protected void btnSave_Click(object sender, EventArgs e)
{
var o = new UserDto
{
DisplayName = txtName.Text,
Email = txtEmail.Text,
Username = txtUsername.Text,
Password = txtPassword.Text,
TimeZoneId = ddZones.SelectedValue,
Id = Session["SelectedUserId"] == null ? 0 : int.Parse(Session["SelectedUserId"].ToString())
};
int id = new UserService(Common.CurrentUserId()).SaveUser(o);
Response.Redirect("users.aspx");
}
これはすべて機能していますが、検証レイヤーをビジネスレイヤーに追加しています。これにより、いくつかのビジネス ルールに対してオブジェクトが検証され、問題がなければ保存します。それ以外の場合は、何かを返し、UI で問題を示すために使用します。
したがって、現時点での私のバリデーター、basic..は、保存する前にユーザーオブジェクトを受け入れ、検証を行い、trueまたはfalseを返すメソッドを持っています...次のようになります:
public static bool SaveUser(UserDto user)
{
if (user == null)
{
return false;
}
if(user.Username.Length < 4 || user.Username.Length > 15)
return false;
if (user.Password.Length < 4 || user.Password.Length > 15)
{
return false;
}
try
{
var m = new MailAddress(user.Email);
return true;
}
catch (FormatException)
{
return false;
}
}
注:このメソッドは保存を行いません...そのため、名前を変更する可能性があります(ただし、Validationクラスにあります)。このオブジェクトを保存できますか。
それで、いくつかの基本的な検証。ただし、私の戻り値の型は bool です。私はそれが何かのようなものを返したいと思っていList<String> ValidationErrors
ます。
しかし、私の UI からの save メソッドは int を想定しており、すべてがうまく保存されれば、int が欲しいだけです。エラーが発生したときにどのように処理すればよいですか? List<> を返す必要がありますか?
私がこれを投稿したとき、ちょうど私に浮かんだアイデア: たぶん、戻り値の型であり、保存されたアイテムの「Id」とリストを持つ SaveUserDto オブジェクトを作成できますか?
そこで、UserDto を送信し、e SaveUserDto? で返信します。または、より一般的には、UserDto を送信し、ResponseDto で応答します。これには、id (アイテムが保存されている場合) とエラーのリスト、および ErrorList.Count > 1 の場合に true になる bool プロパティが含まれます。 ?