編碼思路

編碼,應(yīng)按照總-分的思路編寫:先寫整體的大框架,后續(xù)再實現(xiàn)具體細節(jié)。
假設(shè)要實現(xiàn)用戶登錄判斷的需求,其中需要判斷驗證碼、用戶名、密碼等是否合法及用戶名與密碼是否匹配,那么我們第一步的代碼應(yīng)如下:

第一步:編寫整體框架

public class LoginService {

    public String login(UserInfo userInfo) {
        boolean codeIsLegal = verifyCode(userInfo.getCode());
        if (!codeIsLegal) {
            return "驗證碼錯誤!";
        }
        boolean nameIsLegal = verifyName(userInfo.getName());
        if (!nameIsLegal) {
            return "用戶名不合法!";
        }
        boolean passIsLegal = verifyPass(userInfo.getPassword());
        if (!passIsLegal) {
            return "密碼不合法";
        }
        boolean nameMatchedPass = verifyNameNPass(userInfo.getName(), userInfo.getPassword());
        if (!nameMatchedPass) {
            return "用戶名與密碼不匹配!";
        }
        return "登錄成功";
    }

}

class UserInfo {
    private String name;
    private String password;
    private String code;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}

第二步:實現(xiàn)具體判斷邏輯

public class LoginService {

    public String login(UserInfo userInfo) {
        boolean codeIsLegal = verifyCode(userInfo.getCode());
        if (!codeIsLegal) {
            return "驗證碼錯誤!";
        }
        boolean nameIsLegal = verifyName(userInfo.getName());
        if (!nameIsLegal) {
            return "用戶名不合法!";
        }
        boolean passIsLegal = verifyPass(userInfo.getPassword());
        if (!passIsLegal) {
            return "密碼不合法";
        }
        boolean nameMatchedPass = verifyNameNPass(userInfo.getName(), userInfo.getPassword());
        if (!nameMatchedPass) {
            return "用戶名與密碼不匹配!";
        }
        return "登錄成功";
    }

    private boolean verifyCode(String code) {
        return code.equals("6666");
    }

    private boolean verifyName(String name) {
        return name.equals("admin");
    }

    private boolean verifyPass(String password) {
        return password.equals("admin");
    }
    
    private boolean verifyNameNPass(String name, String password) {
        return true;
    }
}

class UserInfo {
    private String name;
    private String password;
    private String code;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}

醬紫寫,思路清晰代碼層次分明,易于閱讀及維護。
但代碼層次太分明時,也會有弊端。如下所示:模擬請求API接口

public class HttpService {

    public JSONObject queryData(RequestVO vo) {
        Map<String, String> header = buildHeader(vo);
        JSONObject body = buildBody(vo);
        String result = exeHttpRequest(header, body);
        return JSON.parseObject(result);
    }

    private String exeHttpRequest(Map<String, String> header, JSONObject body) {
        return "{\"code\":0,\"msg\":\"請求成功\"}";
    }

    private JSONObject buildBody(RequestVO vo) {
        String sign = generateSign(vo);
        JSONObject body = new JSONObject();
        body.put("name", vo.name);
        body.put("phone", vo.phone);
        body.put("sign", sign);
        return body;
    }

    private Map<String, String> buildHeader(RequestVO vo) {
        String sign = generateSign(vo);
        Map<String, String> header = new HashMap<>(2);
        header.put("content-type", "application/json");
        header.put("sign", sign);
        return header;
    }

    private String generateSign(RequestVO vo) {
        return MD5Encoder.encode((vo.name + vo.phone).getBytes());
    }
}

class RequestVO {
    String name;
    String phone;
}

從代碼中可看出,sign被計算了兩次。但假如為了復(fù)用header中生成的sign,整個代碼就不會這么清晰了。
具體實踐中,應(yīng)根據(jù)實際情況權(quán)衡是否要做到如此層次分明:
當sign的計算較簡單時,可以重復(fù)計算;
當sign的計算較耗費資源時,則應(yīng)復(fù)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容