程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 基於.NET平台的分層架構實戰(十)—業務邏輯層的實現

基於.NET平台的分層架構實戰(十)—業務邏輯層的實現

編輯:關於.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

1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace 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.HashPasswordForStoringInConfigF ile(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.HashPasswordForStoringInConfigF ile(text, "SHA1");
30    }
31  }
32}

4.實現業務邏輯層

有了上述准備工作和以前實現的組件, 業務邏輯層的實現非常直觀。這裡僅以管理員為例,展示如何實現業務邏輯層。

AdminBLL類建立在SimpleBLL工程下的AdminBLL.cs文件中,實現了 IAdminBLL接口,需具體代碼如下:

IAdminBLL

1using System;
2using System.Collections.Generic;
3using System.Text;
4using NGuestBook.Entity;
5using NGuestBook.Factory;
6using NGuestBook.IBLL;
7using NGuestBook.IDAL;
8using NGuestBook.Utility;
9
10namespace 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}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved