1
想象一下,我有合同的方法:代码合同和ASP.Net校验
public void Do(string value)
{
Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(value));
MyBusiness.Handle(value);
}
这种方法是从一个asp.net 2.0网站调用,值从文本框抓起,强制性:
<asp:TextBox ID="txtValue" runat="server" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtValue" ErrorMessage="boom" />
<asp:Button ID="btnDo" OnClick="btnDo_Click" Text="Do" />
后面的代码是经典:
protected void btnDo_Click(object source, EventArgs e)
{
Page.Validate();
if(Page.IsValid)
{
Do(txtDo.Text);
}
}
此代码工作,但扔代码合同warni这让我觉得(虽然并不奇怪)静态检查器不够聪明,无法看到Page.IsValid(这对于静态检查器来说可能更复杂以获得这样的智能)。
这种情况下我的选择是什么?
选项选项我看到的是,以帮助承担静态检查:
protected void btnDo_Click(object source, EventArgs e)
{
Page.Validate();
if(Page.IsValid)
{
Contract.Assume(!string.IsNullOrEmpty(value));
Do(txtDo.Text);
}
}
这样做的好处,以正常工作,但客户端是通过上大项目很多Contract.Assume的降噪。
任何想法/建议?