C#asp.net 三層架構(gòu)簡(jiǎn)單理解

??三層架構(gòu):指的是PL(present layer)層,BLL(business logical layer)層,DAL(data access layer)層,是一種總體設(shè)計(jì)的思想。

  • PL層(web層):是表現(xiàn)層,主要是用來展示數(shù)據(jù);
  • BLL層:是處理層,主要是用來處理數(shù)據(jù);
  • DAL層:主要是從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)的。
  • PL面向用戶,DAL面向數(shù)據(jù)庫(kù)。

??具體闡述:PL是web應(yīng)用程序,調(diào)用BLL的方法將數(shù)據(jù)傳給BLL或者從BLL中獲取處理好的數(shù)據(jù);BLL層是一個(gè)類庫(kù),調(diào)用DAL的方法獲取數(shù)據(jù)或者將數(shù)據(jù)處理結(jié)果給DAL。
實(shí)現(xiàn)方式:
1.新建-項(xiàng)目-空解決方案


2.右鍵空解決方案-添加新項(xiàng)-web應(yīng)用程序(PL層,當(dāng)然還要添加web窗體)

3.右鍵空解決方案-添加新項(xiàng)-類庫(kù)(BLL層)

4.右鍵空解決方案-添加新項(xiàng)-類庫(kù)(DAL層)

5.添加PL層的對(duì)BLL層的引用

6.添加BLL層對(duì)DAL層的引用

PL《——————BLL《——————DAL

7.注意類庫(kù)的修飾符是否為公共的


8.Default.aspx

<div>
         10+12=  
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />  
        10*12=<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><br />  
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />  
        <br />  
    </div>

9.Default.aspx.cs

  protected void Button1_Click(object sender, EventArgs e)
        {
            BLL.Calculate c = new BLL.Calculate();
            Label1.Text = "" + c.add(10, 12);
            Label2.Text = "" + c.mul(10, 12);  
        }

10.BLL下的Class1

namespace BLL
{
    public class Calculate
    {
        DAL.Class1 c = new DAL.Class1();
        public int add(int x, int y)
        {
            return c.getX() + c.getY();
        }
        public int mul(int x, int y)
        {
            return c.getX() * c.getY();
        }
    }  
}

12.DAL下的Class1

namespace DAL
{
    public class Class1
    {
        public int getX()
        { return 10; }
        public int getY()
        {
            return 12;
        }  
    }
}

結(jié)果

補(bǔ)充說明:
1.一般類庫(kù)的名字不是這樣命名的,這個(gè)只是一個(gè)簡(jiǎn)單例子,看著比較容易理解。一般是公司名+項(xiàng)目名稱+BLL(或DAL)。
2.三層架構(gòu)可以用動(dòng)軟代碼生成器生成。下載鏈接地址是:
http://www.onlinedown.net/soft/63546.htm

總結(jié):此實(shí)例先是在web中定義了界面,然后在后臺(tái)先是對(duì)BLL下的Calculate類實(shí)例化,再利用該類下的add方法;

BLL的add方法里又使用到了DAL下getX()和getY()方法;

也就是說,先在DAL里獲得數(shù)據(jù),并返回,由BLL獲取數(shù)據(jù)操作,并返回操作所得的結(jié)果,最后由PL層的后臺(tái)得到數(shù)據(jù),最后顯示再web上面
所以Label1.Text = " " + c.add(10,12);這里面的參數(shù)并沒有實(shí)際所用,只是為了調(diào)用方法而已。里面無論寫什么參數(shù),只要是兩個(gè)int型的,返回的結(jié)果是一樣的,在這只是展示,并沒有實(shí)際作用。

思考:明明在web界面的后臺(tái)程序可以直接處理,為什么要一層一層嵌套才在web層獲得數(shù)據(jù)呢?

優(yōu)缺點(diǎn):

優(yōu)點(diǎn):
  1、開發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的其中某一層;
  2、可以很容易的用新的實(shí)現(xiàn)來替換原有層次的實(shí)現(xiàn);
  3、可以降低層與層之間的依賴(高內(nèi)聚,低耦合);
  4、有利于標(biāo)準(zhǔn)化;
  5、利于各層邏輯的復(fù)用。
  
缺點(diǎn):
 1、降低了系統(tǒng)的性能。這是不言而喻的。如果不采用分層式結(jié)構(gòu),很多業(yè)務(wù)可以直接造訪數(shù)據(jù)庫(kù),以此獲取相應(yīng)的數(shù)據(jù),如今卻必須通過中間層來完成。
  2、有時(shí)會(huì)導(dǎo)致級(jí)聯(lián)的修改。這種修改尤其體現(xiàn)在自上而下的方向。如果在表示層中需要增加一個(gè)功能,為保證其設(shè)計(jì)符合分層式結(jié)構(gòu),可能需要在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層中都增加相應(yīng)的代碼。

網(wǎng)絡(luò)圖片

網(wǎng)絡(luò)圖片
網(wǎng)絡(luò)圖片
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容