場景
有一個店鋪列表查詢,查詢條件是店鋪Id/店鋪名稱(通過下拉框選擇)。這個時候我們在和前端約定,往往是傳一個queryType和queryValue,這個時候Service和Dao就有兩個選擇:
Service和Dao的查詢參數(shù)QueryParam直接定義queryType和queryValue兩個變量(或者直接和Controller共用一個參數(shù)),然后在生成SQL的時候把這兩個字段解析成ShopId和ShopName.這樣做的好處就是可以和Controller公用一個實體,避免了Controller層和Service之間的實體轉(zhuǎn)換
Service自己定義一個查詢實體QueryParam,并且在實體中直接定義ShopId和ShopName.如果僅僅站在Service的角度來思考這個問題的話,Service必須擁有自己的入?yún)?所以在QueryParam里面定義ShopId和ShopName對接口的語義理解上來說是最合理
思考這里有兩種設(shè)計方式,一個自上至下,通過設(shè)計Controller然后考慮Service的入?yún)⒑统鰠?另外一個是模塊獨立考慮,站在Service上考慮自身的接口應(yīng)該怎么設(shè)計,避免了因為第一種設(shè)計方式,由于Controller的參數(shù)而直接影響了Service接口參數(shù)的設(shè)計(QueryParam定義ShopId和ShopName絕對比定義定義queryType和queryValue直觀),并且最壞的情況就是Service和Controller公用一個參數(shù),因為前端的傳參是很容易變化,如此和前端的參數(shù)耦合,當前端傳值名稱變化以后Service就得跟著改
引申在我們平常開發(fā)大型系統(tǒng)的時候,往往也會將系統(tǒng)進行有效的分層比如有Service,Dao,Facade...每個層之間都應(yīng)該有自己的入?yún)⒑统鰠?各個層之間的耦合度就更加小,入?yún)⒑统鰠⒏拥母蓛?接口更加容易讓人理解(在某一層次的內(nèi)部之間還會有更小的分層,這些小的分層之間甚至在一個層次的接口與接口之間,也會涉及到這個問題).
結(jié)論各個層次都需要有自己的域
好處:通過在不同層次定義不同的域,不僅在代碼的可讀性上更加的友好并且不同層次之間或者同一層次之間的接口也更加的獨立,耦合度更加小
壞處:有太多的實體,并且不同層或者同層之間的實體需要相互裝換.
public interface CouponService{ public ListqueryCoupon(GoodsParam1 goods); public List shareCouponAmount(CouponParam1 coupon); } public CouponGoodsResultDTO calculate(Param param1,List goods){ List coupons = CouponService.queryCoupon(GoodsParam1 goods); //選中優(yōu)惠券coupon,coupon實體下面標明適用的商品Id-------① //通過coupon下的商品Id,從GoodsDetail中取相應(yīng)的價格信息進行均攤-------② CouponService.shareCouponAmount(coupon); }
如上代碼是屬于比較麻煩的一種類型,因為Coupon自己實體下直掛了那些這個優(yōu)惠券適合的商品Id,并沒有其它信息,所以下面在計算優(yōu)惠券的時候又得從原始入?yún)⒅袑⒁恍﹥r格信息取出來(如果①中能把商品的價格信息全部返回的話,②中就直接get,set就行了,但是這樣均攤優(yōu)惠券接口勢必會和查詢優(yōu)惠券接口耦合,如果均攤優(yōu)惠券需要一個新的信息的話,那么查詢優(yōu)惠券接口返回值就需要修改,并且由于商品信息都是入?yún)魅氲?所以入?yún)⒁残枰黾右恍┰谶@個邏輯中不必要的參數(shù))
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/65978.html
摘要:也就是說我們操作的幾何公式中的未知變量,而具體的畫圖操作則由渲染引擎處理,而不是我們苦苦哀求設(shè)計師幫忙。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發(fā)現(xiàn)border-radius還分水平半徑和垂直半徑,然后又發(fā)現(xiàn)border-top-left/right-radius的水平半徑之和大于元素寬度時,實際值會按比...
摘要:本文主要是關(guān)于跨域的幾種方式,關(guān)于什么是跨域這里就不多說了,寫這個也是為了記住一些知識點的。我自己用和的寫過一些,但是沒有在實際工作中用過,所以對這一塊了解不深。 本文主要是關(guān)于跨域的幾種方式,關(guān)于什么是跨域這里就不多說了,寫這個也是為了記住一些知識點的。 一. jsonp jsonp的跨域方式很容易理解,頁面的的每一個script標簽瀏覽器都會發(fā)送get請求獲取對應(yīng)的文本資源,獲取到...
摘要:節(jié)目單表是每一年春晚上表演的節(jié)目,包括節(jié)目類型節(jié)目名演員名這幾項數(shù)據(jù)。好消息是,今年的春晚她會繼續(xù)主持。對她的印象莫過于每年春晚尾聲的那曲難忘今宵。年的春晚,她一人連唱首歌,前無古人,也后無來者。 showImg(https://segmentfault.com/img/remote/1460000018120380); 看過那么多春晚,哪一年、哪些節(jié)目、哪些人你還留有深刻印象呢。 記...
閱讀 3702·2021-11-11 11:00
閱讀 2180·2021-10-08 10:05
閱讀 2671·2021-10-08 10:04
閱讀 3204·2021-09-30 09:48
閱讀 3763·2021-09-27 14:10
閱讀 1704·2021-09-09 09:33
閱讀 2100·2019-08-30 15:55
閱讀 1602·2019-08-30 13:53