我有一个 APS.Net 应用程序,它是分层的 - UI-Service-Business-Data Access-Database。
当我保存或更新用户时,例如,我创建了一个 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。我希望它返回类似 a 的List<String> ValidationErrors
东西。
但是,我的 UI 中的保存方法需要一个 int,如果一切都保存得很好,我只需要这个 int。我将如何处理发生错误的时间,我需要一个 List<> 回来?
当我发布此内容时,我突然想到了一个想法:也许我可以创建一个 SaveUserDto 对象,它是返回类型,并保存了项目的“Id”以及一个列表?
所以,我发送一个 UserDto 下来,并用 e SaveUserDto 回复?或者,更通用地说,我发送了一个 UserDto,然后回复一个 ResponseDto,它只包含一个 id(如果项目已保存)和一个错误列表,以及一个 bool 属性,如果 ErrorList.Count > 1 则为 true ?