只是试图收集有关通过 ASP.NET (2.0+) UI/Presentation 层操作业务/域对象的方法/无效方法的想法。特别是在 ASP.NET 代码直接与业务层对话的经典 ASP.NET LOB 应用程序情况下。我经常遇到这种类型的设计,想知道什么是理想的解决方案(即实现特定的模式),以及在没有实现“模式”的情况下不需要完全重写的最佳实用解决方案是什么。
这是一个示例场景。
作为特定业务/域对象的“编辑/新建”页面的单个 ASP.NET 页面,让我们以“人员”为例。我们想在此页面中编辑姓名和地址信息。当用户进行编辑或输入数据时,在某些情况下表单应该回发以刷新自身。例如,在编辑地址时,他们选择“国家”。之后,州/地区下拉菜单将启用并刷新所选国家/地区的相关信息。这本质上是业务逻辑(根据某些依赖字段限制可用选择),并且此逻辑由业务层处理(请记住,这只是一个示例,
理想情况下,此逻辑仅存储在业务/域对象中(即在 ASP.NET 代码中没有重复的逻辑)。为了实现这一点,我相信业务/域对象需要重新初始化,并根据每个回发的当前 UI 值设置它的状态。
例如:
private Person person = null;
protected void Page_Load()
{
person = PersonRepository.Load(Request.QueryString["id"]);
if (Page.IsPostBack)
SetPersonStateFromUI(person);
else
SetUIStateFromPerson(person);
}
protected void CountryDropDownList_OnChange()
{
this.StateRegionDropDownList.Enabled = true;
this.StateRegionDropDownList.Items.Clear();
this.StateRegionDropDownList.DataSource = person.AvailableStateRegions;
this.StateRegionDropDownList.DataBind();
}
我见过的其他选项是将业务对象存储在 SessionState 中,而不是在每次页面加载备份时从存储库(也称为数据库)加载它。
想法?