0

不确定是否有“正确”的答案,所以我将其标记为社区 wiki。为冗长的序言道歉。

我正在.Net 中构建一个中等大小的 Web 应用程序,并且已经确定了基于表的体系结构。我的 DAL 层由一组 TableGateway 类组成,这些类处理向数据库加载/保存数据 - 这些返回强类型数据集。应用程序逻辑被组织成一组 TableModule 类。最后,我的 ASPX 页面处理显示内容并将表单值等传递给要处理的 TableModules。

令我困惑的是,谁应该负责调用 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);
    }
4

1 回答 1

0

恕我直言,第二个变体,因为将逻辑层拆分为 MVC 模型很简单:

  • aspx 页面是视图,仅将数据和命令从用户表示转换为用户表示

  • TableModule 的作用类似于 Controller 层

  • TableGateway 代表模型层

在第二个变体中,您可以根据内部条件修改控制层中的访问模式,aspx 级别不可访问。例如,决定从哪个id真正加载数据,检查用户访问权限等。

于 2009-12-23T13:05:09.360 回答