【发布时间】:2009-10-12 15:09:55
【问题描述】:
在我的应用程序中,我总是最终实现模型-视图-演示者模式,并且通常最终使用 get 属性从屏幕上删除我的视图对象。
例如
Person IBasicRegistration.Person
{
get
{
if (ViewState["View.Person"] == null)
ViewState["View.Person"] = new Person();
var Person = (Person) ViewState["View.Person"];
Person.Email = txtEmail.Text.Trim();
Person.FirstName = txtFirstName.Text.Trim();
Person.LastName = txtLastName.Text.Trim();
Person.Zip = txtZip.Text.Trim();
Person.Phone = txtPhone.Text.Trim();
Person.ResidentPersonLicenseState =
EnumerationParser.Parse<States?>(ddState.SelectedValue);
return Person;
}
}
但是在调试过程中,我注意到当我在 Presenter/Model 中访问 IBasicRegistration.Person 时,我得到了我的 get { } 属性的相当多的遍历。
我开始认为这种模式似乎与 INotifyPropertyChanged 模式非常相似,我开始考虑实现一个类似的模式并让每个文本字段实现一个 OnChanged 事件,该事件将更新它在位于视图状态的 person 对象中的相关值我越想越深,每次一个人将鼠标移出字段时,它都需要大量的服务器请求,并且似乎在某些时候可能会导致可伸缩性问题。
我的下一个想法是创建一个 IsDirty 标志并将我的代码包装在它涉及类似于以下字段的位置:
Person IBasicRegistration.Person
{
get
{
if (ViewState["View.Person"] == null)
ViewState["View.Person"] = new Person();
var Person = (Person) ViewState["View.Person"];
if(IsDirty)
{
Person.Email = txtEmail.Text.Trim();
...others
IsDirty = false;
}
return Person;
}
}
并在任何调用回发的方法(即通常只是提交按钮)上设置 IsDirty = true,然后它将无缘无故地跳过大量重复工作。
有没有人想出更优雅的方法来完成这项任务?
【问题讨论】:
-
我会说你的概念是经过深思熟虑的。如果它已经实施并且已经工作,也许你应该坚持下去。当然,除非有人提出了一些非常优雅且易于实现的东西。
-
“scrap”与“scrape”不同,“scrapping”与“scraping”不同。
-
非常有见地的评论先生语法纳粹。
-
@Cris:这让我很困惑。
标签: c# asp.net screen-scraping mvp