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)的思想,一个方法最好要么做查询,要么负责更新对象的状态。这样对于那么做查询的方法,我们就会很放心,因为我们可以以任意顺序和次数调用它们,并且它们的结果在大多数情况下都是可以预料的,不变的。
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; } }
比较一下下面两段代码的可读性和安全性(从副作用的角度看)
CartOption option = ...; CartContext context = ...; option.cartType=getCartMainType(context); CartOption option = ...; CartContext context = ...; selectCartMainType(context,option);