您好,登錄后才能下訂單哦!
這篇文章給大家介紹ASP.NET 2.0中怎么給BLL類添加業(yè)務(wù)規(guī)則,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
ASP.NET 20.中,BLL類應(yīng)該保證始終都驗證應(yīng)用程序的業(yè)務(wù)規(guī)則。這些驗證可以直接的添加到應(yīng)用他們的方法中。
想象一下,我們的業(yè)務(wù)規(guī)則表明了如果一個產(chǎn)品是給定的供應(yīng)商的***產(chǎn)品,那么它就不能被標(biāo)記為“停用”。也就是說,如果產(chǎn)品X是我們從供應(yīng)商Y處購買的***一個產(chǎn)品,那么我們就不能將X標(biāo)記為停用;然而,如果供應(yīng)商Y提供給我們的一共有3樣產(chǎn)品,分別是A、B和C,那么我們可以將其中任何一個或者三個全部都標(biāo)記為“停用”。挺奇怪的業(yè)務(wù)規(guī)則,是吧?但是商業(yè)上的規(guī)則通常就是跟我們平常的感覺不太一樣。
要在UpdateProducts方法中應(yīng)用這個業(yè)務(wù)規(guī)則,那么我們就應(yīng)該先檢查Discontinued是否被設(shè)置為true。假如是這樣的話,那么我們應(yīng)該先調(diào)用GetProductsBySupplierID來看看我們從這個供應(yīng)商處一共購買了多少產(chǎn)品。如果我們僅僅從這個供應(yīng)商處購買了這一個產(chǎn)品,那么我們就拋出一個ApplicationException。
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]; // 業(yè)務(wù)規(guī)則檢查 – 不能停用某供應(yīng)商所提供的***一個產(chǎn)品 if (discontinued) { // 獲取我們從這個供應(yīng)商處獲得的所有產(chǎn)品 Northwind.ProductsDataTable productsBySupplier = Adapter.GetProductsBySupplierID(product.SupplierID); if (productsBySupplier.Count == 1) // 這是我們從這個供應(yīng)商處獲得的***一個產(chǎn)品 throw new ApplicationException("You cannot mark a product as discontinued if its the only product purchased 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; // 更新產(chǎn)品記錄 int rowsAffected = Adapter.Update(product); // 如果剛好更新了一條記錄,則返回true,否則返回false return rowsAffected == 1; }
在表示層中響應(yīng)驗證錯誤
當(dāng)我們從表示層中調(diào)用BLL類時,我們可以決定是否要處理某個可能會被拋出的異?;蛘咦屗苯訏伣oASP.NET(這樣將會引發(fā)HttpApplication的出錯事件)。在使用BLL類的時候,如果要以編程的方式處理一個異常,我們可以使用try...catch塊,就像下面的示例一樣:
ProductsBLL productLogic = new ProductsBLL(); // 更新ProductID為1的產(chǎn)品信息 try { // 這個操作將會失敗,因為我們試圖使用一個小于0的UnitPrice productLogic.UpdateProduct("Scott's Tea", 1, 1, null, -14m, 10, null, null, false, 1); } catch (ArgumentException ae) { Response.Write("There was a problem: " + ae.Message); }
我們將在后面的教程中看到,當(dāng)通過一個數(shù)據(jù)Web控件(data Web Control)來進行插入、修改或刪除操作數(shù)據(jù)時,處理從BLL中拋出的異??梢灾苯釉谝粋€Event Handler中進行,而不需要使用try…catch塊來包裝代碼。
總結(jié)
一個具有良好架構(gòu)的應(yīng)用程序都擁有清晰的層次結(jié)構(gòu),每一個層次都封裝了一個特定的角色。在本教程的***篇中,我們用類型化數(shù)據(jù)集創(chuàng)建了一個數(shù)據(jù)訪問層;這一篇中,我們又建立了一個業(yè)務(wù)邏輯層,它由App_Code中一系列的類構(gòu)成,并調(diào)用DAL中相應(yīng)的方法。BLL類為我們的應(yīng)用程序?qū)崿F(xiàn)了字段級和業(yè)務(wù)級的邏輯。除了創(chuàng)建一個獨立的BLL,就像我們在本節(jié)中所做的那樣,另外一個選擇是使用partial類來擴展TableAdapter中的方法。然而,使用這個技術(shù)并不能使我們可以重寫已經(jīng)存在的方法,也不能將我們的DAL和BLL分開得足夠清晰。
完成了DAL和BLL之后,我們就準(zhǔn)備開始處理表示層了。在下一個教程中,我們將簡單的介紹一些數(shù)據(jù)訪問的主題,并為整個教程定義一個一致的頁面呈現(xiàn)。
關(guān)于ASP.NET 2.0中怎么給BLL類添加業(yè)務(wù)規(guī)則就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。