1.2 架構(gòu)的結(jié)構(gòu)和視圖

架構(gòu)的結(jié)構(gòu)和視角

回顧在上一小節(jié)中有介紹公给,軟件系統(tǒng)其實(shí)就是一系列結(jié)構(gòu)的集合,但是蜘渣,尤其是現(xiàn)代的系統(tǒng)通常都是由許多結(jié)構(gòu)組成的淌铐,從一開(kāi)始就想掌握一個(gè)系統(tǒng)的全部細(xì)節(jié)是很復(fù)雜的一件事情,這時(shí)候就需要從不同的視角(view)來(lái)剖析蔫缸,達(dá)到簡(jiǎn)化問(wèn)題的目的腿准。

結(jié)構(gòu)和視圖

  • 視圖(view)是對(duì)結(jié)構(gòu)(structure)中具有代表意義的部分元素和關(guān)系進(jìn)行抽取,也可以說(shuō)拾碌,視圖是對(duì)結(jié)構(gòu)的精簡(jiǎn)吐葱。
  • 通常,架構(gòu)師設(shè)計(jì)結(jié)構(gòu)校翔,但是真正記錄在文檔里的是這個(gè)結(jié)構(gòu)的精簡(jiǎn)版——視圖弟跑。

三種結(jié)構(gòu)

上一節(jié)大概說(shuō)過(guò),組成架構(gòu)的結(jié)構(gòu)類型大概有三種:模塊結(jié)構(gòu)展融,組件-連接件結(jié)構(gòu)窖认,分配結(jié)構(gòu)豫柬。

  • 模塊結(jié)構(gòu)

    • 模塊結(jié)構(gòu)更多的是對(duì)系統(tǒng)靜態(tài)的劃分,每一個(gè)模塊都有自己特定的功能扑浸,一般不會(huì)去考慮在執(zhí)行過(guò)程中那些交互式響應(yīng)烧给。
    • 模塊視圖回答了以下問(wèn)題
      • 給每一個(gè)模塊分配的最主要的功能是什么?
      • 一個(gè)模塊可以使用哪些該模塊之外的元素喝噪?
      • 實(shí)際會(huì)使用或者依賴哪些其它的軟件?
      • 模塊之間的關(guān)系础嫡,泛化?繼承酝惧?
      • 當(dāng)分配給模塊的功能發(fā)生改變時(shí)會(huì)對(duì)整個(gè)系統(tǒng)產(chǎn)生哪些影響榴鼎?-作為擴(kuò)展
  • 組件-連接件結(jié)構(gòu)

    • 與模塊結(jié)構(gòu)相反,組件-連接件結(jié)構(gòu)更多的是對(duì)系統(tǒng)運(yùn)行過(guò)程中的劃分晚唇,組件(component)可能是服務(wù)器巫财,客戶端等,連接件(connector)作為組件間的連接機(jī)制可能是回調(diào)函數(shù)哩陕,異步處理等等平项。
    • 組件-連接件視圖可以幫助我們回答以下幾個(gè)問(wèn)題
      • 在運(yùn)行過(guò)程中的主要的組件是什么,以及它們之間是怎樣交互的?
      • 共享數(shù)據(jù)的存儲(chǔ)問(wèn)題
      • 系統(tǒng)中的哪些部分是冗余的?
      • 在系統(tǒng)中數(shù)據(jù)是怎樣處理的悍及?
      • 系統(tǒng)中的哪些部分是可以并行執(zhí)行的闽瓢?
      • 系統(tǒng)的架構(gòu)能否在執(zhí)行過(guò)程中進(jìn)行改變,如果可以心赶,具體怎么實(shí)現(xiàn)扣讼?
      • 系統(tǒng)運(yùn)行中的屬性,比如性能缨叫,安全椭符,可執(zhí)行性等等-作為擴(kuò)展
  • 分配結(jié)構(gòu)

    • 就像前面說(shuō)的,軟件系統(tǒng)其實(shí)是有結(jié)構(gòu)的弯汰,但是對(duì)于底層的硬件艰山,比如CPU,文件系統(tǒng)咏闪,網(wǎng)絡(luò)等等這些是沒(méi)有結(jié)構(gòu)的曙搬,分配結(jié)構(gòu)主要就是把有結(jié)構(gòu)的軟件元素映射到外部環(huán)境中。
    • 分配視圖幫助我們回答以下問(wèn)題:
      • 軟件元素主要運(yùn)行在什么處理器上鸽嫂?
      • 元素在運(yùn)行構(gòu)建和測(cè)試過(guò)程中存儲(chǔ)在哪個(gè)目錄的哪個(gè)文件里纵装?
      • 軟件元素和開(kāi)發(fā)團(tuán)隊(duì)之間的關(guān)系

結(jié)構(gòu)作為切入點(diǎn)

每一個(gè)結(jié)構(gòu)都可以推出一些相關(guān)的質(zhì)量屬性,比如:

  • 模塊的使用結(jié)構(gòu)据某,反映了模塊之間的相互依賴調(diào)用橡娄,該結(jié)構(gòu)對(duì)系統(tǒng)的可擴(kuò)展性有很大的影響。
  • 并發(fā)結(jié)構(gòu)癣籽,反映了系統(tǒng)內(nèi)部的可并發(fā)性挽唉,該結(jié)構(gòu)對(duì)系統(tǒng)是否會(huì)因?yàn)橘Y源的占有進(jìn)入死鎖狀態(tài)或者出現(xiàn)性能上的瓶頸有很大影響滤祖。
  • 部署結(jié)構(gòu),對(duì)最終的系統(tǒng)的性能瓶籽,可用性和安全性有很大影響匠童。

每一個(gè)結(jié)構(gòu)都給架構(gòu)提供了一個(gè)不同的設(shè)計(jì)切入點(diǎn),所以合理的設(shè)計(jì)結(jié)構(gòu)可以讓系統(tǒng)擁有相應(yīng)的好的屬性塑顺。

一些有用的模塊結(jié)構(gòu)

  • 分解結(jié)構(gòu)(Decomposition structure)
    • 模塊之間是' is-a-submodule-of '的關(guān)系汤求,也就是模塊一直被分解直到最容易被理解為止,這些結(jié)構(gòu)中的模塊在開(kāi)始設(shè)計(jì)的時(shí)候是相同的严拒,隨著架構(gòu)師列舉出軟件應(yīng)該實(shí)現(xiàn)的功能扬绪,就會(huì)把這些功能分配給不同的模塊來(lái)滿足后序的設(shè)計(jì)和最終的實(shí)現(xiàn)。模塊會(huì)有相應(yīng)的產(chǎn)出裤唠,如結(jié)構(gòu)挤牛,代碼,測(cè)試計(jì)劃等等巧骚。結(jié)構(gòu)模型通過(guò)把可能出現(xiàn)的改變局部話來(lái)保證了系統(tǒng)的可修改性赊颠,變更只會(huì)在一小部分的模型中出現(xiàn)格二。這個(gè)結(jié)構(gòu)通常被用于開(kāi)發(fā)系統(tǒng)的基礎(chǔ)部分劈彪,包括文檔的架構(gòu),項(xiàng)目的集成和測(cè)試方案顶猜。分解結(jié)構(gòu)中繼續(xù)細(xì)化的單元被稱為"片段"或者"子系統(tǒng)"沧奴。
  • 使用結(jié)構(gòu)(use structure)
    • 在這個(gè)重要但是經(jīng)常被忽視的結(jié)構(gòu)中,單元同樣表示模塊或者是類长窄,單元之間用通過(guò)使用關(guān)系連接滔吠,使用關(guān)系是對(duì)依賴關(guān)系的一種特化。一個(gè)軟件單元需要調(diào)用另一個(gè)軟件單元的某一個(gè)函數(shù)挠日,來(lái)達(dá)到自己的功能目標(biāo)疮绷。使用結(jié)構(gòu)由于可以使系統(tǒng)被擴(kuò)展和添加功能或者提取系統(tǒng)有用的核心功能,通常被用于那些工程系統(tǒng)嚣潜。
  • 層結(jié)構(gòu)(layer structure)
    • 在這個(gè)結(jié)構(gòu)中冬骚,模塊被稱為層,一個(gè)層可以被視為一個(gè)通過(guò)一個(gè)接口提供的一系列緊密結(jié)合的服務(wù)的虛擬機(jī)懂算。層與層之間的調(diào)用是有嚴(yán)格的規(guī)定的只冻,一個(gè)層只允許使用和它鄰接且在它下面的那個(gè)層。層結(jié)構(gòu)可以增加系統(tǒng)的可移植性和跨平臺(tái)的能力计技。
  • 類/泛化結(jié)構(gòu)(Class/generalization structure)
    • 在這個(gè)結(jié)構(gòu)中的模塊單元被稱為是類喜德,模塊之間的關(guān)系可以是繼承或者實(shí)例化。這個(gè)視圖產(chǎn)生一系列具有相近行為或者能力和參數(shù)的不同的單元垮媒,類結(jié)構(gòu)允許一個(gè)單元去重用另一單元或者在原來(lái)單元的基礎(chǔ)上增加功能舍悯,如果存在關(guān)于這個(gè)項(xiàng)目的某個(gè)文檔是按照面向?qū)ο蠓治龊驮O(shè)計(jì)的航棱,那么大多數(shù)都是類結(jié)構(gòu)。
  • 數(shù)據(jù)結(jié)構(gòu)
    • 數(shù)據(jù)模型用術(shù)語(yǔ)數(shù)據(jù)實(shí)體和它們之間的關(guān)系描述了靜態(tài)的信息結(jié)構(gòu)萌衬,比如丧诺,有些關(guān)系可能會(huì)強(qiáng)制規(guī)定一個(gè)客戶必須擁有一個(gè)以上的賬戶等等。

一些有用的C&C結(jié)構(gòu)

組件-連接件結(jié)構(gòu)反映了系統(tǒng)的實(shí)時(shí)視圖奄薇,在這些結(jié)構(gòu)中驳阎,上述的模塊都被編譯為可執(zhí)行的形式,所有的組件-連接件結(jié)構(gòu)和基于模塊的結(jié)構(gòu)是正交關(guān)系并用于處理正在運(yùn)行系統(tǒng)的動(dòng)態(tài)層面馁蒂。組件-連接件間的關(guān)系顯示了組件和連接件是如何切合在一起的呵晚,這個(gè)關(guān)系被稱為附件(attachment),連接件可以只是最普通的結(jié)構(gòu)比如'調(diào)用'沫屡,有用的C&C結(jié)構(gòu)包括以下:

  • 服務(wù)結(jié)構(gòu)(Service structure)
    • 結(jié)構(gòu)中的單元被稱為是服務(wù)饵隙,這些服務(wù)通過(guò)服務(wù)協(xié)的機(jī)制比如SOAP進(jìn)行交互操作。服務(wù)結(jié)構(gòu)是一種很重要的結(jié)構(gòu)沮脖,它使得我們可以異步或者獨(dú)立的對(duì)組件進(jìn)行開(kāi)發(fā)金矛。
  • 并發(fā)結(jié)構(gòu)(Concurrency structure)
    • 對(duì)于這個(gè)組件-連接件結(jié)構(gòu)可以使架構(gòu)師確定并發(fā)的幾率并且明確可能發(fā)生資源沖突的地方。該結(jié)構(gòu)中的單元稱為組件勺届,連接件是組件間的溝通機(jī)制驶俊,組件按照一定的規(guī)則被整理在不同的邏輯線程(logical thread)中,一個(gè)邏輯線程是一系列的計(jì)算過(guò)程并且在后續(xù)的設(shè)計(jì)過(guò)程中該邏輯線程可以被分配到單獨(dú)一個(gè)物理線程中免姿,并發(fā)結(jié)構(gòu)在設(shè)計(jì)過(guò)程的初期被使用饼酿,用于發(fā)現(xiàn)和識(shí)別并發(fā)執(zhí)行中的需求。

一些有用的分配結(jié)構(gòu)

分配結(jié)構(gòu)定義了那些屬于C&C結(jié)構(gòu)和模塊結(jié)構(gòu)的元素怎樣映射到非軟件的事物上,比如硬件,團(tuán)隊(duì)鹿驼,文件系統(tǒng)等,有用的分配結(jié)構(gòu)包括:

  • 部署結(jié)構(gòu)(Deployment structure)
    • 部署結(jié)構(gòu)展示了軟件是如何被分配到硬件進(jìn)程和通信部件上的药版,該結(jié)構(gòu)中的元素包括軟件元素(通常是組件-連接件中的一個(gè)進(jìn)程),硬件實(shí)體喻犁,和通信連接槽片,元素間的關(guān)系是 allocated-to,表明了軟件元素處于哪一個(gè)物理單元之上并且如果分配是動(dòng)態(tài)的還包括 migrates-to 的關(guān)系株汉,這個(gè)結(jié)構(gòu)可以被用于解釋性能筐乳,數(shù)據(jù)集成,安全和可用性乔妈,在分布式和并行式系統(tǒng)中非常有用蝙云。
  • 實(shí)現(xiàn)結(jié)構(gòu)(Implementation structure)
    • 實(shí)現(xiàn)結(jié)構(gòu)展示了軟件元素(通常是模塊)在系統(tǒng)開(kāi)發(fā),集成或者配置控制環(huán)境中是如何映射到文件結(jié)構(gòu)中的路召,這對(duì)開(kāi)發(fā)和構(gòu)建過(guò)程的管理來(lái)說(shuō)非常重要勃刨。
  • 工作分配結(jié)構(gòu)(Work assignment structure)
    • 工作分配結(jié)構(gòu)把實(shí)現(xiàn)和集成模塊的任務(wù)以團(tuán)隊(duì)為單位進(jìn)行分配波材,有了結(jié)構(gòu)分配圖使得誰(shuí)做什么工作變的清晰,同時(shí)架構(gòu)師知道每一個(gè)團(tuán)隊(duì)的專長(zhǎng)身隐,在大型的多參與者的開(kāi)發(fā)項(xiàng)目中廷区,工作分配結(jié)構(gòu)通常是將功能單元只分配給一個(gè)團(tuán)隊(duì)實(shí)現(xiàn),其它需要開(kāi)發(fā)相同功能的團(tuán)隊(duì)進(jìn)行功能的調(diào)用即可贾铝,而不是讓每一個(gè)需要該功能的團(tuán)隊(duì)把它都開(kāi)發(fā)一遍隙轻,這個(gè)結(jié)構(gòu)同樣規(guī)定可團(tuán)隊(duì)之間的溝通方式,比如垢揩,郵件...

將結(jié)構(gòu)互相之間進(jìn)行聯(lián)系

每一個(gè)結(jié)構(gòu)都提供了一種不同的設(shè)計(jì)和處理系統(tǒng)的觀點(diǎn)玖绿,并且從每一個(gè)結(jié)構(gòu)自身出發(fā)它們都是有用且有效的,盡管每一個(gè)結(jié)構(gòu)都分別對(duì)應(yīng)了系統(tǒng)的不同方面叁巨,但是這些結(jié)構(gòu)本身并不是孤立的斑匪。某一個(gè)結(jié)構(gòu)中的元素可能會(huì)和其它結(jié)構(gòu)中的元素相聯(lián)系,所以我們需要對(duì)這些聯(lián)系作相應(yīng)的解釋锋勺,比如蚀瘸,在分解結(jié)構(gòu)中的一個(gè)模塊可能會(huì)被解釋為一個(gè)組件-連接件,一個(gè)組件-連接件中的一部分庶橱,或者是一個(gè)組件-連接件中的一些組件贮勃,這些反應(yīng)了系統(tǒng)在運(yùn)行過(guò)程中的自我改變的能力,總的來(lái)說(shuō)悬包,結(jié)構(gòu)與結(jié)構(gòu)之間的映射是多對(duì)多的衙猪。

如圖1.2所示是一個(gè)有關(guān)兩個(gè)結(jié)構(gòu)之間是怎樣進(jìn)行聯(lián)系的簡(jiǎn)單的例子,圖的左邊顯示了一個(gè)小型CS系統(tǒng)的模塊分解圖(module decomposition view)布近,在這個(gè)系統(tǒng)中,有兩個(gè)模塊必須被實(shí)現(xiàn)丝格,分別是客戶端軟件和服務(wù)器端軟件撑瞧,圖的右邊顯示了這個(gè)CS架構(gòu)系統(tǒng)的組件-連接件的視圖,從圖中也可以看出在運(yùn)行過(guò)程中有十個(gè)客戶端和服務(wù)器相連接显蝌,所以這個(gè)小的CS架構(gòu)的系統(tǒng)有兩個(gè)模塊和十一個(gè)組件(十個(gè)連接件)预伺。


對(duì)CS系統(tǒng)的兩種視圖

雖然在圖中明顯的可以看出在分解結(jié)構(gòu)和CS結(jié)構(gòu)中的元素是非常相似的,但是這兩個(gè)視圖的用途卻不盡相同曼尊,比如酬诀,右邊的視圖可以被用于性能的分析,瓶頸的預(yù)測(cè)和對(duì)網(wǎng)絡(luò)流量的管理骆撇,如果使用左邊的視圖來(lái)做以上事情是十分困難的瞒御。

在個(gè)人的項(xiàng)目中有時(shí)侯會(huì)決定一個(gè)主要的結(jié)構(gòu),并在有可能的情況下神郊,用該主要結(jié)構(gòu)來(lái)描述其它結(jié)構(gòu)肴裙,通常將主要結(jié)構(gòu)規(guī)定為模塊的分解結(jié)構(gòu)趾唱,這樣做是因?yàn)槟K的分解結(jié)構(gòu)跟有利于衍生出整個(gè)項(xiàng)目的結(jié)構(gòu),因?yàn)榉纸饨Y(jié)構(gòu)反映了開(kāi)發(fā)團(tuán)隊(duì)的結(jié)構(gòu)蜻懦,在有些其他項(xiàng)目中甜癞,主要的結(jié)構(gòu)也可能是C&C結(jié)構(gòu),用來(lái)顯示系統(tǒng)的功能或者實(shí)現(xiàn)的主要質(zhì)量屬性宛乃。

越少越好

不是所有的系統(tǒng)都需要考慮許多的架構(gòu)結(jié)構(gòu)悠咱,系統(tǒng)越龐大,結(jié)構(gòu)間顯著的差異就比較多征炼,但對(duì)于小系統(tǒng)來(lái)說(shuō)乔煞,結(jié)構(gòu)的數(shù)量是相對(duì)比較少的,通常只是處理一個(gè)組件-連接件結(jié)構(gòu)柒室。如果在小系統(tǒng)中只有一個(gè)進(jìn)程渡贾,那么進(jìn)程結(jié)構(gòu)就可以相應(yīng)的退化為一個(gè)節(jié)點(diǎn)并且不需要明確的表示在設(shè)計(jì)中。如果小系統(tǒng)只是基于一個(gè)處理器實(shí)現(xiàn)雄右,那么對(duì)應(yīng)的部署結(jié)構(gòu)也不需要被考慮空骚。總的來(lái)說(shuō)擂仍,當(dāng)且僅當(dāng)一個(gè)結(jié)構(gòu)會(huì)給開(kāi)發(fā)過(guò)程帶來(lái)好處囤屹,比如簡(jiǎn)化開(kāi)發(fā)或者維持開(kāi)銷時(shí),該結(jié)構(gòu)才會(huì)被設(shè)計(jì)并記錄逢渔。

選擇哪一個(gè)結(jié)構(gòu)

我們已經(jīng)對(duì)許多有用的結(jié)構(gòu)架構(gòu)進(jìn)行了簡(jiǎn)單明確的描述肋坚,但是在實(shí)際開(kāi)發(fā)過(guò)程中,應(yīng)該選擇哪一個(gè)架構(gòu)肃廓,哪一個(gè)架構(gòu)應(yīng)該被記錄智厌,當(dāng)然不是所有的,對(duì)于現(xiàn)在來(lái)說(shuō)盲赊,只是根據(jù)架構(gòu)的可用性和對(duì)系統(tǒng)重要質(zhì)量屬性的影響進(jìn)行選擇铣鹏,再挑選出一個(gè)表現(xiàn)最好的架構(gòu)進(jìn)行使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哀蘑,一起剝皮案震驚了整個(gè)濱河市诚卸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绘迁,老刑警劉巖合溺,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缀台,居然都是意外死亡棠赛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恭朗,“玉大人屏镊,你說(shuō)我怎么就攤上這事√等” “怎么了而芥?”我有些...
    開(kāi)封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)膀值。 經(jīng)常有香客問(wèn)我棍丐,道長(zhǎng),這世上最難降的妖魔是什么沧踏? 我笑而不...
    開(kāi)封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任歌逢,我火速辦了婚禮,結(jié)果婚禮上翘狱,老公的妹妹穿的比我還像新娘秘案。我一直安慰自己,他們只是感情好潦匈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布阱高。 她就那樣靜靜地躺著,像睡著了一般茬缩。 火紅的嫁衣襯著肌膚如雪赤惊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天凰锡,我揣著相機(jī)與錄音未舟,去河邊找鬼。 笑死掂为,一個(gè)胖子當(dāng)著我的面吹牛裕膀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播菩掏,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼魂角,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了智绸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤访忿,失蹤者是張志新(化名)和其女友劉穎瞧栗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體海铆,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迹恐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卧斟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殴边。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡憎茂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锤岸,到底是詐尸還是另有隱情竖幔,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布是偷,位于F島的核電站拳氢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蛋铆。R本人自食惡果不足惜馋评,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刺啦。 院中可真熱鬧留特,春花似錦、人聲如沸玛瘸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捧韵。三九已至市咆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間再来,已是汗流浹背蒙兰。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芒篷,地道東北人搜变。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像针炉,于是被迫代替她去往敵國(guó)和親挠他。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,926評(píng)論 6 13
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,761評(píng)論 25 707
  • 翻譯自“Collection View Programming Guide for iOS” 0 關(guān)于iOS集合視...
    lakerszhy閱讀 3,841評(píng)論 1 22
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理篡帕,服務(wù)發(fā)現(xiàn)殖侵,斷路器,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 題記: 日本曾給中國(guó)造成巨大的傷害镰烧。很多人在骨子里面討厭日本拢军,討厭任何和日本相關(guān)的東西。這個(gè)討厭對(duì)手今天到底是什么...
    晉文筆記閱讀 378評(píng)論 3 0