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

資訊專欄INFORMATION COLUMN

如何設(shè)計(jì)接口的粒度

Aceyclee / 2055人閱讀

摘要:但是站在抽象層次和接口的復(fù)用率角度應(yīng)該第四種才是最合理的場(chǎng)景二有兩個(gè)接口和現(xiàn)在在組合層需要同時(shí)調(diào)用和來(lái)組裝成一個(gè)新的實(shí)體。

場(chǎng)景 場(chǎng)景一

用戶基本信息的展示.產(chǎn)品需要有3個(gè)頁(yè)面,分別面向的是消費(fèi)者,運(yùn)營(yíng),商家。所以3個(gè)頁(yè)面的內(nèi)容不是完全一樣的,并且有些內(nèi)容是敏感的,但是他們的數(shù)據(jù)源是一致的?,F(xiàn)在一共有四種解決方案:

分別寫(xiě)三個(gè)DAO,根據(jù)頁(yè)面需求返回不同的數(shù)據(jù)

分別寫(xiě)三個(gè)service,調(diào)用的是同一個(gè)DAO,在service中根據(jù)頁(yè)面需求進(jìn)行裁剪

分別寫(xiě)三個(gè)組合層的接口,組合層調(diào)用的是同一個(gè)service,然后在組合層根據(jù)頁(yè)面需求進(jìn)行裁剪

根據(jù)頁(yè)面需求在controller層對(duì)字段進(jìn)行裁剪,調(diào)用的是同一個(gè)組合層

處理方式:在這個(gè)場(chǎng)景中,我一開(kāi)始選擇的處理方式是第三種,當(dāng)時(shí)是基于公有轉(zhuǎn)換代碼的重復(fù)利用。但是站在抽象層次和接口的復(fù)用率角度應(yīng)該第四種才是最合理的

場(chǎng)景二

有兩個(gè)接口ServiceA.methodA()ServiceA.methodB(),現(xiàn)在在組合層需要同時(shí)調(diào)用methodA()methodB()來(lái)組裝成一個(gè)新的實(shí)體。有兩種方案可以解決:

ServiceA中重新寫(xiě)一個(gè)方法methodC()給組合層使用

在組合層自己寫(xiě)私有方法或者Utils方法去組裝實(shí)體

場(chǎng)景三

電商系統(tǒng)商品詳情頁(yè),有放入購(gòu)物車(chē)和直接購(gòu)買(mǎi)兩個(gè)選項(xiàng),直接購(gòu)買(mǎi)選項(xiàng)也會(huì)放入購(gòu)物車(chē),但是和實(shí)際上的購(gòu)物車(chē)是分離的。實(shí)現(xiàn)方式有三種:

前臺(tái)通過(guò)傳遞一個(gè)時(shí)間戳t來(lái)標(biāo)示是放入購(gòu)物車(chē)還是直接購(gòu)買(mǎi),如果t=0就是放入購(gòu)物車(chē),如果是t!=0就是直接購(gòu)買(mǎi)。購(gòu)物車(chē)相對(duì)應(yīng)也有兩個(gè)接口Service.MethodA(),Service.MethodB(long t),分別對(duì)應(yīng)放入購(gòu)物車(chē)和直接購(gòu)買(mǎi)(這里的t對(duì)購(gòu)物車(chē)模塊有特殊作用)

購(gòu)物車(chē)值提供一個(gè)接口Service.Method(long t),在購(gòu)物車(chē)模塊中根據(jù)t自己去判斷是直接購(gòu)買(mǎi)還是放入購(gòu)物車(chē)

前臺(tái)傳一個(gè)標(biāo)示flag表示是否直接購(gòu)買(mǎi),購(gòu)物車(chē)提供兩個(gè)接口Service.MethodA(),Service.MethodB()(這里去除了購(gòu)物車(chē)模塊對(duì)時(shí)間戳t的依賴)

場(chǎng)景四

一個(gè)Service.Method()返回了一個(gè)A實(shí)體.現(xiàn)在有新的需求發(fā)現(xiàn)A實(shí)體返回的字段太少了,得多加一個(gè)字段。這個(gè)時(shí)候有兩種處理方式:

直接在A實(shí)體中添加

重新寫(xiě)一個(gè)接口返回的是實(shí)體B,BA要多一些字段

總結(jié)

場(chǎng)景一和場(chǎng)景四代表的是各個(gè)層次如何定義自己的接口,以及是否需要定義一些特殊的接口,目前感覺(jué):在開(kāi)發(fā)之前需要評(píng)估一下每個(gè)接口的調(diào)用頻率,是否需要定義一些多帶帶的返回接口(除非明顯感覺(jué)有性能問(wèn)題,一些接口可能返回一些大字段,而這個(gè)大字段在很多場(chǎng)景下是用不到的,或者因?yàn)榻涌谛枰祷匾粋€(gè)字段而需要做很多消耗性能的工作,或者接口返回50個(gè)字段,而我只需要一個(gè)字段,并且這種場(chǎng)景很多。這些可以多帶帶定義一些特殊接口),而其它的可以共用的接口盡量共用,當(dāng)后期在線上運(yùn)行的時(shí)候發(fā)現(xiàn)某個(gè)調(diào)用確實(shí)因?yàn)榻涌谔侄鴮?dǎo)致了性能問(wèn)題,那么可以重新拎出一個(gè)接口。

場(chǎng)景二代表的是,一開(kāi)始定義的接口粒度很小,但是后期需求發(fā)現(xiàn)上層調(diào)用需要用到一個(gè)粒度更加大的接口,這個(gè)時(shí)候需要分析這種場(chǎng)景是否很多,如果發(fā)現(xiàn)很多,就可以多帶帶為其開(kāi)一個(gè)新的接口,新的接口調(diào)用內(nèi)部的粒度小的接口來(lái)組合成一個(gè)新的返回實(shí)體(假設(shè)這些實(shí)體分屬不同的表),這種相當(dāng)于在原來(lái)的層次中間加了一層層次更加高的抽象,如果以后這種越來(lái)場(chǎng)景越多(小粒度組成大粒度),這層就會(huì)變得越來(lái)越明顯。

場(chǎng)景三,表示的是模塊需要給上層提供什么樣子的接口,一些模塊內(nèi)部的信息或者其它東西就不要暴露給上層調(diào)用者,比如方法一合方法三的不同之處就是是否需要知道內(nèi)部的Key是要用時(shí)間戳來(lái)表示的,所以在設(shè)計(jì)接口的時(shí)候需要同時(shí)站在使用者的角度和設(shè)計(jì)者的角度考慮,盡量不要把內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)暴露給使用者(比如上述的例子,如果以后不是以時(shí)間戳來(lái)當(dāng)key的話,那么這個(gè)接口傳入的時(shí)間戳就顯得毫無(wú)意義的),當(dāng)然也不是一定要遵循這個(gè)原則,當(dāng)接口由于你傳入一個(gè)參數(shù)而導(dǎo)致性能出現(xiàn)了質(zhì)的飛躍,那么這些反設(shè)計(jì)的接口還是允許存在的

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

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

相關(guān)文章

  • 《Java應(yīng)用架構(gòu)設(shè)計(jì):模塊化模式與OSGi》讀書(shū)筆記

    摘要:本書(shū)概括以軟件系統(tǒng)為例,重點(diǎn)講解了應(yīng)用架構(gòu)中的物理設(shè)計(jì)問(wèn)題,即如何將軟件系統(tǒng)拆分為模塊化系統(tǒng)。容器獨(dú)立模塊不依賴于具體容器,采用輕量級(jí)容器,如獨(dú)立部署模塊可獨(dú)立部署可用性模式發(fā)布接口暴露外部配置使用獨(dú)立的配置文件用于不同的上下文。 本文為讀書(shū)筆記,對(duì)書(shū)中內(nèi)容進(jìn)行重點(diǎn)概括,并將書(shū)中的模塊化結(jié)合微服務(wù)、Java9 Jigsaw談?wù)劺斫狻?本書(shū)概括 以Java軟件系統(tǒng)為例,重點(diǎn)講解了應(yīng)用架構(gòu)...

    seanHai 評(píng)論0 收藏0
  • 兩年React老兵總結(jié) - 如何組織React項(xiàng)目

    摘要:一個(gè)復(fù)雜的應(yīng)用都是由簡(jiǎn)單的應(yīng)用發(fā)展而來(lái)的隨著越來(lái)越多的功能加入項(xiàng)目代碼就會(huì)變得越來(lái)越難以控制本文章主要探討在大型項(xiàng)目中如何對(duì)組件進(jìn)行組織讓項(xiàng)目具備可維護(hù)性系列目錄類型檢查組件的組織樣式的管理組件的思維狀態(tài)管理目錄組件設(shè)計(jì)的基本原則基本原則高 一個(gè)復(fù)雜的應(yīng)用都是由簡(jiǎn)單的應(yīng)用發(fā)展而來(lái)的, 隨著越來(lái)越多的功能加入項(xiàng)目, 代碼就會(huì)變得越來(lái)越難以控制. 本文章主要探討在大型項(xiàng)目中如何對(duì)組件進(jìn)行組...

    hoohack 評(píng)論0 收藏0
  • 干貨 | Api 體系架構(gòu)分享(下)

    摘要:上一篇,講到了,最近,在做的設(shè)計(jì)對(duì)于設(shè)計(jì),一方面是對(duì)于后端框架的設(shè)計(jì),另一方面呢,是對(duì)于整個(gè)體系的設(shè)計(jì)在這里呢,我們來(lái)理理思路,先來(lái)大致分一下塊風(fēng)格就不用說(shuō)了,我們就用風(fēng)格,接下來(lái),也就是我們所說(shuō)的接口描述語(yǔ)言框架,整個(gè)服務(wù)的核心驅(qū)動(dòng)版本控 上一篇,講到了,最近,在做 api 的設(shè)計(jì) 對(duì)于設(shè)計(jì),一方面是對(duì)于后端 server 框架的設(shè)計(jì),另一方面呢,是對(duì)于整個(gè) api 體系的設(shè)計(jì) 在這...

    asce1885 評(píng)論0 收藏0
  • 設(shè)計(jì)模式系列(總綱)

    摘要:前言關(guān)于設(shè)計(jì)模式,想必大家的第一感覺(jué)就是過(guò)于高深,有點(diǎn)虛吧。為什么要學(xué)習(xí)設(shè)計(jì)模式因?yàn)橐b逼啊咳咳,大家請(qǐng)忽略前面那句話。處處都是設(shè)計(jì)模式的體現(xiàn),所以若想攻下,設(shè)計(jì)模式是必學(xué)的。下節(jié)預(yù)告單例模式 前言 關(guān)于設(shè)計(jì)模式,想必大家的第一感覺(jué)就是過(guò)于高深,有點(diǎn)虛吧。相對(duì)來(lái)說(shuō),我們還是更熟悉ssh或者ssm之類的開(kāi)發(fā)框架,一個(gè)工具用久了就會(huì)熟能生巧,就像刷漆工,時(shí)間長(zhǎng)了也知道如何刷的一手漂亮的好墻...

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

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

0條評(píng)論

閱讀需要支付1元查看
<