表模块/表网关 - 从网关加载代码的位置?

时间:2009-12-22 16:13:13

标签: c# design-patterns asp.net business-logic

不确定是否有“正确”答案,所以我将其标记为社区维基。为长期前言道歉。

我正在.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);
    }

1 个答案:

答案 0 :(得分:0)

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

  • aspx页面是View,仅从用户表示转换数据和命令

  • TableModule的作用类似于Controller层

  • TableGateway代表模型层

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