分布模式
- Remote Facade遠(yuǎn)程外觀
- ?
- 在OO模型中,存在很多規(guī)模小,且有小方法的對(duì)象.這些小對(duì)象會(huì)導(dǎo)致很多的對(duì)象間交互.
- 在單一地址空間里,小對(duì)象沒問題.
- 但是,當(dāng)在兩個(gè)進(jìn)程間做調(diào)用時(shí),頻繁的跨進(jìn)程交互會(huì)造成性能開銷.
- 遠(yuǎn)程外觀,減少遠(yuǎn)程調(diào)用的次數(shù).
- 建立在大量的細(xì)粒度對(duì)象之上,提供一個(gè)粗粒度的外觀.
- 不包括任何的領(lǐng)域邏輯.只是將方法轉(zhuǎn)換到細(xì)粒度對(duì)象上.
- 運(yùn)行機(jī)制
- 細(xì)粒度對(duì)象適合于解釋復(fù)雜的邏輯.
- 遠(yuǎn)程外觀使用bluck accessor來使用一個(gè)getter/setter來完成在細(xì)粒度對(duì)象中的所有g(shù)ettter/setter.
- 單個(gè)遠(yuǎn)程外觀,也可以作為多個(gè)細(xì)粒度對(duì)象的一個(gè)遠(yuǎn)程入口.
- 遠(yuǎn)程外觀的設(shè)計(jì)基于特定的客戶需求.
- 外觀的設(shè)計(jì)是為了簡(jiǎn)化外觀用戶的使用,而不是為了簡(jiǎn)化內(nèi)部系統(tǒng).
- 所以,遠(yuǎn)程對(duì)象中的大量不同方法實(shí)際上都在底層對(duì)象上調(diào)用了相同的方法.
- 狀態(tài)
- 無狀態(tài).可以組成池,來提高資源的利用率和效率.
- 有狀態(tài).當(dāng)訪問的客戶很多時(shí),可能會(huì)出現(xiàn)效率問題.
- 使用時(shí)機(jī)
- 需要遠(yuǎn)程訪問細(xì)粒度對(duì)象模型時(shí).
- 最常用在表現(xiàn)和領(lǐng)域模型之間.通常它們處于不同的進(jìn)程中.
- 如果所有的交互都在單一的進(jìn)程中,那么不需要這樣的轉(zhuǎn)變.
- Data Transfer Object
- 一個(gè)為了減少方法調(diào)用次數(shù)而在進(jìn)程間傳輸數(shù)據(jù)的對(duì)象.
- 當(dāng)使用遠(yuǎn)程接口時(shí),如果正在使用遠(yuǎn)程外觀,每一次調(diào)用的代價(jià)會(huì)很大.
- 需要減少調(diào)用的次數(shù),就意味著每次調(diào)用都需要傳遞大量數(shù)據(jù).
- 解決的辦法是使用數(shù)據(jù)傳輸對(duì)象.該對(duì)象將保留調(diào)用所用到的數(shù)據(jù).
- 它需要被序列化以便能在鏈接中傳輸.
- 運(yùn)行機(jī)制
- DTO一般只是一堆域和getter/setter.
- 價(jià)值在于允許一次調(diào)用中傳輸幾部分信息.該特性是分布式的本質(zhì).
- 一般會(huì)包含多個(gè)服務(wù)器對(duì)象,根據(jù)遠(yuǎn)端對(duì)象的需要.
- 常見形式是記錄集,或者集合數(shù)據(jù)結(jié)構(gòu).
- 當(dāng)遠(yuǎn)端對(duì)象需要某些數(shù)據(jù)時(shí),它將詢問一個(gè)合適的DTO
- 通常,DTO會(huì)包含遠(yuǎn)多于遠(yuǎn)端對(duì)象所需要的數(shù)據(jù)量.
- 這是因?yàn)檫h(yuǎn)程調(diào)用的開銷.寧可一次調(diào)用多傳輸以備以后使用.
- 不想在Client端看到領(lǐng)域?qū)ο箢?
- 這樣就等于在Client端拷貝整個(gè)領(lǐng)域模型.
- 所以,應(yīng)該從領(lǐng)域?qū)ο笾袀鬟f一些簡(jiǎn)單格式的數(shù)據(jù).
- DTO中的域都是簡(jiǎn)單的原生類型,或者是其它的DTO.
- DTO之間的結(jié)構(gòu)應(yīng)該只是簡(jiǎn)單的分層結(jié)構(gòu).
- 目的是更簡(jiǎn)單的進(jìn)行序列化.
- 并且使傳輸?shù)碾p方更容易理解.DTO必須被傳輸?shù)碾p方知道.
- DTO是圍繞特定的Client端而設(shè)計(jì)的.
- WEB和GUI會(huì)關(guān)聯(lián)不同的DTO.
- DTO的數(shù)目
- 使用單一的DTO來處理整個(gè)交互.減少編碼量,難以理解傳輸數(shù)據(jù).
- 用不同的DTO來處理不同的請(qǐng)求.清晰,但是會(huì)產(chǎn)生大量的DTO.
- 請(qǐng)求雙方
- 請(qǐng)求方和發(fā)送方各自一個(gè)DTO,還是公用一個(gè)DTO.
- 可變/恒定的DTO
- 恒定的DTO,從Client端收到一個(gè)DTO后,新創(chuàng)建并回傳一個(gè)不同的DTO.
- 可變的,直接修改請(qǐng)求的DTO.逐步放入數(shù)據(jù)的方式.
- 組裝器
- 獨(dú)立了領(lǐng)域?qū)ο蠛虳TO.使兩者不相互依賴.
- 映射器模式的實(shí)例:組裝器
- 負(fù)責(zé)從領(lǐng)域模型組裝一個(gè)DTO.或者依據(jù)DTO更新領(lǐng)域模型.
- 同時(shí)可以有多個(gè)組裝器對(duì)象共享一個(gè)DTO.
- 相同的數(shù)據(jù)在不同場(chǎng)景下有不同的更新語義.
- DTO一般只是一堆域和getter/setter.
- 使用時(shí)機(jī)
- 在一個(gè)方法調(diào)用中,在兩個(gè)進(jìn)程之間傳輸多個(gè)數(shù)據(jù)項(xiàng),應(yīng)使用它.
- DTO可以作為不同軟件層次間通用的數(shù)據(jù)源.
- 每個(gè)層次對(duì)DTO做修改,然后將它傳遞到下一層.
- 一個(gè)為了減少方法調(diào)用次數(shù)而在進(jìn)程間傳輸數(shù)據(jù)的對(duì)象.
?
轉(zhuǎn)載于:https://www.cnblogs.com/robyn/p/3527038.html
總結(jié)
- 上一篇: 九型人格,工作中的好帮手
- 下一篇: iOS.UITableView.Sect