public class BuyerHelper { private static final UserRepository userRepository; public static void createAndCheckBuyer(Cart cart) { int userId = cart.getUserId(); User user = userRepository.getUserById(userId); Buyer buyer = BuyFactory.createFrom(user); BaseCheckResult checkResult = BuyerChecker.checkBuyerPermission(buyer); if (checkResult.isSuccess()) cart.setBuyer(buyer); else throw new InvaildBuyerException(); } }
很簡單的一段代碼,存在如下問題:spa
1. 責任不清晰。code
該方法既包含了驗證用戶是不是一個合法買家的功能,又實現了根據用戶建立買家的功能,而且還隱藏了一個很危險的功能,它還負責將這個建立好的買家設置到cart的屬性。而cart是一個外來參數,這意味着後續的代碼中頗有可能會依賴這個被附加到cart上的buyer屬性上,而這一點實際上是比較隱晦的。對象
2. 建立非法對象。blog
本方法實現的功能應該是判斷一個用戶是不是一個有效的買家,理論上來講若是一個用戶不是有效買家的話,就不該該出現一個買家對象。可是,在這段代碼中,確實先無論三七二十一先把Buyer對象建立出來,而後再對它進行驗證。咱們應該盡力避免建立非法對象。get