我们在哪个层进行验证 如果我在bll层执行我不能使用像messagebox这样的功能 这个程序工作正常我需要执行验证你们可以帮助我只是为fname执行验证,如果它是null或不 在bll类
public void InsertEmployee(string fname, string lname, string alias,
string contact, string address, string company,
string bdate, string email)
{
try
{
obj.InsertEmployee(fname,lname,alias,contact,address,company,bdate,email);
}
catch (Exception ex)
{
throw ex;
}
}
在Dal课程中
public void InsertEmployee(string fname, string lname, string alias,
string contact, string address, string company,
string bdate, string email)
{
string query;
try
{
query = "insert into cntc_employee values('" + fname + "','" + lname + "','" + alias + "','" + contact + "','" + address + "','" + company + "','" + bdate + "','" + email + "')";
OpenCnn();
cmd = new SqlCommand(query, con);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
CloseCnn();
}
}
在我的ui课程中
private void cmdins_Click(object sender, EventArgs e)
{
string fname = txtfname.Text;
string lname = txtlname.Text;
string alias = txtalias.Text;
string contact = txtcon.Text;
string address = txtadd.Text;
string company = txtcomp.Text;
string date = datetimepicker.Value.ToShortDateString();
string email = txtemail.Text;
try
{
obj.InsertEmployee(fname,lname,alias,contact,address,company,date,email);
MessageBox.Show(txtfname.Text.Trim() + " employee is successfully added.");
}
catch (Exception err)
{
MessageBox.Show(err.Message.ToString());
}
}
答案 0 :(得分:0)
简而言之,无处不在。当然,有一个更长的答案,从&#34开始;它取决于..."但让我们专注于简洁明了的简短回答。您的客户端可以执行验证,但您的业务逻辑层是否信任该客户端?其他客户怎么样?数据库本身将具有约束,字符串长度等。
所以,基本上你需要把它放在任何有意义的地方。是的,会有一些重复,但比一些垃圾数据更好地进入数据库并进一步破坏其他东西。
答案 1 :(得分:0)
验证是恕我直言的商业问题,所以它就是它所属的地方。
返回验证结果的方法是不同的问题。所以不,您的业务层不应该执行MessageBox.Show
,这应该只在您的UI层中完成。但是,您可以将字符串中的validation-result返回到您调用业务层的UI层,并在那里显示消息框。另一个选择是抛出验证异常,并在UI层中捕获它。
是的,您也可以在合理的地方执行其他地方的验证。例如,当用户单击保存按钮时,您可以对视图执行客户端验证,这样响应速度会更快,并且更加用户友好。
要在业务层添加验证,一个选项就是这样做。
注意:这是一种相当简单的直接方法。
注意:我已经删除了你在catch中执行throw ex
的try-catch。你以这种方式放弃堆栈跟踪,因为你没有真正处理异常,所以可以完全删除它。
// Add reference to System.ComponentModel.DataAnnotations if necessary
using System.ComponentModel.DataAnnotations;
public void InsertEmployee(string fname, string lname, string alias,
string contact, string address, string company,
string bdate, string email) {
ValidateEmployee(fname,lname,alias,contact,address,company,bdate,email);
obj.InsertEmployee(fname,lname,alias,contact,address,company,bdate,email);
}
private void ValidateEmployee(string fname, string lname, string alias,
string contact, string address, string company,
string bdate, string email) {
var validationErrors = new List<string>();
if (string.IsNullOrEmpty(fname))
validationErrors.Add("First name is a required field.");
if (string.IsNullOrEmpty(lname))
validationErrors.Add("Last name is a required field.");
// Etc... add other validations
if (validationErrors.Any()) {
throw new ValidationException(string.Join(" ", validationErrors));
}
}
请注意,您的初始设置可以大大改善。比如: