不确定是否有“正确”答案,所以我将其标记为社区维基。为长期前言道歉。
我正在.Net中构建一个规模适中的Web应用程序,并且已经确定了基于表的架构。我的DAL层由一组TableGateway类组成,这些类处理将数据加载/保存到数据库 - 这些类返回强类型的DataSet。应用程序逻辑被组织成一组TableModule类。最后,我的ASPX页面处理显示内容并将表单值等传递给要处理的TableModule。
让我感到困惑的是谁应该负责调用TableGateway来获取DataSet,ASPX代码隐藏或TableModule?
示例1 - ASPX执行此操作:
SomePage.aspx.cs:
protected void AddLink_Click(object sender, EventArgs args)
{
long id = long.Parse(PopulationDropDown.SelectedValue);
string someProperty = SomePropertyTextBox.Text;
IPopulationGateway populationGateway = DALServicesLocator.GetPopulationGateway();
PopulationDataSet populationData = populationGateway.LoadPopulationDetails(id);
PopulationModule.SomeLogicToAddStuff(populationData, id, someProperty);
populationGateway.Save(populationData);
}
示例2 - TableModule执行此操作:
SomePage.aspx.cs:
protected void AddLink_Click(object sender, EventArgs args)
{
long id = long.Parse(PopulationDropDown.SelectedValue);
string someProperty = SomePropertyTextBox.Text;
// Just pass values to the TableModule and let it talk to the Gateway.
PopulationModule.SomeLogicToAddStuff(id, someProperty);
}
答案 0 :(得分:0)
恕我直言第二版,因为将逻辑层拆分为MVC模型很简单:
aspx页面是View,仅从用户表示转换数据和命令
TableModule的作用类似于Controller层
TableGateway代表模型层
在第二个变体中,您可以根据内部条件修改控制层中的访问模式,不能访问aspx级别。
例如。决定从哪个id
真正加载数据,检查用户访问权限等。