public class CartMainTypeSelector { public static void selectCartMainType(CartContext context,CartOption options){ Params params = context.getParams(); if (params != null && params.isMiniCart()) { options.cartType = CartType.MINI_CART; return; } if(context.getShopId() > 0){ options.cartType = CartType.SHOP_TYPE; } }
一個很常見的方法,從參數一中讀值,根據判斷和計算,修改參數二的值。安全
根據CQS(command query seperation)的思想,一個方法最好要麼作查詢,要麼負責更新對象的狀態。這樣對於那麼作查詢的方法,咱們就會很放心,由於咱們能夠以任意順序和次數調用它們,而且它們的結果在大多數狀況下都是能夠預料的,不變的。spa
public class CartMainTypeSelector { public static CartType getCartMainType(CartContext context){ Params params = context.getParams(); if (params != null && params.isMiniCart()) { return CartType.MINI_CART; } if(context.getShopId() > 0){ return CartType.SHOP_TYPE; } }
比較一下下面兩段代碼的可讀性和安全性(從反作用的角度看)code
CartOption option = ...; CartContext context = ...; option.cartType=getCartMainType(context); CartOption option = ...; CartContext context = ...; selectCartMainType(context,option);