成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET 2.0數(shù)據(jù)教程:給BLL類(lèi)添加業(yè)務(wù)規(guī)則

開(kāi)發(fā) 后端
本文主要介紹了asp.net 2.0數(shù)據(jù)操作中的業(yè)務(wù)邏輯層的第四步:給BLL類(lèi)添加業(yè)務(wù)規(guī)則。

除了字段級(jí)的驗(yàn)證,可能還有一些不能在單個(gè)列中表示的包含不同實(shí)體或概念的更高級(jí)的業(yè)務(wù)規(guī)則,比如:

·         如果一個(gè)產(chǎn)品被標(biāo)記為“停用”,那么它的單價(jià)就不能被修改

·         一個(gè)雇員的居住地必須與他(她)的主管的居住地相同

·         如果某個(gè)產(chǎn)品是某供應(yīng)商***提供的產(chǎn)品,那么這個(gè)產(chǎn)品就不能被標(biāo)記為“停用”

ASP.NET 20.中,BLL類(lèi)應(yīng)該保證始終都驗(yàn)證應(yīng)用程序的業(yè)務(wù)規(guī)則。這些驗(yàn)證可以直接的添加到應(yīng)用他們的方法中。

想象一下,我們的業(yè)務(wù)規(guī)則表明了如果一個(gè)產(chǎn)品是給定的供應(yīng)商的***產(chǎn)品,那么它就不能被標(biāo)記為“停用”。也就是說(shuō),如果產(chǎn)品X是我們從供應(yīng)商Y處購(gòu)買(mǎi)的***一個(gè)產(chǎn)品,那么我們就不能將X標(biāo)記為停用;然而,如果供應(yīng)商Y提供給我們的一共有3樣產(chǎn)品,分別是A、B和C,那么我們可以將其中任何一個(gè)或者三個(gè)全部都標(biāo)記為“停用”。挺奇怪的業(yè)務(wù)規(guī)則,是吧?但是商業(yè)上的規(guī)則通常就是跟我們平常的感覺(jué)不太一樣。

要在UpdateProducts方法中應(yīng)用這個(gè)業(yè)務(wù)規(guī)則,那么我們就應(yīng)該先檢查Discontinued是否被設(shè)置為true。假如是這樣的話(huà),那么我們應(yīng)該先調(diào)用GetProductsBySupplierID來(lái)看看我們從這個(gè)供應(yīng)商處一共購(gòu)買(mǎi)了多少產(chǎn)品。如果我們僅僅從這個(gè)供應(yīng)商處購(gòu)買(mǎi)了這一個(gè)產(chǎn)品,那么我們就拋出一個(gè)ApplicationException。

  1. public bool UpdateProduct(string productName, int? supplierID, int? categoryID, string quantityPerUnit,  
  2.                               decimal? unitPrice, short? unitsInStock, short? unitsOnOrder, short? reorderLevel,  
  3.                               bool discontinued, int productID)  
  4. {  
  5.         Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);  
  6.         if (products.Count == 0)  
  7.             // 沒(méi)有找到匹配項(xiàng),返回false  
  8.             return false;  
  9.  
  10.         Northwind.ProductsRow product = products[0];  
  11.  
  12.         // 業(yè)務(wù)規(guī)則檢查 – 不能停用某供應(yīng)商所提供的***一個(gè)產(chǎn)品  
  13.         if (discontinued)  
  14.         {  
  15.             // 獲取我們從這個(gè)供應(yīng)商處獲得的所有產(chǎn)品  
  16.             Northwind.ProductsDataTable productsBySupplier = Adapter.GetProductsBySupplierID(product.SupplierID);  
  17.  
  18.             if (productsBySupplier.Count == 1)  
  19.                 // 這是我們從這個(gè)供應(yīng)商處獲得的***一個(gè)產(chǎn)品  
  20.                 throw new ApplicationException("You cannot mark a product as discontinued if its the only product purchased from a supplier");  
  21.         }  
  22.  
  23.         product.ProductName = productName;  
  24.         if (supplierID == null) product.SetSupplierIDNull(); else product.SupplierID = supplierID.Value;  
  25.         if (categoryID == null) product.SetCategoryIDNull(); else product.CategoryID = categoryID.Value;  
  26.         if (quantityPerUnit == null) product.SetQuantityPerUnitNull(); else product.QuantityPerUnit = quantityPerUnit;  
  27.         if (unitPrice == null) product.SetUnitPriceNull(); else product.UnitPrice = unitPrice.Value;  
  28.         if (unitsInStock == null) product.SetUnitsInStockNull(); else product.UnitsInStock = unitsInStock.Value;  
  29.         if (unitsOnOrder == null) product.SetUnitsOnOrderNull(); else product.UnitsOnOrder = unitsOnOrder.Value;  
  30.         if (reorderLevel == null) product.SetReorderLevelNull(); else product.ReorderLevel = reorderLevel.Value;  
  31.         product.Discontinued = discontinued;  
  32.  
  33.         // 更新產(chǎn)品記錄  
  34.         int rowsAffected = Adapter.Update(product);  
  35.  
  36.         // 如果剛好更新了一條記錄,則返回true,否則返回false  
  37.         return rowsAffected == 1;  
  38. }  

在表示層中響應(yīng)驗(yàn)證錯(cuò)誤

當(dāng)我們從表示層中調(diào)用BLL類(lèi)時(shí),我們可以決定是否要處理某個(gè)可能會(huì)被拋出的異常或者讓它直接拋給ASP.NET(這樣將會(huì)引發(fā)HttpApplication的出錯(cuò)事件)。在使用BLL類(lèi)的時(shí)候,如果要以編程的方式處理一個(gè)異常,我們可以使用try...catch塊,就像下面的示例一樣:

  1. ProductsBLL productLogic = new ProductsBLL();  
  2.    
  3.  // 更新ProductID為1的產(chǎn)品信息  
  4.  try 
  5.  {  
  6.      // 這個(gè)操作將會(huì)失敗,因?yàn)槲覀冊(cè)噲D使用一個(gè)小于0的UnitPrice  
  7.      productLogic.UpdateProduct("Scott's Tea", 1, 1, null, -14m, 10, nullnullfalse, 1);  
  8.  }  
  9.  catch (ArgumentException ae)  
  10.  {  
  11.      Response.Write("There was a problem: " + ae.Message);  
  12.  }  

我們將在后面的教程中看到,當(dāng)通過(guò)一個(gè)數(shù)據(jù)Web控件(data Web Control)來(lái)進(jìn)行插入、修改或刪除操作數(shù)據(jù)時(shí),處理從BLL中拋出的異常可以直接在一個(gè)Event Handler中進(jìn)行,而不需要使用try…catch塊來(lái)包裝代碼。

總結(jié)

一個(gè)具有良好架構(gòu)的應(yīng)用程序都擁有清晰的層次結(jié)構(gòu),每一個(gè)層次都封裝了一個(gè)特定的角色。在本教程的***篇中,我們用類(lèi)型化數(shù)據(jù)集創(chuàng)建了一個(gè)數(shù)據(jù)訪(fǎng)問(wèn)層;這一篇中,我們又建立了一個(gè)業(yè)務(wù)邏輯層,它由App_Code中一系列的類(lèi)構(gòu)成,并調(diào)用DAL中相應(yīng)的方法。BLL類(lèi)為我們的應(yīng)用程序?qū)崿F(xiàn)了字段級(jí)和業(yè)務(wù)級(jí)的邏輯。除了創(chuàng)建一個(gè)獨(dú)立的BLL,就像我們?cè)诒竟?jié)中所做的那樣,另外一個(gè)選擇是使用partial類(lèi)來(lái)擴(kuò)展TableAdapter中的方法。然而,使用這個(gè)技術(shù)并不能使我們可以重寫(xiě)已經(jīng)存在的方法,也不能將我們的DAL和BLL分開(kāi)得足夠清晰。

完成了DAL和BLL之后,我們就準(zhǔn)備開(kāi)始處理表示層了。在下一個(gè)教程中,我們將簡(jiǎn)單的介紹一些數(shù)據(jù)訪(fǎng)問(wèn)的主題,并為整個(gè)教程定義一個(gè)一致的頁(yè)面呈現(xiàn)。

【編輯推薦】

  1. 如何在IIS6.0中部署asp.net mvc程序
  2. 用Winform傻瓜式搭建asp.net mvc框架
  3. ASP.NET Session失效的編程思路
  4. ASP.NET Session 狀態(tài)的存儲(chǔ)
  5. 了解ASP.NET Web應(yīng)用程序模型

責(zé)任編輯:book05 來(lái)源: 博客園
相關(guān)推薦

2009-07-24 12:41:21

BLL類(lèi)

2009-07-24 13:07:59

BLL類(lèi)

2009-07-24 16:55:53

添加aspx頁(yè)面

2009-07-27 09:35:57

業(yè)務(wù)邏輯層

2009-07-24 13:08:52

DataRowASP.NET 2.0

2009-07-24 14:23:16

定制編碼DAL

2009-07-27 03:21:00

breadcrumb導(dǎo)

2009-07-24 17:08:31

添加站點(diǎn)地圖asp.net

2009-07-27 09:28:55

TableAdapte

2009-07-27 03:23:00

Default.asp

2009-07-24 13:45:28

添加參數(shù)化

2009-07-27 08:51:24

ObjectDataS

2009-07-24 17:15:52

SiteMapData

2009-07-27 16:09:05

GridView顯示數(shù)

2009-07-24 16:37:04

創(chuàng)建母版頁(yè)asp.net 2.0

2009-07-27 09:01:44

ObjectDataS

2009-07-27 16:22:54

GridView選擇行

2009-07-24 13:25:43

創(chuàng)建數(shù)據(jù)訪(fǎng)問(wèn)層

2010-06-25 08:51:46

ASP.NET MVC

2009-07-27 09:39:04

SelectMetho
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕第十一页 | 人人九九精 | 日本羞羞影院 | 最新中文字幕 | 黄色网址大全在线观看 | 欧美亚洲视频在线观看 | 91免费在线看 | 日韩成人精品在线观看 | av黄色在线 | 国产一区www| 国产伦精品一区二区三区在线 | 国产精品极品美女在线观看免费 | 91五月婷蜜桃综合 | 亚洲精品国产一区 | 久久综合888 | 中文字幕影院 | 国产精品欧美大片 | 一区二区久久 | 欧美freesex黑人又粗又大 | 黑人巨大精品欧美一区二区免费 | 国产真实乱对白精彩久久小说 | 在线成人免费视频 | 成人免费视频网站在线看 | 91免费小视频 | 91传媒在线观看 | 日本三级网| 99视频| 四虎影院新网址 | 国产精品欧美一区二区三区不卡 | 国产日韩欧美精品一区二区三区 | 狠狠操av | 亚洲三区在线观看 | 先锋资源网 | 国产成人精品久久二区二区91 | 久久毛片| 国产一区二区三区四区三区四 | 久久久精选 | 国产高清在线观看 | 国产亚洲一区二区精品 | 精品久久久久久久久久久久久久久久久 | 国产精品久久久久久久久免费 |