Nhảy đến nội dung chính

9.Coding convention

9.1. Mục tiêu chương


Chương này quy định chuẩn coding nhằm:

  • Đảm bảo code thống nhất giữa các module và các đơn vị phát triển

  • Giúp code dễ đọc, dễ hiểu và dễ bảo trì

  • Giảm lỗi phát sinh do cách đặt tên hoặc coding không đồng nhất

  • Tăng hiệu quả review và kiểm soát chất lượng code

9.2. Khái niệm / phạm vi áp dụng


Quy định này áp dụng cho:

  • Toàn bộ source code của hệ thống

  • Core Team và Partner Team

  • Tất cả các module trong modules/**

  • Các thành phần trong common/** và config/** do Core Team quản lý

9.3. Quy định chính

9.3.1. Quy tắc đặt tên

Các thành phần phải đặt tên theo quy ước thống nhất:

Thành phần

Quy tắc đặt tên

Ví dụ

Controller

<Name>Controller

UserController

Service

<Name>Service

UserService

Repository

<Name>Repository

UserRepository

Entity

<Name>Entity

UserEntity

DTO Request

<Name>CreateRequest, <Name>UpdateRequest

UserCreateRequest

DTO Response

<Name>Response

UserResponse


9.3.2. Quy tắc chung

Áp dụng cho toàn bộ code Java:

  • Dùng camelCase cho:

    • Biến

    • Method

  • Dùng PascalCase cho:

    • Class

    • Interface

    • Enum

Ví dụ:

private String fullName;      // đúng

private String FullName;      // sai


public class UserService { }  // đúng

public class userService { }  // sai


Quy định về logging

Không được dùng:

System.out.println("Error");


Phải dùng logging chuẩn:

private static final Logger log = LoggerFactory.getLogger(UserService.class);


log.info("User created");

log.error("Create user failed", ex);


9.3.3. Validation

Tất cả dữ liệu đầu vào phải được validate bằng annotation.

Các annotation chuẩn:

  • @NotNull

  • @NotBlank

  • @Size

Ví dụ:

public class UserCreateRequest {

    @NotBlank

    @Size(max = 100)

    private String username;

    @NotBlank

    private String password;

}

9.4. Cách thực hiện / quy trình

Quy trình tạo DTO đúng chuẩn

Bước 1: Tạo class DTO theo quy tắc đặt tên

Ví dụ:

UserCreateRequest

UserUpdateRequest

UserResponse


Bước 2: Thêm validation annotation

Bước 3: Dùng DTO trong controller

@PostMapping

public ApiResponse<UserResponse> create(

        @Valid @RequestBody UserCreateRequest request) {

    return ApiResponse.ok(userService.create(request));

}



Quy trình logging chuẩn

Bước 1: Khai báo logger trong class

private static final Logger log =

        LoggerFactory.getLogger(UserService.class);


Bước 2: Dùng logger thay cho System.out.println

9.5. Ví dụ minh họa

Trường hợp sai

public class usercontroller {

    public void CreateUser() {

        System.out.println("Create user");

    }

}


Sai vì:

  • Tên class không đúng chuẩn

  • Tên method không camelCase

  • Dùng System.out.println


Trường hợp đúng

public class UserController {

    private static final Logger log =

            LoggerFactory.getLogger(UserController.class);

    public void createUser() {

        log.info("Create user");

    }

}



Ví dụ DTO sai

public class userDTO {

    public String name;

}

Sai vì:

  • Tên class không chuẩn

  • Không có validation

  • Field public


Ví dụ DTO đúng

public class UserCreateRequest {

    @NotBlank

    @Size(max = 255)

    private String name;

    public String getName() { return name; }

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

}

9.6. Checklist áp dụng


Trước khi commit hoặc tạo PR:

  • Tên class đúng chuẩn:

    • Controller → *Controller

    • Service → *Service

    • Repository → *Repository

    • Entity → *Entity

  • Biến và method dùng camelCase

  • Class dùng PascalCase

  • Không dùng System.out.println

  • Dùng logging chuẩn slf4j

  • DTO có validation annotation

Không có field public trong DTO