每日代碼 - 6/27 避免建立非法對象

 
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

相關文章
相關標籤/搜索