|
上一篇文章講到把實(shí)體類中需要實(shí)現(xiàn)延遲加載的屬性聲明為virtual,然后繼承實(shí)體類做一個(gè)子類,在子類里面實(shí)現(xiàn)該屬性,配合使用委托來實(shí)現(xiàn)比較完美的延遲加載(原本的模型層依舊保持在最底層用于貫穿三層結(jié)構(gòu),同時(shí)又可以實(shí)現(xiàn)在實(shí)體類的屬性里面訪問到比他高層的數(shù)據(jù)訪問層)。文章的最后依舊出現(xiàn)杯具,原因是在對(duì)模型的屬性實(shí)現(xiàn)延遲加載之前,這個(gè)屬性可能由于我們業(yè)務(wù)的需要,它并不單單是作為一個(gè)存儲(chǔ)和讀取的功能使用,而是在其get或者set的訪問器中都包含這或許復(fù)雜或許簡單的邏輯代碼。
舉例:考慮一下這個(gè)情景,我們有一個(gè)叫做任務(wù)單的實(shí)體類,其中有兩個(gè)屬性,一個(gè)叫做任務(wù)名,一個(gè)叫做發(fā)布時(shí)間,現(xiàn)在有這樣的業(yè)務(wù)規(guī)定,任務(wù)名稱可以為空,但如果任務(wù)名稱為空的話我們要讀取發(fā)布時(shí)間生成一個(gè)任務(wù)名來代替掉這個(gè)空值(例如叫做Issue20110120191345),當(dāng)然這個(gè)例子有點(diǎn)牽強(qiáng),主要是我想不出什么很具體的實(shí)例,但是在實(shí)際開發(fā)中這種情況肯定是有的并且其中的邏輯代碼有可能復(fù)雜到你難以想象。
沿用前面兩篇文章的例子,我模擬了這一現(xiàn)象,對(duì)文章實(shí)體類做了點(diǎn)修改,增加了一個(gè)名為GetCategoryRecord的字符串型屬性,它的作用基本上可以從字面上看出來,叫做Category屬性get訪問器調(diào)用記錄。于是文章類(基類)修改如下:
c#代碼
namespace Model
{
// 文章實(shí)體類
public class Article
{
public int ArticleID { get; set; }
public string Title { get; set; }
public string Cotnent{ get; set; }
public DateTime CreateTime { get; set; }
public int CategoryID { get; set; }
/// <summary>
/// 所屬分類
/// </summary>
protected Model.ArticleCategory _category;
/// <summary>
/// 所屬分類
/// </summary>
public virtual Model.ArticleCategory Category
{
get
{
GetCategoryRecord += "獲取分類;";
return _category;
}
}
/// <summary>
/// Category屬性get訪問器調(diào)用記錄
/// </summary>
public string GetCategoryRecord { get; set; }
}
}
NET技術(shù):淺談C#中的延遲加載(3)——還原模型的業(yè)務(wù)規(guī)則,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。