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 業務邏輯層在體系架構中的位置很關鍵,它處於資料訪問層與表示層中間,起到了資料交換中承上啟下的作用。由於層是一種弱耦合結構,層與層之間的依賴是向下的,底層對於上層而...