2009-12-22 22 views
0

不確定是否有一個「正確的」答案,所以我已經標記爲社區維基。爲長時間的前導而道歉。表模塊/表網關 - 從網關加載代碼的位置?

我在.Net中構建了一個規模適中的Web應用程序,並且已經建立在基於表的架構上。我的DAL層由一組處理加載/保存數據到數據庫的TableGateway類組成 - 它們返回強類型的數據集。應用程序邏輯被組織成一組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

我很欣賞這是一個在宏偉計劃中的爭議問題,但它真的讓我煩惱! – rob 2009-12-22 16:30:03

回答

0

恕我直言第二變體,因爲它很容易將邏輯層分割爲MVC模型:

  • aspx頁面是視圖,只轉換數據和從和向用戶表示

  • TableModule行爲像控制器層

  • TableGateway命令表示模型層

在第二您可以根據內部條件修改控制層中的訪問模式,但無法訪問aspx級別。 例如決定從哪個id真正加載數據,檢查用戶訪問權限等。