JDL #
“JHipster Domain Language” hay “JDL” là ngôn ngữ mô tả chuyên dụng (DSL) của JHipster để mô tả:
- Cấu hình ứng dụng - Application
- Thực thể và quan hệ - Entities
- Cấu hình triển khai - Deployment
tất cả chỉ trong một file, có đuôi .jdl
hoặc .jh
.
Xem chi tiết ngôn ngữ trên trang chủ của JHipster
Tại sao nên dùng JDL? #
Xét nội dung JDL sau:
/*
* Application config
*/
application {
config {
baseName maybank
applicationType monolith
packageName com.maybank
authenticationType jwt
prodDatabaseType postgresql
clientFramework react
buildTool gradle
languages [en, vi]
nativeLanguage vi
}
entities *
}
/*
* Constants
*/
MIN_LENGTH_NAME_DEFAULT = 3
MAX_LENGTH_NAME_DEFAULT = 256
MAX_LENGTH_DESC_DEFAULT = 65535
MAX_LENGTH_NAME_PARAM = 512
/*
* Enums
*/
enum LoginStatus {
SUCCESS, SESSION_EXPIRED, FAILED
}
enum Gender {
Male, Female
}
enum Status {
// 0. Chưa duyệt
PENDING_NEW ("0")
// 1. Đã duyệt
APPROVED_NEW ("1")
// 2. Sửa chờ duyệt
PENDING_EDIT ("2")
// 3. Đã sửa (sửa đã duyệt)
APPROVED_EDIT ("3")
// 4. Xóa chờ duyệt
PENDING_DELETE ("4")
// 9. Đã xóa
APPROVED_DELETE ("9")
}
/*
* Entities
*/
entity Channel {
id Long
name String required minlength(MIN_LENGTH_NAME_DEFAULT) maxlength(MAX_LENGTH_NAME_DEFAULT) unique
desc String maxlength(MAX_LENGTH_DESC_DEFAULT)
status Status
}
entity LoginEvent {
id Long
loginStatus LoginStatus
status Status
}
entity Customer {
code UUID
gender Gender
status Status
refId Long
}
relationship OneToOne {
LoginEvent{channel} to Channel
LoginEvent{customer} to Customer
Customer{user} to User
}
/*
* Options
*/
paginate all with pagination
filter all
dto * with mapstruct
Các phần đều có comment (giống comment Java) về loại cấu hình. Cú pháp JDL đơn giản, dễ đọc, dễ hiểu, dễ chỉnh sửa. Ta có thể thấy các entity trong hệ thống là Channel
, LoginEvent
, Customer
và mối quan hệ giữa chúng, app được xác thực theo JWT, client viết bằng React, code Java build bằng Gradle.
Khi đã quen với cú pháp JDL thì việc tạo và sửa cấu hình hệ thống trở nên dễ dàng và nhanh chóng hơn so với tương tác prompting trả lời từng câu hỏi một.
Kể cả sinh code bằng prompting hay qua JDL thì JHipster, một generator Yeoman, đều sinh ra một file .yo-rc.json
để lưu lại toàn bộ cấu hình. So với yo-rc.json
, nội dung JDL đầy đủ và dễ đọc.
Tài liệu này đi theo hướng sinh code thông qua cấu hình JDL.
Hệ sinh thái JDL #
JDL mẫu #
JHipster cung cấp repo jdl-samples có sẵn các file JDL mẫu từ monolith đến microservice. Người dùng có thể sinh code từ JDL mẫu bằng cách gọi đúng tên file mà không cần tải file về. JHipster nếu không tìm thấy file ở thư mục hiện tại sẽ tự động tìm và tải về từ jdl-samples.
$ jhipster jdl 21-points.jh
INFO! File not found: 21-points.jh. Attempting download from jdl-samples repository
INFO! Downloading file: https://raw.githubusercontent.com/jhipster/jdl-samples/v7.9.4/21-points.jh
INFO! Error downloading https://raw.githubusercontent.com/jhipster/jdl-samples/v7.9.4/21-points.jh: 404 - Not Found
INFO! Downloading file: https://raw.githubusercontent.com/jhipster/jdl-samples/main/21-points.jh
# etc
IDE Plugin #
JHipster có hỗ trợ JDL trên các IDE sau:
JDL studio #
JDL studio là công cụ trực tuyến giúp tạo thực thể và quan hệ sử dụng JDL. Dán đoạn code JDL trong bài này vào studio và UML của hệ thống sẽ xuất hiện. Công cụ còn cho phép import và export file JDL.