基于.NET平台的分层架构实战(十)——业务逻辑层的实现

在这一篇文章中,将实现一个NGuestBook的业务逻辑层。

在实际应用中,业务逻辑层是至关重要的,他承载着整个系统最核心的 部分,也是客户最关注的部分。这一部分的实现,通常需要技术专家和领域专家通力合作。当然,在本文章系列的Demo中,由于业务逻辑的简单性,这里看的可 能还不是很明显。

在本篇文章的业务逻辑层实现中,业务逻辑层主要承担了以下职责:

1.对不同数据访问层的封装。使得表示层可以不关心具体的数据访 问层。

2.业务逻辑数据的填充与转换。如管理员口令的加密。

3.核心业务的实现。这里很多业务逻辑只有一行代码,即一个业务 逻辑方法恰好对应一个数据访问方法,但是也有通过多个数据访问方法实现业务的。如AdminBLL中的ChangePassword方法就调用了 AdminDAL的GetByID和Update两个方法。另外,虽然许多方法只调用一个数据访问方法,但是从命名看也能看出两者着眼点的不同。如 AdminDAL中的GetByNameAndPassword,这个名字显然是从数据库的角度看问题——指按照指定的Name和Password两个字 段的值取出相应信息,至于这样做的业务意义它不需要知道。而AdminBLL中,调用它的方法叫Login,这是从业务角度看问题——即这个方法是管理员 登录。

下面分步骤实现业务逻辑层:

1.建立工程
在这个架构中,业务逻辑层是可以替换的。及业 务逻辑层不是直接耦合于表示层,而是通过依赖注入机制实现。所以,我们这里将这个业务逻辑层不直接命名为BLL,而是新建一个叫SimpleBLL的工 程,放置我们这个业务逻辑层的相关代码。

2.配置依赖注入
业务逻辑层要通过反射工厂加载相应 的数据访问层,这样就需要在Web.config中配置需要使用的数据访问层。打开Web.config,找到appSettings节点下的“DAL ”项,将其中的value赋予我们要使用的数据访问层工程名称,例 如:要使用NBearDAL,则这一项应该这样写:
<add key="DAL" value="NBearDAL"/>

3. 编写散列加密工具类
因为在业务逻辑层的多处需要用到散列加密,所以在Utility工程下写一个辅助类Encryptor ,完成这个工作,这个辅助类的具体代码如下:

Encryptor.cs:

 1 using  System;
 2
using  System.Collections.Generic;
 3
using  System.Text;
 
4
 5
namespace  NGuestBook.Utility
 
6 {
 
7      ///   <summary>
  8      ///  辅助类-用于对敏感数据进 行Hash散列,达到加密效果
  9      ///   </summary>
10      public   sealed   class  Encryptor
11     {
12          ///   <summary>
13          ///  使用MD5算法求Hash散列
14          ///   </summary>
15          ///   <param name="text"> 明文 </param>
16          ///   <returns> 散列值 </returns>
17          public   static   string  MD5Encrypt( string  text)
18         {
19              return  System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(text,  " MD5 " );
20         }
21
22          ///   <summary>
23          ///  使用SHA1算法求Hash散列
24          ///   </summary>
25          ///   <param name="text"> 明文 </param>
26          ///   <returns> 散列值 </returns>
27          public   static   string  SHA1Encrypt( string  text)
28         {
29              return  System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(text,  " SHA1 " );
30         }
31     }
32 }


4.实现业务逻辑层
有了上述准备工作和以前实现的组件,业务逻辑层的实现非常直观。这里仅以管 理员为例,展示如何实现业务逻辑层。
AdminBLL类建立在SimpleBLL工程下的AdminBLL.cs文件中,实现了 IAdminBLL接口,需具体代码如下:

AdminBLL.cs:

 1 using  System;
 2
using  System.Collections.Generic;
 3
using  System.Text;
 4
using  NGuestBook.Entity;
 5
using  NGuestBook.Factory;
 6
using  NGuestBook.IBLL;
 7
using  NGuestBook.IDAL;
 8
using  NGuestBook.Utility;
 
9
10
namespace  NGuestBook.IBLL
11 {
12      ///   <summary>
13      ///  业务逻辑层接口-管理员
14      ///   </summary>
15      public   class  AdminBLL : IAdminBLL
16     {
17          ///   <summary>
18          ///  添加管理员
19          ///   </summary>
20          ///   <param name="admin"> 新管理员实体类 </param>
21          ///   <returns> 是否成功 </returns>
22          public   bool  Add(AdminInfo admin)
23         {
24             admin.Password  =  Encryptor.MD5Encrypt(admin.Password);
25              return  DALFactory.CreateAdminDAL().Insert(admin);
26         }
27
28          ///   <summary>
29          ///  删除管理员
30          ///   </summary>
31          ///   <param name="id"> 欲删除的管理员的ID </param>
32          ///   <returns> 是否成功 </returns>
33          public   bool  Remove( int  id)
34         {
35              return  DALFactory.CreateAdminDAL().Delete(id);
36         }
37
38          ///   <summary>
39          ///  修改管理员密码
40          ///   </summary>
41          ///   <param name="id"> 欲修改密码的管理员的ID </param>
42          ///   <param name="password"> 新密码 </param>
43          ///   <returns> 是否成功 </returns>
44          public   bool  ChangePassword( int  id,  string  password)
45         {
46             password  =  Encryptor.MD5Encrypt(password);
47             AdminInfo admin  =  DALFactory.CreateAdminDAL().GetByID(id);
48             admin.Password  =  password;
49              return  DALFactory.CreateAdminDAL().Update(admin);
50         }
51
52          ///   <summary>
53          ///  管理员登录
54          ///   </summary>
55          ///   <param name="name"> 管理员登录名 </param>
56          ///   <param name="password"> 管理员密码 </param>
57          ///   <returns> 如果登录成功,则返回相应管理员的实体类,否则返回null </returns>
58          public  AdminInfo Login( string  name,  string  password)
59         {
60             password  =  Encryptor.MD5Encrypt(password);
61              return  DALFactory.CreateAdminDAL().GetByNameAndPassword(name, password);
62         }
63
64          ///   <summary>
65          ///  取得全部管理员信息
66          ///   </summary>
67          ///   <returns> 管理员实体类集合 </returns>
68          public  IList < AdminInfo >  GetAll()
69         {
70              return  DALFactory.CreateAdminDAL().GetAll();
71         }
72     }
73 }

 

作 者: T2噬菌体
出处: http://leoo2sk.cnblogs.com
本 文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值