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