2012-04-16 85 views
2

最近,我們的教授指出我們的表示層應該主要由方法調用組成,並且我們的大多數代碼應該在業務對象層和數據訪問層完成。我的問題是這是否通常包含用戶輸入的代碼?我的意思是這個;我有一個由多個文本框組成的表單,以便用戶可以爲不同的事情輸入值。用戶然後點擊一個按鈕並且信息被保存在數據庫中。3層架構中的什麼地方

按鈕甚至方法是這樣的:

//event handler for data input 
public static void btnEnterAbRipperXInfo_Click(object sender, EventArgs e) 
{ 
    //convert text box data into int datatype and assign to variable 
    inAndouts = int.Parse(txtInAndOuts.Text); 
    forwardBicycles = int.Parse(txtForwardBicycles.Text); 
    reverseBicycles = int.Parse(txtReverseBicycles.Text); 
    crunchyFrog = int.Parse(txtCrunchyFrog.Text); 
    crossLegWideLegSitups = int.Parse(txtCrossLegWideLegSitups.Text); 
    fiferScissors = int.Parse(txtFiferScissors.Text); 
    hipRockNRaise = int.Parse(txtHipRockNRaise.Text); 
    pulseUpsHeelsToHeaven = int.Parse(txtPulseUpsHeelsToHeaven.Text); 
    vUpRollUpCombos = int.Parse(txtVUpRollUpCombos.Text); 
    obliqueVUps = int.Parse(txtObliqueVUps.Text); 
    legClimbs = int.Parse(txtLegClimbs.Text); 
    masonTwists = int.Parse(txtMasonTwists.Text);    
} 

如果上述按鈕事件方法中的代碼實際上進入一個業務對象或數據訪問類,而不是表示層類?

這不是家庭作業。我在我的編程課之外爲我的兒子創建了一個90天的鍛鍊計劃。我也可以在畢業時將它用作投資組合,因此,我想確保我遵循標準做法。

回答

0

BOL負責在進入DAL(數據訪問層)之前需要進行消毒處理的特定業務檢查/案例。 DAL只是接收來自BOL的輸入並將它們傳遞給數據庫。

如果您的文本框的值不需要任何類型的業務邏輯,您可以將它們傳遞給BOL以將它們自由傳遞給DAL。

從代碼的外觀看,不需要檢查/驗證。雖然看起來多餘,但爲了與您的項目保持一致,您仍然可以將它們傳遞給BOL。實質上,你的BOL不會對這些值起作用 - 它只會將這些值傳遞給DAL。

+1

@ProgrammingNewbie - 沒問題 - 只要瞭解你現在擁有的應該在UI層中,你可能想在你的代碼解析之前嘗試一下。如果txtMasonTwists.Text不是整數,那很容易引發異常。 – JonH 2012-04-16 17:14:06

0

不,這不適用於域或數據層對象。由於您直接與演示文稿元素進行交互,因此這對UI圖層來說很好。

現在,一旦將這些值拉出並解析爲合適的類型,那麼將該工作從UI層轉移出去將是一個好主意。

此外,您應該考慮使用int.TryParse來轉換您的值,因爲如果您將一個非數字值輸入到一次文本框中,表單將引發異常。

1

您的代碼從UI讀取值。

此代碼只能在UI層,因爲業務層無法訪問UI。

1

通常在UI層或表示層,您可以從控件獲取值(就像您現在所做的那樣)。然後用所有這些值調用業務邏輯方法。類似於

BAL.ProcessRequest(arg1,arg2,.....); 

現在,如果您有一些與這些輸入相關的業務規則,那麼在您的業務邏輯中執行。例如,如果您要傳遞產品及其訂購數量,並且您想根據某些業務規則計算這些產品的折扣,那麼您將在業務層中執行折扣計算。
之後,當您即將提交到數據庫時,您將調用數據訪問層。例如:

DAL.SaveData(arg1,arg2,...); 

分離圖層的原因基本上是鬆散地耦合應用程序。例如,如果您決定更改底層數據庫,則只需要更改數據訪問層,而不是業務層或表示層。
假設您想要將Web應用程序的UI /表示層更改爲Desktop應用程序,則只能在表示層中進行更改。業務層和數據訪問層將保持不變。如果您正在考慮將文本框控件傳遞到業務層,那麼您的應用程序將被耦合(UI/Presentatioin層將與業務層耦合)。
這是一篇解釋Three Tier Architecture的文章。

+0

@ Habib.OSU - 感謝您花時間解釋這一點。這非常有幫助。另外,感謝您的鏈接。我一定會讀它。 – 2012-04-16 17:28:38

+0

如果我不需要執行任何邏輯,我可以直接從UI向DAL傳遞信息,還是應該通過BAL?創建BAL類僅用於從UI傳遞數據似乎浪費資源。 – 2012-04-16 17:32:24

+1

@ProgrammingNewbie當然你可以做到這一點,但我已經看到很少的情況下,你不需要對數據執行任何業務規則。但是,如果你認爲甚至在以後你不需要做任何事情,那麼你就可以離開業務層。 – Habib 2012-04-16 17:35:38