成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

openstack4j 源碼分析(二) model對(duì)象

pingan8787 / 1500人閱讀

摘要:也就是說(shuō),封裝了一個(gè)自己的對(duì)象,而不是和與他平級(jí)的共享。但和需求的鏡像顆粒度不同,這樣做的好處是耦合度低,代碼更加分離。對(duì)象生成創(chuàng)建的對(duì)象時(shí),使用模式。對(duì)應(yīng)的類(lèi)關(guān)系圖其中位于包下,中可以獲取到所有資源的對(duì)象構(gòu)建器。

通過(guò)上一篇我們獲得到了經(jīng)過(guò)認(rèn)證的OSClient,通過(guò)這個(gè)接口,我們就使用openstack4j的所有功能了。但openstack4j是一個(gè)用來(lái)便于我們更方便調(diào)用openstack的sdk,也就是說(shuō)主要是進(jìn)行資源請(qǐng)求的處理。在對(duì)資源進(jìn)行操作之前,首先需要生成資源的對(duì)象,下面來(lái)看看openstack4j中的model設(shè)計(jì)。(以server來(lái)說(shuō)明)

model對(duì)象接口

在接口調(diào)用時(shí),為了方便業(yè)務(wù)處理時(shí)的代碼編寫(xiě),我們都會(huì)用DTO的類(lèi)來(lái)處理我們的請(qǐng)求參數(shù)。在openstack4j中,請(qǐng)求model就在org.openstack4j.model.compute這個(gè)包下。但在這里只是接口,具體的實(shí)現(xiàn)則是在org.openstack4j.openstack.compute.domain下。

server model的最主要接口是org.openstack4j.model.compute.server,這個(gè)接口中包含了server的所有信息。

public interface Server extends ModelEntity {

    public enum Status {}

    String getId();

    String getName();
    
    Addresses getAddresses();
    
    Image getImage();
}

使用接口而不是直接使用一個(gè)DTO類(lèi),可以更好兼容因openstack版本變更造成的server property變化。需要注意的是,在Server接口中,getIMage()方法獲取到的IMage接口,并不是鏡像model的接口org.openstack4j.model.image.Image,而是屬于server包下的model.compute.Image。也就是說(shuō),server封裝了一個(gè)自己的image對(duì)象,而不是和與他平級(jí)的image共享。表面看起來(lái)是有兩個(gè)image接口,顯得代碼冗余。但model.compute.serverorg.openstack4j.model.image.Image需求的鏡像顆粒度不同,這樣做的好處是耦合度低,代碼更加分離。

Server接口的具體實(shí)現(xiàn)類(lèi)是org.openstack4j.openstack.compute.domain.NovaServer

model對(duì)象生成

創(chuàng)建Server的model對(duì)象時(shí),使用Builder模式。他的好處是不直接生成想要的對(duì)象,而由調(diào)用者利用所有必要的參數(shù)來(lái)調(diào)用構(gòu)造器。server的model有兩個(gè)頂部接口,一個(gè)是model.compute.server,一個(gè)是model.compute.sverCreate,分別對(duì)于server資源的查詢(xún)和創(chuàng)建。

serverCreate

ServerCreate server = Builders.server()
                        .name("Ubuntu 2")
                        .flavor("large")
                        .image("imageId")
                        .build();

serverCreate對(duì)應(yīng)的類(lèi)關(guān)系圖:

其中Builders位于org.openstack4j.api包下,Builders中可以獲取到所有資源的對(duì)象構(gòu)建器。由此資源構(gòu)建器(ServerCreateBuilder)可以構(gòu)造具體的資源。
這兒設(shè)計(jì)比較好的是這個(gè)構(gòu)建器,使用了多態(tài)的方式來(lái)設(shè)計(jì)構(gòu)建器,可以做到很好的可替換性和可擴(kuò)充性,在程序處理中,也會(huì)更加簡(jiǎn)化和靈活。

server

model.compute.server的實(shí)現(xiàn)比較簡(jiǎn)單,只是用于承接openstack server資源查詢(xún)的返回值。

有一點(diǎn)可以注意下,NovaServer的內(nèi)部類(lèi)Servers,他的唯一方法就是value(),用于返回一個(gè)列表類(lèi)型的NovaServer。這種設(shè)計(jì)可以在很多好的開(kāi)源系統(tǒng)里面看得到。對(duì)于常用的model類(lèi)的封裝,可以在其內(nèi)部類(lèi)完成,減少代碼冗余,在閱讀上效果也更好。

model.compute.server接口中,有個(gè)枚舉類(lèi)Status,是server的狀態(tài)枚舉。提這一點(diǎn)是因?yàn)槲医?jīng)常在項(xiàng)目中看到同事定義枚舉類(lèi)時(shí)會(huì)專(zhuān)門(mén)定義個(gè)enums包,然后將所有的枚舉類(lèi)都提出來(lái)放到這個(gè)包下。其實(shí)更好的設(shè)計(jì)是類(lèi)似openstack4j這樣,對(duì)于某個(gè)資源的枚舉,最好是作為資源的內(nèi)部類(lèi)存在,而不是再多帶帶定義一個(gè)ServerStatus的枚舉類(lèi)。這樣代碼的可讀性和可維護(hù)性會(huì)更高。

json處理

openstack4j的json處理和spring一樣,使用了fasterxml.jackson來(lái)進(jìn)行json的轉(zhuǎn)換。

@JsonRootName("server")
@JsonIgnoreProperties(ignoreUnknown=true)
public class NovaServer implements Server {

    public String id;
    
    @JsonProperty("tenant_id")
    public String tenantId;
    
    @JsonProperty("user_id")
    public String userId;
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/70828.html

相關(guān)文章

  • openstack4j 源碼分析 (一) 入口

    摘要:源碼分析之入口背景去年有個(gè)整合多個(gè)平臺(tái)的項(xiàng)目,底層是華為華等不同平臺(tái)的環(huán)境,應(yīng)用管理層為。我們對(duì)接華為華等平臺(tái)時(shí),對(duì)于不同的認(rèn)證方式,就是使用這種方式,大大減少了開(kāi)發(fā)量。 openstack4j 源碼分析之入口 背景 去年有個(gè)整合多個(gè)openstack平臺(tái)的項(xiàng)目,底層是華為、華3等不同平臺(tái)的openstack環(huán)境,應(yīng)用管理層為java。雖然各平臺(tái)功能與原生openstack有所增加,但...

    KnewOne 評(píng)論0 收藏0
  • Backbone源碼解讀(

    摘要:以為例構(gòu)造函數(shù)的內(nèi)容構(gòu)造函數(shù)的內(nèi)部一般會(huì)做以下幾個(gè)操作各種給內(nèi)部對(duì)象設(shè)置屬性。為什么呢源碼做出了解釋。在里面會(huì)調(diào)用用戶(hù)傳入的回調(diào)函數(shù)并觸發(fā)事件表示已經(jīng)同步了。整個(gè)的源碼事實(shí)上就是這兩組東西。 1. 開(kāi)場(chǎng) 強(qiáng)烈建議一邊看著源碼一邊讀本文章,本文不貼大段代碼。源碼地址。在寫(xiě)backbone應(yīng)用的時(shí)候,說(shuō)實(shí)話,大部分的時(shí)間都是在寫(xiě)這三個(gè)模塊的內(nèi)容。關(guān)于這三個(gè)模塊的分析網(wǎng)上隨隨便便就能找到一堆...

    Sleepy 評(píng)論0 收藏0
  • Backbone 源碼解讀(一)

    1. 開(kāi)場(chǎng) 1.1 MVC? MVC是一種GUI軟件的一種架構(gòu)模式。它的目的是將軟件的數(shù)據(jù)層(Model)和視圖(view)分開(kāi)。Model連接數(shù)據(jù)庫(kù),實(shí)現(xiàn)數(shù)據(jù)的交互。用戶(hù)不能直接和數(shù)據(jù)打交道,而是需要通過(guò)操作視圖,然后通過(guò)controller對(duì)事件作出響應(yīng),最后才得以改變數(shù)據(jù)。最后數(shù)據(jù)改變,通過(guò)觀察者模式更新view。(所以在這里需要用到設(shè)計(jì)模式中的觀察者模式) 1.2 Smalltalk-80...

    Kosmos 評(píng)論0 收藏0
  • Android開(kāi)源架構(gòu)

    摘要:音樂(lè)團(tuán)隊(duì)分享數(shù)據(jù)綁定運(yùn)行機(jī)制分析一個(gè)項(xiàng)目搞定所有主流架構(gòu)單元測(cè)試一個(gè)項(xiàng)目搞定所有主流架構(gòu)系列的第二個(gè)項(xiàng)目。代碼開(kāi)源,展示了的用法,以及如何使用進(jìn)行測(cè)試,還有用框架對(duì)的進(jìn)行單元測(cè)試。 Android 常用三方框架的學(xué)習(xí) Android 常用三方框架的學(xué)習(xí) likfe/eventbus3-intellij-plugin AS 最新可用 eventbus3 插件,歡迎品嘗 簡(jiǎn)單的 MVP 模...

    sutaking 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<