• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 在ASP.NET 2.0中操作数据之二:创建一个业务逻辑层

在ASP.NET 2.0中操作数据之二:创建一个业务逻辑层

作者:heker2007 字体:[增加 减小] 来源:互联网 时间:2017-05-11

heker2007通过本文主要向大家介绍了asp.net,asp net培训,asp和asp.net的区别,零基础学asp.net,c#和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

导言

  本教程的第一节所描述的数据访问层(Data Access Layer,以下简称为DAL)已经清晰地将表示逻辑与数据访问逻辑区分开了。不过,即使DAL将数据访问的细节从表示层中分离出来了,可它却不能处理任何的业务规则。比如说,我们可能不希望产品表中那些被标记为“停用”的产品的“分类编号”或“供应商编号”被更新;我们还可能需要应用一些资历规则,比如说我们都不希望被比自己的资历还要浅的人管理。另外一个比较常见的情况就是授权,比如说只有那些具有特殊权限的用户可以删除产品或是更改单价。

  我们其实可以将业务逻辑层(Business Logic Layer,以下简称BLL)看作是在数据访问层和表示层之间进行数据交换的桥梁,在这个章节中,我们将讨论一下如何将这些业务规则集成到一个BLL中。需要说明的是,在一个实际的应用程序中,BLL都是以类库(Class Library)的形式来实现的,不过为了简化工程的结构,在本教程中我们将BLL实现为App_Code文件夹中的一系列的类。图一向我们展示了表示层、BLL以及DAL三者之间的结构关系。

BLL将表示层与DAL隔开了,并且加入了业务规则

图一:BLL将表示层与DAL隔开了,并且加入了业务规则

第一步:创建BLL类

  我们的BLL由4个类组成,每一个BLL类都对应DAL中的一个TableAdapter,它们都从各自的TableAdapter中得到读取、插入、修改以及删除等方法以应用合适的业务规则。

  为了更加清晰的区分DAL和BLL的类,我们在App_Code文件夹中建立两个子文件夹,分别命名为DAL和BLL。你仅仅需要在解决方案浏览器(Solution Explorer)中右键点击App_Code文件夹,并选择新建文件夹(New Folder),就可以创建新的子文件夹了。建好了这两个文件夹之后,把第一节中所创建的类型化数据集(Typed DataSet)移到DAL文件夹中。

  然后,在BLL文件夹中创建4个类文件。同样,你仅仅需要在解决方案浏览器(Solution Explorer)中右键点击BLL文件夹,并选择新建项目(New Item),然后在弹出的对话框中选择类模板(Class template)就可以创建新的类文件了。将这四个文件分别命名为ProductsBLL、CategoriesBLL、SuppliersBLL以及EmployeesBLL。

在BLL文件夹中添加4个新的类

图二:在BLL文件夹中添加4个新的类

  接下来,让我们来给这些新建的类加上一些方法,简单的将第一节中的TableAdapter中的那些方法包装起来就行了。现在,这些方法将只能直接使用DAL中的那些方法,我们等会再来给他们加上一些业务逻辑。

注意:如果你使用的是Visual Studio 标准版或以上版本(也就是说,你不是用的Visual Web Developer),那么你还可以使用
在ProductsBLL类中,我们一共需要为其添加7个方法:
GetProducts() – 返回所有的产品
GetProductByProductID(productID) – 返回指定ProductID的产品
GetProductsByCategoryID(categoryID) –返回指定分类的产品
GetProductsBySupplier(supplierID) –返回指定供应商的产品
AddProduct(productName, supplierID, categoryID, quantityPerUnit, unitPrice, unitsInStock, unitsOnOrder, reorderLevel, discontinued) – 向数据库中添加一条产品信息,并返回新添加的产品的ProductID
UpdateProduct(productName, supplierID, categoryID, quantityPerUnit, unitPrice, unitsInStock, unitsOnOrder, reorderLevel, discontinued, productID) – 更新一个数据库中已经存在的产品,如果刚好更新了一条记录,则返回true,否则返回false
DeleteProduct(productID) – 删除指定ProductID的产品

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 {
  if (_productsAdapter == null)
  _productsAdapter = new ProductsTableAdapter();

  return _productsAdapter; 
 }
 }


 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
 public Northwind.ProductsDataTable GetProducts()
 { 
 return Adapter.GetProducts();
 }

 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
 public Northwind.ProductsDataTable GetProductByProductID(int productID)
 {
 return Adapter.GetProductByProductID(productID);
 }

 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
 public Northwind.ProductsDataTable GetProductsByCategoryID(int categoryID)
 {
 return Adapter.GetProductsByCategoryID(categoryID);
 }

 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
 public Northwind.ProductsDataTable GetProductsBySupplierID(int supplierID)
 {
 return Adapter.GetProductsBySupplierID(supplierID);
 }
 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]
 public bool AddProduct(string productName, int? supplierID, int? categoryID, string quantityPerUnit, 
    decimal? unitPrice, short? unitsInStock, short? unitsOnOrder, short? reorderLevel, 
    bool discontinued)
 {
 // 新建一个ProductRow实例
 Northwind.ProductsDataTable products = new Northwind.ProductsDataTable();
 Northwind.ProductsRow product = products.NewProductsRow();

 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;

 // 添加新产品
 products.AddProductsRow(product);
 int rowsAffected = Adapter.Update(products);

 // 如果刚好新增了一条记录,则返回true,否则返回false
 return rowsAffected == 1;
 }

 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]
 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];

 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;
 }

 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, 



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.net SignalR 应用并实现群聊功能 开源代码
  • asp.net动态更新
  • asp.net利用母版制作页脚效果
  • Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决
  • 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具(推荐)
  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
  • ASP.NET Core发送邮件的方法
  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)
  • ASP.NET MVC从视图传参到控制器的几种形式
  • Asp.net core WebApi 使用Swagger生成帮助页实例

相关文章

  • 2017-05-11Asp.Net中的数据源概述与配置及实例代码
  • 2017-05-11asp.net 读取文本文件并插入数据库的实现代码
  • 2017-05-11实现Asp与Asp.Net共享Session的方法
  • 2017-05-11Global.asax的Application_Error实现错误记录/错误日志的代码
  • 2017-05-11模拟QQ心情图片上传预览示例
  • 2017-05-11asp.net gridview分页:第一页 下一页 1 2 3 4 上一页 最末页
  • 2017-05-11ASP.NET图片处理三类经典问题
  • 2017-05-11asp.net下日期加减的方法
  • 2017-05-11asp.net TreeView与XML三步生成列表树
  • 2017-05-11asp.net中GridView控件遍历的小例子

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在程序中使用Cookie集合(定义/新建/删除)及案例讲解
    • c#中过滤html的正则表达式
    • 在ASP.NET 2.0中操作数据之四十二:DataList和Repeater数据排序(一)
    • ASP.NET实现学生管理系统
    • MongDB.Net工具库MongoRepository使用方法详解
    • ASP.NET下使用xml反序列化、缓存依赖实现个性化配置文件的实时生效
    • asp.net中js和jquery调用ashx的不同方法分享
    • ASP.NET 根据汉字获取汉字拼音的首字母(含多音字)
    • asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
    • asp.net 去除viewstate第1/2页

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有