WEB三層結構的設計思路

2021-04-24 14:56:59 字數 4350 閱讀 5299

web三層結構的設計思路

1.dal層的設計:

1.1.強型別的datatable並不包括如何訪問對應底層的資料表的任何資訊,datatable的作用是在分層間傳輸資料。要獲取用來填充datatable的

資料 ,我們使用tableadapter類,它提供了資料訪問層的功能,對於tableadapter類中的自定義方法,我們使用部分類來儲存。

using system;

using system.data;

using northwindtableadapters;

public partial class northwind

public partial class suppliersrow

public northwind.productsdatatable getproducts()

productstableadapter productsadapter = new productstableadapter();

return productsadapter.getproductsbysupplierid(this.supplierid);

1.2.如果使用db直接模式,dataset設計器會根據select語句自動生成插入,更新,刪除方法,而且不會受select子句中的子查詢的影響。但如果

使用join語句的話,dataset設計器就不能自動生成插入,更新,以及刪除資料庫記錄的方法了,這時,必須手工設定insertcommand,

updatecommand和deletecommand屬性值.

select     productid, productname, supplierid, categoryid,

quantityperunit, unitprice, unitsinstock, unitsonorder, reorderlevel, discontinued,

(select categoryname from categories

where categories.categoryid = products.categoryid) as categoryname,

(select companyname from suppliers

where suppliers.supplierid = products.supplierid) as suppliername

from    products

2.bll層的設計:

2.1簡單的呼叫dal中的方法

using system;

using system.data;

using system.configuration;

using system.web;

using system.web.security;

using system.web.ui;

using system.web.ui.webcontrols;

using system.web.ui.webcontrols.webparts;

using system.web.ui.htmlcontrols;

using northwindtableadapters;

[system.componentmodel.dataobject]

public class productsbll

private productstableadapter _productsadapter = null;

protected productstableadapter adapter

get cannot be less than zero", e.column.columnname),

e.column.columnname);

2.3新增業務規則

public bool updateproduct(string productname, int? supplierid, int? categoryid, string quantityperunit,

decimal? unitprice, short? unitsinstock, short? unitsonorder, short? reorderlevel,

bool discontinued, int productid)

northwind.productsdatatable products = adapter.getproductbyproductid(productid);

if (products.count == 0)

// 沒有找到匹配項,返回false

return false;

northwind.productsrow product = products[0];

// 業務規則檢查 – 不能停用某**商所提供的唯一乙個產品

if (discontinued)

// 獲取我們從這個**商處獲得的所有產品

northwind.productsdatatable productsbysupplier = adapter.getproductsbysupplierid(product.supplierid);

if (productsbysupplier.count == 1)

// 這是我們從這個**商處獲得的唯一乙個產品

from a supplier");

product.productname = productname;

if (supplierid == null) product.setsupplieridnull(); else product.supplierid = supplierid.value;

if (categoryid == null) product.setcategoryidnull(); else product.categoryid = categoryid.value;

if (quantityperunit == null) product.setquantityperunitnull(); else product.quantityperunit = quantityperunit;

if (unitprice == null) product.setunitpricenull(); else product.unitprice = unitprice.value;

if (unitsinstock == null) product.setunitsinstocknull(); else product.unitsinstock = unitsinstock.value;

if (unitsonorder == null) product.setunitsonordernull(); else product.unitsonorder = unitsonorder.value;

if (reorderlevel == null) product.setreorderlevelnull(); else product.reorderlevel = reorderlevel.value;

product.discontinued = discontinued;

// 更新產品記錄

int rowsaffected = adapter.update(product);

// 如果剛好更新了一條記錄,則返回true,否則返回false

return rowsaffected == 1;

2.4在表示層中對異常的處理

那麼表示層如何捕捉到異常?一種是通過try...catch()的方法,另一種就是通過web控制項中的事件來捕捉異常。

在插入、更新或刪除操作的過程中,資料web控制項和objectdatasource控制項都包含了pre- 和post-級的事件,它們記錄著當前的操作。當使用一

個可編輯的gridview時,事件觸發順序如下:objectdatasource_updating-->gridview_rowupdating-->gridview_rowupdated--

>objectdatasource_updated

我們可以為這些發生在操作之前的事件建立事件處理程式,目的是自定義輸入引數;為發生在操作之後的事件建立事件處理,目的是檢測和相應操作的結果。post-level的事件處理程式通常用作偵測在操作過程中是否出現了乙個異常。當面對乙個異常時,這些post-level的事件處理程式可以隨意地處理該異常。

示例1:

productsbll productlogic = new productsbll();

// 更新productid為1的產品資訊

trycatch (argumentexception ae)

總之,每個工單由3部分組成(dal,bll,web),dal和bll都有相應有命名空間.

如工單mpr:則可以建乙個netsoft.mpr.dal和netsoft.mpr.bll,然後再做乙個web模板。這樣就可以實現三層結構,而且可以使**量較少。

三層結構及WEB

以前,大多是在弄c s模式的程式 以為b s模式的就是指 就沒學這方面東東,唉 當時知識面真的好窄.所以搞的也是二層結構的設計,到現在還沒怎麼弄過三層結構設計 好暈.3層應用程式的解決方案 即將應用程式劃分為3層 每一層都通過一些定義好的介面與其他各層通訊 這3層一般來講在物埋上和邏輯上都是可以相互...

三層 我眼中的三層結構

從行為型模式命令模式引發的對三層的思考。記得 大話設計模式 中對命令模式的講解。燒烤攤和燒烤店之間的區別。由於客戶和烤羊肉串老闆的 緊耦合 所以容易出錯,容易混亂,也容易挑剔。這其實就是 行為請求者 與 行為實現者 的緊耦合。對請求排隊或記錄請求日誌,以及支援可撤銷的操作等行為時,行為請求者 與 行...

Web 三層架構概述

web三層架構概述注 內聚 乙個模組內各個元素彼此結合的緊密程度 耦合 乙個軟體結構內不同模組之間互連程度的度量 2 業務邏輯層 bll 業務邏輯層在體系架構中的位置很關鍵,它處於資料訪問層與表示層中間,起到了資料交換中承上啟下的作用。由於層是一種弱耦合結構,層與層之間的依賴是向下的,底層對於上層而...