多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > 由簡(jiǎn)單三層到工廠模式

由簡(jiǎn)單三層到工廠模式

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-04-11 09:14:44 閱讀次數(shù):3014次

以ASP.NET為例,簡(jiǎn)單3層就是 DAL, BLL,Model 3層構(gòu)成, DAL層處理數(shù)據(jù),負(fù)責(zé)與數(shù)據(jù)打交道,比如SQL語(yǔ)句的書寫等,DAL層處理完數(shù)據(jù)后的結(jié)果,交由BLL層,BLL層這時(shí)候?qū)?shù)據(jù)進(jìn)行邏輯整理。具體以下詳細(xì)說(shuō)明:

 

現(xiàn)有1個(gè)簡(jiǎn)單的需求,1個(gè)定單里可能包括幾個(gè)產(chǎn)品,這時(shí)候,我們1般這樣處理,把定單寫在主表,把具體的詳細(xì)商品寫在定單詳細(xì)表,詳細(xì)表中有1個(gè)主表的ID,用于關(guān)聯(lián)2表。當(dāng)用戶下單提交時(shí),處理以下:

 

兩個(gè)表設(shè)為 主表Orders, 副表 OrderItem

 

DAL層:寫SQL語(yǔ)句,分別寫兩個(gè)方法,1個(gè)是插入主表的方法,另外一個(gè)是插入副表的方法。

 

插入主表Orders

public long Add(ModelOrder model) { …… }

插入副表OrderItem,語(yǔ)句這里略掉,這里只說(shuō)明思路,不做真實(shí)的數(shù)據(jù)。

public long Add(ModelOrderItem model) { …… }

這兩個(gè)方法,首先履行第1個(gè)返回的ID,然后第2個(gè)方法要用到這個(gè)返回的ID,那末這個(gè)邏輯處理就在BLL層里來(lái)處理了,這樣寫:

//插入主表后返回的ID long id = DAL.Add(model); //如果履行成功,說(shuō)明ID>0 if(id>0) { DAL.Add(model); }

這個(gè)方法履行完,再返回到頁(yè)面層級(jí)結(jié)果。

 

注意:其實(shí)上面的業(yè)務(wù)層處理嚴(yán)格的說(shuō)寫的不正確,為何呢?假想我們插入主表成功了,但返回ID后,插入副表的時(shí)候,出錯(cuò)了,沒(méi)有插入,那末就會(huì)造成數(shù)據(jù)庫(kù)里只保存了定單信息,但沒(méi)有定單詳情信息。如何解決呢?自然我們會(huì)想到了事務(wù),1旦出現(xiàn)上述情況,使用事務(wù)時(shí),數(shù)據(jù)庫(kù)會(huì)回滾,就是第2步出錯(cuò)了,那末第1步也會(huì)撤銷。


using (SqlTransaction transaction = connection.BeginTransaction()){}

固然,這就個(gè)就要寫在DAL層里了,在DAL層里把各個(gè)的添加方法寫好了,然后在寫1個(gè)方法,這個(gè)方法就是把各個(gè)方法加到事務(wù)中去,如果有1條語(yǔ)句履行時(shí)出錯(cuò),則事務(wù)回滾,等于沒(méi)有操作。

 

這基本上是1個(gè)簡(jiǎn)單3層的形象的最簡(jiǎn)單的介紹,那末簡(jiǎn)單3層有時(shí)候不能滿足我們需要,比如說(shuō),你是1家軟件公司,那末你開(kāi)發(fā)了1個(gè)軟件,用的SQLServer,而恰好碰到1個(gè)客戶需要使用oracle,或是mysql,怎樣辦?固然,你也能夠改,但是改的東西多了,最最少全部數(shù)據(jù)層都要被你扒了1遍了,而有1種方法基本不用怎樣修改就能夠到達(dá)需求,那就是工廠模式。

 

簡(jiǎn)單介紹:使用工廠模式,面向接口的編程,把數(shù)據(jù)層和業(yè)務(wù)層使用接口來(lái)交接,面向接口,不面向具體的實(shí)現(xiàn),只要操作接口,實(shí)現(xiàn)變了也無(wú)所謂。


首先我們還是定義SQLServerDAL,BLL,Model3層,這次我們把DAL與BLL不直接進(jìn)行交互了,中間插入1個(gè)IDAL接口層,這個(gè)接口負(fù)責(zé)與BLL通訊,

BLL通過(guò)工廠反射等創(chuàng)建接口IDAL,


private readonly IOrderAction dal = DAOrder.CreateOrderAction();

SQLServerDAL只需實(shí)現(xiàn)IDAL便可,

public partial class Orders:IOrders

如果某1天你想換數(shù)據(jù)庫(kù),只需加相應(yīng)的接口實(shí)現(xiàn)便可。

比如添加1個(gè)OracelServerDAL等

或是你提早把全部的數(shù)據(jù)層寫好SQLServerDAL,OracelServerDAL,MySqlServerDAL……要哪一個(gè)用哪一個(gè)

固然,工廠模式帶來(lái)的好處也絕不單單是上述這點(diǎn)功勞。


 

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 中文字幕精品在线 | 超刺激福利丝袜网站 | 久久久久久国产精品免费 | 久久久久成人精品一区二区 | 欧美一级片网 | 黄色片网站在线播放 | 深爱激情五月婷婷 | 自拍偷拍亚洲第一页 | 亚洲天码中字 | 日本成人性视频 | 欧美激情一区二区亚洲专区 | 欧美在线看欧美视频免费网站 | 欧美区一区二区三 | 最近在线中文字幕免费版 | 在线一级毛片 | 国产精品久久久久久久久免费hd | 中文字幕第12页 | 曰本人做爰大片免费观看一 | 欧美成综合网网站 | 欧美性高清极品猛交 | 亚洲视频二区 | 特级做a爰片毛片免费看一区 | 中文字幕激情视频 | 成人αv在线视频高清 | 免费一级毛片清高播放 | 久久色亚洲 | 亚洲艹 | 亚洲 欧美 自拍 另类 欧美 | julia一区二区三区中文字幕 | 男女最猛烈xx00动态视频 | аbt天堂资源在线官网 | 国产精品久久久久毛片 | 亚洲黄色免费在线观看 | 午夜欧美精品久久久久久久久 | 亚洲视频 欧美视频 | freemovies性老女人 | 中文字幕精品在线视频 | 亚洲一区二区三区精品国产 | 国产三级中文字幕 | 真实的伦伦啪啪 | 亚洲精品免费网站 |