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

來源:互聯網
上載者:User

在這一篇文章中,將實現一個NGuestBook的商務邏輯層。

      在實際應用中,商務邏輯層是至關重要的,他承載著整個系統最核心的部分,也是客戶最關注的部分。這一部分的實現,通常需要技術專家和領域專家通力合作。當然,在本文章{
tagshow(event)
}">系列的Demo中,由於商務邏輯的簡單性,這裡看的可能還不是很明顯。

      在本篇文章的商務邏輯層實現中,商務邏輯層主要承擔了以下職責:
      1.對不同資料訪問層的封裝。使得展示層可以不關心具體的資料訪問層。
      2.商務邏輯資料的填充與轉換。如管理員口令的加密。
      3.核心業務的實現。這裡很多商務邏輯只有一行代碼,即一個商務邏輯方法恰好對應一個資料存取方法,但是也有通過多個資料存取方法實現業務的。如AdminBLL中的ChangePassword方法就調用了AdminDAL的GetByID和Update兩個方法。另外,雖然許多方法只調用一個資料存取方法,但是從命名看也能看出兩者著眼點的不同。如AdminDAL中的GetByNameAndPassword,這個名字顯然是從資料庫的角度看問題——指按照指定的Name和Password兩個欄位的值取出相應資訊,至於這樣做的業務意義它不需要知道。而AdminBLL中,調用它的方法叫Login,這是從業務角度看問題——即這個方法是管理員登入。

      下面分步驟實現商務邏輯層:

1.建立工程
      在這個架構中,商務邏輯層是可以替換的。及商務邏輯層不是直接耦合於展示層,而是通過依賴注入{
tagshow(event)
}">機制實現。所以,我們這裡將這個商務邏輯層不直接命名為BLL,而是建立一個叫SimpleBLL的工程,放置我們這個商務邏輯層的相關代碼。

2.{
tagshow(event)
}">配置依賴注入
      商務邏輯層要通過反射工廠載入相應的資料訪問層,這樣就需要在Web.config中配置需要使用的資料訪問層。開啟Web.config,找到appSettings節點下的“DAL”項,將其中的value賦予我們要使用的資料訪問層工程名稱,例如:要使用NBearDAL,則這一項應該這樣寫:
      <add key="DAL" value="NBearDAL"/>

3.編寫散列加密{
tagshow(event)
}">工具類
      因為在商務邏輯層的多處需要用到散列加密,所以在Utility工程下寫一個輔助類Encryptor,完成這個工作,這個輔助類的具體代碼如下:

Encryptor.cs

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

複製代碼

4.實現商務邏輯層
      有了上述準備工作和以前實現的{
tagshow(event)
}">組件,商務邏輯層的實現非常直觀。這裡僅以管理員為例,展示如何?商務邏輯層。
      AdminBLL類建立在SimpleBLL工程下的AdminBLL.cs檔案中,實現了IAdminBLL{
tagshow(event)
}">介面,需具體代碼如下:

IAdminBLL

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

複製代碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.