php斗地主的编码思路,编码思路

编码,应按照总-分的思路编写:先写整体的大框架,后续再实现具体细节。

假设要实现用户登录判断的需求,其中需要判断验证码、用户名、密码等是否合法及用户名与密码是否匹配,那么我们第一步的代码应如下:

第一步:编写整体框架

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;

}

}

第二步:实现具体判断逻辑

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 header = buildHeader(vo);

JSONObject body = buildBody(vo);

String result = exeHttpRequest(header, body);

return JSON.parseObject(result);

}

private String exeHttpRequest(Map 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 buildHeader(RequestVO vo) {

String sign = generateSign(vo);

Map 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被计算了两次。但假如为了复用header中生成的sign,整个代码就不会这么清晰了。

具体实践中,应根据实际情况权衡是否要做到如此层次分明:

当sign的计算较简单时,可以重复计算;

当sign的计算较耗费资源时,则应复用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值