我正在开发一个应用程序,在该应用程序中,在业务逻辑层中控制验证(范围)检查。代码看起来类似于:
public string ValidateRange(int value, int lowRange, int highRange, string fieldDesc, System.Web.UI.WebControls.TextBox txtBox)
{
string msg = "";
if (value >= lowRange & value <= highRange)
msg = "";
else
{
msg = "Please enter a value between " + lowRange + " and " + highRange + " for \"" + fieldDesc + ".\"";
txtBox.Focus();
}
return msg;
}
我很确定我做错了所以我希望有人可以向我解释处理函数和BLL的最有效方法,以便它可以很好地传递给Presentation层。我的希望是我可以限制我与BLL的交互,以对表单的TextBox控件进行ValidateRange检查,并为每个控件返回一个。如果我接近这个错误,请告诉我。如果它以这种方式工作,我如何允许BLL从表示层访问TextBox?
感谢您的帮助。
答案 0 :(得分:1)
我不会尝试让BLL混乱使用文本框或任何与演示相关的内容。毕竟,BLL应该是表示不可知的。否则,如果您需要编写Windows窗体表示层(与ASP.NET一起使用),则必须在BLL上重写或添加所有新方法以支持接受System.Windows.Forms .TextBox也是!如果两个表示层不能共享相同的BLL方法/代码,它就会破坏n层的整个目的。
不,您需要从BLL中删除任何文本框等痕迹,而是编写代码,以便在表示层中自动聚焦无效的文本框。
如果您正在使用ASP.NET的内置验证内容(Page.IsValid和CausesValidation等),您只需要检查哪个验证程序返回false并以此方式设置焦点。您仍然可以让BLL提供错误消息。
例如,使用CustomValidator,您可以让它调用BLL方法ValidateRange。如果返回值为String.Empty,则返回true(有效)。如果它是非空/非null,则表示您收到错误,因此将CustomValidator的ErrorMessage和/或Text属性设置为返回的字符串,然后返回false(无效)。