日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

.NET平臺依賴注入機(jī)制及IoC的設(shè)計與實現(xiàn)(2)_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:基于.NET平臺的分層架構(gòu)實戰(zhàn)(五)接口的設(shè)計與實現(xiàn)
接下來,將進(jìn)行接口的設(shè)計。這里包括數(shù)據(jù)訪問層接口和業(yè)務(wù)邏輯層接口。在分層架構(gòu)中,接口扮演著非常重要的角色,它不但直接決定了各層中的各個操作類需要實現(xiàn)何種操作,而且它明確了各個層次的

封裝依賴注入代碼
因為很多依賴注入代碼非常相似,為了減少重復(fù)性代碼,我們將可復(fù)用的代碼先封裝在一個類中。具體代碼如下(這個類放在Factory工程下):

using System;
using System.Configuration;
using System.Reflection;
using System.Web;
using System.Web.Caching;
using NGuestBook.Utility;

namespace NGuestBook.Factory
{
/**//// <summary>
/// 依賴注入提供者
/// 使用反射機(jī)制實現(xiàn)
/// </summary>
public sealed class DependencyInjector
{
/**//// <summary>
/// 取得數(shù)據(jù)訪問層對象
/// 首先檢查緩存中是否存在,如果不存在,則利用反射機(jī)制返回對象
/// </summary>
/// <param name="className">數(shù)據(jù)訪問類名稱</param>
/// <returns>數(shù)據(jù)訪問層對象</returns>
public static object GetDALObject(string className)
{
/**//// <summary>
/// 取得數(shù)據(jù)訪問層名稱,首先檢查緩存,不存在則到配置文件中讀取
/// 緩存依賴項為Web.Config文件
/// </summary>
object dal = CacheAccess.GetFromCache("DAL");
if (dal == null)
{
CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.Config"));
dal = ConfigurationManager.AppSettings["DAL"];
CacheAccess.SaveToCache("DAL", dal, fileDependency);
}

/**//// <summary>
/// 取得數(shù)據(jù)訪問層對象
/// </summary>
string dalName = (string)dal;
string fullClassName = dalName "." className;
object dalObject = CacheAccess.GetFromCache(className);
if (dalObject == null)
{
CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.Config"));
dalObject = Assembly.Load(dalName).CreateInstance(fullClassName);
CacheAccess.SaveToCache(className, dalObject, fileDependency);
}

return dalObject;
}

/**//// <summary>
/// 取得業(yè)務(wù)邏輯層對象
/// 首先檢查緩存中是否存在,如果不存在,則利用反射機(jī)制返回對象
/// </summary>
/// <param name="className">業(yè)務(wù)邏輯類名稱</param>
/// <returns>業(yè)務(wù)邏輯層對象</returns>
public static object GetBLLObject(string className)
{
/**//// <summary>
/// 取得業(yè)務(wù)邏輯層名稱,首先檢查緩存,不存在則到配置文件中讀取
/// 緩存依賴項為Web.Config文件
/// </summary>
object bll = CacheAccess.GetFromCache("BLL");
if (bll == null)
{
CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.Config"));
bll = ConfigurationManager.AppSettings["BLL"];
CacheAccess.SaveToCache("BLL", bll, fileDependency);
}

/**//// <summary>
/// 取得業(yè)務(wù)邏輯層對象
/// </summary>
string bllName = (string)bll;
string fullClassName = bllName "." className;
object bllObject = CacheAccess.GetFromCache(className);
if (bllObject == null)
{
CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.Config"));
bllObject = Assembly.Load(bllName).CreateInstance(fullClassName);
CacheAccess.SaveToCache(className, bllObject, fileDependency);
}

return bllObject;
}
}
}

實現(xiàn)工廠
下面使用兩個輔助類,實現(xiàn)數(shù)據(jù)訪問層工廠和業(yè)務(wù)邏輯層工廠。

using System;
using NGuestBook.IDAL;

namespace NGuestBook.Factory
{
/**//// <summary>
/// 數(shù)據(jù)訪問層工廠,用于獲取相應(yīng)的數(shù)據(jù)訪問層對象
/// 使用Abstract Factory設(shè)計模式 Facace設(shè)計模式 反射機(jī)制 緩存機(jī)制設(shè)計
/// </summary>
public sealed class DALFactory
{
/**//// <summary>
/// 獲取管理員數(shù)據(jù)訪問層對象
/// </summary>
/// <returns>管理員數(shù)據(jù)訪問層對象</returns>
public static IAdminDAL CreateAdminDAL()
{
return (IAdminDAL)DependencyInjector.GetDALObject("AdminDAL");
}
/**//// <summary>
/// 獲取留言數(shù)據(jù)訪問層對象
/// </summary>
/// <returns>留言數(shù)據(jù)訪問層對象</returns>
public static IMessageDAL CreateMessageDAL()
{
return (IMessageDAL)DependencyInjector.GetDALObject("MessageDAL");
}

/**//// <summary>
/// 獲取評論數(shù)據(jù)訪問層對象
/// </summary>
/// <returns>評論數(shù)據(jù)訪問層對象</returns>
public static ICommentDAL CreateCommentDAL()
{
return (ICommentDAL)DependencyInjector.GetDALObject("CommentDAL");
}
}
}

using System;
using NGuestBook.IBLL;

namespace NGuestBook.Factory
{
/**//// <summary>
/// 業(yè)務(wù)邏輯層工廠,用于獲取相應(yīng)的業(yè)務(wù)邏輯層對象
/// 使用Abstract Factory設(shè)計模式 Facace設(shè)計模式 反射機(jī)制 緩存機(jī)制設(shè)計
/// </summary>
public sealed class BLLFactory
{
/**//// <summary>
/// 獲取管理員業(yè)務(wù)邏輯層對象
/// </summary>
/// <returns>管理員業(yè)務(wù)邏輯層對象</returns>
public static IAdminBLL CreateAdminBLL()
{
return (IAdminBLL)DependencyInjector.GetBLLObject("AdminBLL");
}

/**//// <summary>
/// 獲取留言業(yè)務(wù)邏輯層對象
/// </summary>
/// <returns>留言業(yè)務(wù)邏輯層對象</returns>
public static IMessageBLL CreateMessageBLL()
{
return (IMessageBLL)DependencyInjector.GetBLLObject("MessageBLL");
}

/**//// <summary>
/// 獲取評論業(yè)務(wù)邏輯層對象
/// </summary>
/// <returns>評論業(yè)務(wù)邏輯層對象</returns>
public static ICommentBLL CreateCommentBLL()
{
return (ICommentBLL)DependencyInjector.GetBLLObject("CommentBLL");
}
}
}

分享:基于.NET平臺的分層架構(gòu)實戰(zhàn)(四)實體類的設(shè)計與實現(xiàn)
實體類是現(xiàn)實實體在計算機(jī)中的表示。它貫穿于整個架構(gòu),負(fù)擔(dān)著在各層次及模塊間傳遞數(shù)據(jù)的職責(zé)。一般來說,實體類可以分為“貧血實體類”和“充血實體類”,前者僅僅保存實

共2頁上一頁12下一頁
來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
相關(guān).Net教程