.aspx.cs(代码隐藏)或BILL或两者中的验证代码?

时间:2012-06-25 10:18:51

标签: 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
  }
}

OR

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)中跳过验证?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

取决于'验证'的含义 - 在表示层中进行简单的数据验证是完全合法的(并且更可取的是IMO),特别是如果它将往返回发的等待时间节省到服务器。例如,这就是jQuery中Unobtrusive Validation库的重点 - 防止用户提交我们知道无效的数据(空的必填字段,只有数字有效的字母等)。

我还要说,对于验证有一种“检查点”的心态并不是一个坏主意:一旦你跨越了层之间的边界(特别是如果你在任何点上映射到不同的数据类) ),确保数据对于该层打算用它做什么是犹太的。

以某种方式验证每个层的一个优点是,如果您在某处再次使用该层,验证逻辑会随之重复,而不是需要在新项目中重新实现。

当然,这只是我的意见(根据我的经验)。我想听听更有经验的开发人员说的话......