前些天做的一个物联网架构三层扩展
這些天在做一個(gè)在線(xiàn)物聯(lián)的網(wǎng)站,同時(shí)也在往上查看了一些很好的網(wǎng)站架構(gòu),所以就根據(jù)自己的情況,指定了一種方案:
為了提交程序的:面向接口編程,高內(nèi)聚、低耦合及其對(duì)擴(kuò)充開(kāi)發(fā)、對(duì)修改封閉的原則,對(duì)這次方案做簡(jiǎn)單的總結(jié):
我的整體思想三層技術(shù):UI(表現(xiàn)層)、BLL(業(yè)務(wù)邏輯層)、DAL(數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層);
但是在我們的DAL層有很多種技術(shù),提供我們?nèi)ピL(fǎng)問(wèn)數(shù)據(jù)庫(kù),例如(ado.net、EF、NHibernate...),所以這樣我們就要讓DAL層對(duì)外要有一個(gè)統(tǒng)一的接口,使得內(nèi)部操作數(shù)據(jù)庫(kù)技術(shù)的變化不會(huì)涉及到BLL和UI層的代碼,同理BLL層也是一樣,他的修改不會(huì)牽連到UI層的展示,所以我把他們都分別分為兩部分一部分是接口、另一部分是具體的實(shí)現(xiàn),并且實(shí)現(xiàn)去繼承這些接口,對(duì)外界訪(fǎng)問(wèn)的就只是這些接口;并且每一層中都是針對(duì)多張表的增刪改查,因此抽象數(shù)來(lái)一張基類(lèi)的增刪改查的類(lèi),這樣子類(lèi)直接繼承就不用都有自己的實(shí)現(xiàn)了,
由于底層訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)我使用的是EF實(shí)體模型,所以為了控制EF上下文在線(xiàn)程內(nèi)唯一,使用了一個(gè)簡(jiǎn)單工廠(chǎng),來(lái)獲取數(shù)據(jù),而且為了能和EF那樣,只要拿到上下文對(duì)象,數(shù)據(jù)的所有操作方法及其數(shù)據(jù)對(duì)象也都在上下問(wèn)對(duì)象中了,這種設(shè)計(jì)理念,在DAL層抽象出來(lái)了一個(gè)針對(duì)BLL層的DBSession類(lèi),它里面封裝了所有表的操作數(shù)據(jù)庫(kù)對(duì)象,及其數(shù)據(jù)庫(kù)的上下文對(duì)象,所以只要拿到這個(gè)對(duì)象后就能拿到,所有的數(shù)據(jù)表操作對(duì)象,及其他的增刪改查方法,但是要確保BLL層拿到的這個(gè)對(duì)象的唯一性,我有創(chuàng)建了一個(gè)針對(duì)獲取DBSession對(duì)象的工廠(chǎng),由于EF對(duì)象對(duì)數(shù)據(jù)表的增刪改查有延遲性,并且每做一個(gè)增刪改查的方法都要像數(shù)據(jù)庫(kù)提交一次,所以我在這個(gè)類(lèi)中又抽象出了一個(gè)方法,只有BLL層調(diào)用這個(gè)方法,才會(huì)對(duì)做的操作進(jìn)行提交數(shù)據(jù)庫(kù)處理,仔細(xì)想一下,這個(gè)方法的確很有必要,因?yàn)?#xff0c;我們?cè)趯?duì)表進(jìn)行增刪改查的時(shí)候,可能一個(gè)方法中,不僅僅對(duì)一張表的曾或者刪或者查,這樣只要統(tǒng)一調(diào)用一次保存方法,讓這些sql語(yǔ)句放在一個(gè)隊(duì)列中統(tǒng)一進(jìn)行提交,統(tǒng)一訪(fǎng)問(wèn)一次數(shù)據(jù)庫(kù),這樣不僅提交了對(duì)數(shù)據(jù)庫(kù)的吞吐量,而且也減少了訪(fǎng)問(wèn)次數(shù),仔細(xì)像起來(lái)面向接口編程,著實(shí)是一項(xiàng)開(kāi)天辟地的新格局,有了他直接承載了我們的多態(tài),及其設(shè)計(jì)程序的原則也豐富多元化了
轉(zhuǎn)載于:https://www.cnblogs.com/One-dream-man/archive/2012/09/10/2679488.html
總結(jié)
以上是生活随笔為你收集整理的前些天做的一个物联网架构三层扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 我的WCF之旅(12):使用MSMQ进行
- 下一篇: 从第二份工作开始