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

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

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

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

封裝依賴注入代碼
因?yàn)楹芏嘁蕾囎⑷氪a非常相似,為了減少重復(fù)性代碼,我們將可復(fù)用的代碼先封裝在一個(gè)類中。具體代碼如下(這個(gè)類放在Factory工程下):

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

namespace NGuestBook.Factory
{
/**//// <summary>
/// 依賴注入提供者
/// 使用反射機(jī)制實(shí)現(xiàn)
/// </summary>
public sealed class DependencyInjector
{
/**//// <summary>
/// 取得數(shù)據(jù)訪問層對(duì)象
/// 首先檢查緩存中是否存在,如果不存在,則利用反射機(jī)制返回對(duì)象
/// </summary>
/// <param name="className">數(shù)據(jù)訪問類名稱</param>
/// <returns>數(shù)據(jù)訪問層對(duì)象</returns>
public static object GetDALObject(string className)
{
/**//// <summary>
/// 取得數(shù)據(jù)訪問層名稱,首先檢查緩存,不存在則到配置文件中讀取
/// 緩存依賴項(xiàng)為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ù)訪問層對(duì)象
/// </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ù)邏輯層對(duì)象
/// 首先檢查緩存中是否存在,如果不存在,則利用反射機(jī)制返回對(duì)象
/// </summary>
/// <param name="className">業(yè)務(wù)邏輯類名稱</param>
/// <returns>業(yè)務(wù)邏輯層對(duì)象</returns>
public static object GetBLLObject(string className)
{
/**//// <summary>
/// 取得業(yè)務(wù)邏輯層名稱,首先檢查緩存,不存在則到配置文件中讀取
/// 緩存依賴項(xiàng)為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ù)邏輯層對(duì)象
/// </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;
}
}
}

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

using System;
using NGuestBook.IDAL;

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

/**//// <summary>
/// 獲取評(píng)論數(shù)據(jù)訪問層對(duì)象
/// </summary>
/// <returns>評(píng)論數(shù)據(jù)訪問層對(duì)象</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ù)邏輯層對(duì)象
/// 使用Abstract Factory設(shè)計(jì)模式 Facace設(shè)計(jì)模式 反射機(jī)制 緩存機(jī)制設(shè)計(jì)
/// </summary>
public sealed class BLLFactory
{
/**//// <summary>
/// 獲取管理員業(yè)務(wù)邏輯層對(duì)象
/// </summary>
/// <returns>管理員業(yè)務(wù)邏輯層對(duì)象</returns>
public static IAdminBLL CreateAdminBLL()
{
return (IAdminBLL)DependencyInjector.GetBLLObject("AdminBLL");
}

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

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

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

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