2012-08-02 102 views
0

我是3層體系結構的新手,因爲它由UI,BAL和DAL圖層組成。因此,我將所有數據庫代碼編寫在DAL中,並且我已經在BAL中聲明瞭變量,調用方法到UI中,但是這是正確的編碼方式??我的BAL在做什麼?業務層的主要目的是什麼?任何人都可以解釋我,謝謝。3層體系結構的BAL的目的

//In my BAL 



public class ProfileMasterBLL 
{ 
    public int UserId { get; set; } 
    public string FormFiledBy { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

} 

//在我的UI

ProfileMasterBLL pmBLL = new ProfileMasterBLL(); 
     pmBLL.FirstName = TextBox1.Text; 
     pmBLL.LastName = TextBox2.Text; 



//In my DAL 

的插入方法()

的話,我怎麼能叫ProfileMasterBLL.insert()?正如我在DAL中所寫的那樣。

+0

系統必須包含多少邏輯,它包含的位置自然取決於系統的功能。如果你能給我們一個你正在創建的東西的簡短描述,那麼評論一下會容易一點。這樣我們就可以在您感興趣的環境中提供更多的答案。 – Kjartan 2012-08-02 14:45:09

+0

您的編輯不是三層體系結構的示例。你有什麼似乎是ADT(抽象數據類型),你應該爲這些類型的包創建一個單獨的類。然後您可以使用該ADT在BL和DAL中傳遞。對於業務邏輯層來說,屬性應該不存在,最多隻能是調用DAL的簡單方法。 – JonH 2012-08-02 17:15:07

+0

當我在谷歌搜索時,我得到了不同類型的3層架構的結果,每個人都有自己的實現方式,所以我真的有點困惑。如果你發現任何好的例子請在這裏發佈:) – 2012-08-02 17:41:24

回答

1

業務層用作UI和DAL之間的中間人。 它用於您的應用程序將包含的任何或所有業務邏輯。例如,在會計應用程序中,您可能希望在將數據發送到數據庫層之前對數據執行一些計算和檢查,然後在業務層中執行此操作。在你的BL

//establish person object 
//pass in some salary with it to BL 
BL.CalcPay(somePerson, someSalary); 

然後:在您的DAL

//inside of BL 
//if its a CEO they are lucky, they get paid twice as much 
decimal toGive = someSalary; 
if(somePerson.IsCEO) 
toGive = toGive * 2; //CEO gets paid more :(

//now call DAL 
DAL.CalcPay(somePerson, toGive) 

然後:

你的UI可以做類似這樣

//inside of DAL 
//perform some update by calling for instance a sproc 
using(SQL....) 
{ 
} 

不是最好的例子,但它應該明白這一點,有很多時候你的BL沒有做任何事情,只是把方法調用交給DAL。僅僅因爲這是BL,並不意味着它必須進行某種與之相關的檢查。所以,你可能最終會做這樣的事情:

//inside UI 
string s = BL.GetSomeString(); 

//inside BL 
return DAL.GetSomeSomeString(); 

//inside DAL 
return someString; 
+0

是否適合直接從DAL調用一個方法到UI ??那麼什麼是業務邏輯意味着什麼? – 2012-08-02 14:33:51

+1

否您的用戶界面不應該知道數據訪問層,實際上您的用戶界面不應包含任何類型的sql引用,如sql數據讀取器。閱讀我所做的編輯,你的用戶界面向BL發送一些信息,BL可以對數據執行邏輯,然後只有在邏輯正常的情況下才會將它發送到DAL。 DAL對數據執行操作並將某種狀態或結果提交給BL。 BL從DAL獲取信息並將其傳送給用戶界面。 – JonH 2012-08-02 14:35:38

+0

//在我的BAL中 public class ProfileMasterBLL public int UserId {get;組; } public string FormFiledBy {get;組; } public string FirstName {get;組; } public string LastName {get;組; } } //在我的UI ProfileMasterBLL pmBLL = new ProfileMasterBLL(); pmBLL.FirstName = TextBox1.Text; pmBLL.LastName = TextBox2.Text; //在我的DAL 插入方法() 這是正確的做法嗎? – 2012-08-02 15:05:13

0

業務層的作用是執行業務規則,爲你的實體實例驗證,對實體的業務規則的執行,對實體業務功能的執行。

通常你有兩種選擇。

在存儲過程中

實現在業務層

+0

在存儲過程中實現業務邏輯是一種反模式,絕對應該避免。 – 2012-08-02 14:36:20

+0

不,我不認爲,因爲在功能上下文非常困難,不可能在你的上下文中加載所有實體,即使是懶惰加載 – 2012-08-02 14:38:28

+0

你不能告訴專家數據庫存儲過程是反模式 – 2012-08-02 14:40:12

0

業務層的存在是爲了提供把你的業務邏輯的地方的業務邏輯實現業務邏輯。數據訪問邏輯應該只對數據庫創建,檢索,更新和刪除(CRUD)操作。表示層應該只有確定用戶如何與系統交互的邏輯。例如,如果在用戶界面中單擊「添加用戶」,則可以調用業務層中的BAL.AddUser()方法,然後調用多個數據層方法(例如DAL.AddUser()來插入用戶,然後DAL.AddUserToGroup()將新用戶置於默認組中。

+0

這個例子可能不是最好的,因爲你的BOL實際上可以調用DAL.AddUser,並且你的DAL可以做一些事情來處理'IF EXISTS(SELECT * FROM MyTable WHERE Login = @Login)的效果。返回-1 ELSE BEGIN INSERT INTO Users。 ..RETURN @SCOPE_IDENTITY END'並處理檢查用戶是否存在。狀態以整數形式發回。該整數從DAL傳遞到BOL,BOL將其呈現回UI,然後UI可以發出消息。 – JonH 2012-08-02 14:37:38

+0

@rs_atl是的,但那裏我的BAL是做什麼的?從DAL直接調用UI到UI的方法是好的嗎?我有些困惑...... – 2012-08-02 14:38:20

+0

@Chandrasekhar - 不,你不需要從DAL調用UI,他們不關心彼此,從DAL調用UI是沒有意義的。 – JonH 2012-08-02 14:39:04