c# - .aspx.cs(代码隐藏)或 BLL 或两者中的验证代码?

标签 c# asp.net validation business-logic

我正在努力打破我编写糟糕代码的一些旧习惯。其中之一是验证代码的放置位置。我认为验证不应该在表示层。或者那里可能有一些验证?

这是我以前做过的一个例子

protected void SaveBtn_Click(object sender, EventArgs e)
{

  Item itm = new Item();
  itm.Name = txtName.Text;

  if(String.IsNullOrEmpty(itm.Name))
  {
     //reject
  }
  else
  {
     ItemBLL.Save(itm); //no more validation here
  }
}

public class ItemBLL
{

   public static int Save(Item itm)
   {
      //no more validation in .aspx.vb
      if(String.IsNullOrEmpty(itm.Name))
      {
        //reject
      }
      else
      {
       //Save item
      }
   }
}

我一直在使用第一种方法,我正在考虑切换到第二种方法,但我无法预料会出现什么问题或其中一种方法相对于另一种方法的优势。即使有更好的方法,也请提出建议

更新: 我同意为了用户的简单验证(例如常见错误)应该在演示文稿 (.aspx) 中完成(使用 javascript、jQuery)。

为了可移植性和可重用性,一些业务逻辑验证也应该驻留在 BLL 中。

这是否意味着我们可以跳过代码隐藏(.aspx.vb 或 .aspx.cs)中的验证?

最佳答案

两者都是最好的,但 BLL 是必须的。今天你的业务类只被一个接口(interface)使用 - 浏览器,但明天你可能希望 Web 服务也使用该类。那么您将需要所有业务规则都在类里面,而不是网页上。但是很多规则你会想要在 Javascript 中测试客户端以提供响应接口(interface)。您给出的名称不能为空的示例是在 Javascript 中进行测试的经典示例,并且在名称具有值之前不允许启用“保存”按钮。但是,假设 Name 字段必须是唯一的 - 这可能不是您想要在客户端验证的内容,并且愿意等到它到达服务器。

关于c# - .aspx.cs(代码隐藏)或 BLL 或两者中的验证代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11187417/

相关文章:

javascript - PHP - 总是需要在表单验证中填写空白

javascript - 如何在 JavaScript 中验证时间戳

c# - 使用 LINQ 集合中的条件更新字符串

c# - .NET 核心 Web API key

c# - 如何在不淡化文本的情况下禁用文本框?

asp.net - 有没有办法使用 ASP.NET Identity 授权服务堆栈?

c# - 在 .NET 中生成所有整数的随机、非重复序列

php - 为 .NET/Windows 和 PHP/Linux/Apache 网站使用 OpenID

asp.net - 如何在 ASP.net MVC 中正确执行异步方法?

asp.net-mvc - 如何使用 DataAnnotations 处理 ASP.NET MVC 2 中的 bool 值/复选框?