Skip to content

Cấu trúc dự án

Một service Fountain tiêu chuẩn có cấu trúc dưới đây. ftkit init tạo khung phần lớn cấu trúc này; một vài entry (có ghi chú) do bạn thêm hoặc do các lệnh ftkit khác sinh ra. Phần chú thích mô tả từng entry cấp cao nhất; các thư mục được đánh dấu BẮT BUỘC là những thư mục mà ftkit verify yêu cầu (server, biz, biz/core, biz/dal). Tất cả những thứ còn lại là tùy chọn và chỉ được kiểm tra khi có mặt.

text
.
├── main.go                 # Điểm khởi đầu: bootstrap fountain → server.NewServer() → .Serving()
├── go.mod                  # Định nghĩa Go module
├── config.yaml             # bạn tự cung cấp — cấu hình runtime (config.example.yaml cũng được chấp nhận); không do init sinh ra

├── server/                 # BẮT BUỘC — tầng transport & lifecycle
│   ├── server.go           #   struct server, NewServer(), Initialize/Serving/Destroy/Info
│   ├── route.go            #   Nối route HTTP (initHTTPHandle, versioning API, group)
│   ├── conf.go             #   Nạp cấu hình server
│   ├── server_callback.go  #   Callback giữa các controller cho server
│   └── version_migrate.go  #   Hook migrate schema/phiên bản

├── biz/                    # BẮT BUỘC — gốc tầng nghiệp vụ
│   ├── biz.go              #   blank-import các package controller để chúng tự đăng ký
│   ├── core/               # BẮT BUỘC — controller, mỗi domain nghiệp vụ một package
│   │   └── core.go         #     interface / kiểu cơ sở dùng chung cho controller
│   └── dal/                # BẮT BUỘC — tầng truy cập dữ liệu
│       ├── dao/            #     data access object + registry managers.go    (tùy chọn)
│       │   └── managers.go #       Đăng ký factory DAO, hằng số cache/db/storage
│       ├── models/         #     model lưu trữ cho database                    (tùy chọn)
│       └── do/             #     data object dùng ở tầng cache/Redis           (tùy chọn)

├── pkg/                    # Package nội bộ dùng chung, tái sử dụng được        (tùy chọn)
├── internal/               # Package riêng tư của framework / không export
├── cmd/                    # Các điểm khởi đầu lệnh bổ sung  (tùy chọn — không do init tạo khung)
├── docs/                   # Tài liệu service                                  (tùy chọn)
├── scripts/                # Script build, test và công cụ (build.sh, tidy.sh, …)  (tùy chọn)
├── tests/                  # Bộ test và fixture
├── tools/                  # Công cụ cho lập trình viên
├── examples/               # Ví dụ sử dụng chạy được
├── data/                   # Dữ liệu tĩnh / file seed
├── public/                 # Tài nguyên tĩnh công khai
├── deployment/             # Manifest triển khai (docker/, k8s/)

├── Dockerfile              # Build container
├── docker-compose.yml      # Môi trường nhiều service tại máy local
├── start_dev_env.sh        # Khởi động môi trường dev local
├── .env.example            # Biến môi trường mẫu
├── .github/                # Cấu hình, instruction và skill của GitHub
├── .gitlab/                # Cấu hình GitLab
├── .gitlab-ci.yml          # Pipeline CI của GitLab
├── .pre-commit-config.yaml # Hook pre-commit (gitleaks, gitlint, …)
├── .vscode/                # Cấu hình editor
├── .editorconfig           # Quy tắc định dạng của editor
├── .gitignore              # Quy tắc git ignore
├── .gitattributes          # Thuộc tính git
├── .dockerignore           # Quy tắc docker ignore
├── CODEOWNERS              # Bản đồ chủ sở hữu code
└── LICENSE                 # Giấy phép

Package <service>_client/ — thư viện client có kiểu mà các service khác import để gọi service này — không nằm trong khung khởi tạo ban đầu; nó được sinh ra sau này cho service và nằm ở gốc repository, ngay cạnh main.go.