【发布时间】:2016-02-16 01:04:59
【问题描述】:
我有这样的示例类
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ContactNumber { get; set; }
public System.DateTime DateOfBirth { get; set; }
}
在将客户添加到数据库之前,所有这些字段都是必需的。所以在服务/业务逻辑层我对这 4 个属性进行验证。我验证 FirstName 和 LastName 不为空且 ContactNumber 大于 0 且 DateOfBirth 大于 1930(仅作为示例)。在我可以将客户对象传递给服务/业务逻辑层以验证并添加到数据库之前,在 aspx 页面中,我对 ContactNumber 和 DateOfBirth 进行类型检查。我使用像 IsNumeric 和 IsDate 这样的简单函数。
我知道验证应该在服务层完成,这样如果将来另一个应用程序需要使用这个逻辑,就可以避免重复。
在 aspx 页面中进行类型检查然后将对象传递给执行所有其他验证的服务层是否常见?我知道避免这种情况的一种方法是使用 javascript。为了争论(从未真正发生过),客户关闭了他的javascript。我正在考虑的另一个选项是将客户添加到数据库的函数接受其所有参数作为对象。这种方式可以避免在 aspx 页面中进行类型检查,而只需在服务层中完成。但是,如果我有 20 个属性作为方法参数发送呢?
【问题讨论】:
-
我可能不清楚你有什么样的架构,但大多数时候在这种架构表示层(例如 API)中进行输入验证。更进一步,API 调用您的业务层来进行业务验证
-
我使用的是 3 层架构。数据、服务和视图。所有业务验证都发生在服务层。我在视图中唯一验证的是正确的类型正在传递给业务层。进一步补充,我不验证视图中的名字和姓氏。我仅将联系电话号码和出生日期验证为权限类型值。但在服务层,我对所有 4 个字段进行验证。
-
查看层是什么意思。如果我理解正确,您的服务层不仅仅封装业务逻辑,它还与视图交互并执行所有业务逻辑。您需要在服务和视图之间有一个层,该层仅负责从请求中获取数据,进一步传递它们并在完成后正确操作,返回视图,向视图发送消息或其他内容
-
这就是 DataAnnotations 存在的原因。
-
是的,我可能误读了您的问题,没有注意到它专门针对网络表单。道歉
标签: c# asp.net validation webforms