代码拉取完成,页面将自动刷新
@author
字段告诉我们自己是什么人。我们是作者,作者都有读者。实际上,作者有责任与读者做良好沟通。下次你写代码的时候,记得自己是作者,要为评判你工作的读者写代码。switch
语句往往很难。写出只做一件事的 switch
语句也很难。我们总无法避开 switch
语句,不过还是能够确保 switch
都埋藏在较低的抽象层级,而且永远不重复。public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != null) {
String codePhrase = user.getPhraseEncodeByPassword();
String phrase = cryptographer.decrypt(codePhrase, password);
if ("Valid Password".equals(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
副作用就在于对 Session.initialize()
的调用。checkPassword
函数是用来检查密码的。该名称未暗示它会初始化该次会话。当某个误信了函数名的调用者想要检查用户有效性时,就得冒着抹除现有会话数据的风险。这一副作用造成了一次时序性耦合。也就是说,checkPassword
只能在特定时刻调用。
// TODO
形式在源代码中放置要做的工作列表。TODO
是一种程序员认为应该做,但由于某些原因目前还没做的工作。DTO
(Data Transfer Objects)。DTO 是非常有用的结构,尤其是在于数据库通信、或解析套接字传输的消息之类的场景中。checked exception
的代价是违反开闭原则。如果你在方法中抛出可控异常,而 catch 语句在三个层级之上,你就得在 catch 语句和抛出异常处之间的每个方法签名中声明该异常。这意味着对软件中低层级的修改,都将涉及较高层级的签名。最终得到的就是一个从软件最底端贯穿到最高端的修改链。Colletions.emptyList()
方法,该方法返回一个预定义不可变列表,这样编码,就能尽量避免 NullPointerException
的出现,代码也就更整洁了。public String compact(String message) {
if (expected == null || actual == null || areStringsEqual()) {
return Assert.format(message, expected, actual);
}
}
// 拆解后...
public String compact(String message) {
if (shouldNotCompact()) {
return Assert.format(message, expected, actual);
}
}
private boolean shouldNotCompact() {
return expected == null || actual == null || areStringsEqual();
}
public static final int
老花招。那样做 int 的意义就丧失了,而用 enum 则不然,因为它们隶属于有名称的枚举。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。