資深開發者在長期實踐中提煉的四大高效編程原則,涵蓋工具選型、代碼復用架構、Web 層設計模式、工程化命名規範,助你從「寫出代碼」進階到「寫出好代碼」。
alias mci='mvn clean install -DskipTests')。// 反例:多個 Service 中重複的日期格式化邏義
// 正例:提取為無狀態工具類
public final class DateUtils {
private DateUtils() {} // 防止實例化
public static String format(Date date, String pattern) {
return new SimpleDateFormat(pattern).format(date);
}
public static Date parse(String str, String pattern) throws ParseException {
return new SimpleDateFormat(pattern).parse(str);
}
}
// 業務代碼調用
String today = DateUtils.format(new Date(), "yyyy-MM-dd");
BaseService 繼承鏈會導致耦合僵化,優先選擇組合/委派(如 Spring 的 @Autowired 注入工具 Bean)。傳統做法:每個 JSP/頁面對應一個 Servlet → 類爆炸、維護困難、URL 分散。
<!-- web.xml 配置 -->
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.example.web.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/user/register.do</url-pattern>
<url-pattern>/user/login.do</url-pattern>
<url-pattern>/user/profile.do</url-pattern>
</servlet-mapping>
// UserServlet.java
@WebServlet("/user/*") // Servlet 3.0+ 註解方式更簡潔
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String uri = req.getRequestURI(); // 含 contextPath
String action = uri.substring(uri.lastIndexOf('/') + 1); // register.do
switch (action) {
case "register.do": doRegister(req, resp); break;
case "login.do": doLogin(req, resp); break;
case "profile.do": doProfile(req, resp); break;
default: resp.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
private void doRegister(HttpServletRequest req, HttpServletResponse resp) { ... }
private void doLogin(HttpServletRequest req, HttpServletResponse resp) { ... }
private void doProfile(HttpServletRequest req, HttpServletResponse resp) { ... }
}
現代替代:Spring MVC @Controller + @RequestMapping 本質同理,框架層面解決了分發與參數綁定。
| 元素 | 規範 | 示例 | 反例 |
|---|---|---|---|
| 類/介面/枚舉 | UpperCamelCase | UserService, OrderStatus | user_service, User_Service |
| 方法/變量/參數 | lowerCamelCase | getUserById, userName | GetUserById, user_name |
| 常量 | UPPER_SNAKE_CASE | MAX_RETRY_COUNT | maxRetryCount |
| 包名 | 全小寫、域名反序 | com.example.service | com.Example.Service |
| 文件/目錄 | kebab-case 或小寫 | user-service/, application.yml | UserService/, Application.YML |
calculateMonthlyPayment 優於 calc。List<User> users,單數 user 表示單個元素。is/has/can/should:isValid, hasPermission。這四大原則看似簡單,貫徹執行需團隊共識與 Code Review 機制保障。建議:
checkstyle.xml、.editorconfig、SonarQube Quality Profile。高效編程不是技巧堆砌,而是降低認知負荷、減少決策疲勞、讓正確的事自然發生的系統性工程實踐。