Communitygithub.com

ben-eddy74/agent-skills

在 backend/ 目錄內,使用嚴格的 Boundary-Control-Entity (BCE) 模式,設計、建立並實作 Java Quarkus / Jakarta EE 後端功能。當建構或修改後端領域邏輯、REST 端點或資料庫實體時觸發此技能。

agent-skills 是什麼?

此技能專注於在 Quarkus 與 Jakarta EE 技術棧中,強制實施嚴格的 Adam Bien BCE 架構,並嚴格限定操作範圍於 `backend/` 目錄內,絕不觸碰 `frontend/`。其運作採用獨特的二階段執行閘門:第一階段(合約與主幹)會先建立或更新 `entity`(不可變記錄與 JPA/Panache 實體)與 `boundary`(JAX-RS 資源簽名)以及對應的失敗測試樁,然後暫停並等待使用者審查 diff 後才進入第二階段(實作與匯出),實作 `control` 層的商業邏輯,並自動執行 `./mvnw test` 來驗證合約。技能強制使用 Java 25 LTS 的現代語法與 JVM 功能,包括詳盡的 `sealed interface` + `record` + 模式解構 switch 表達式(禁止 `default` 分支以確保編譯器強制窮舉性)、靈活的建構子主體(JEP 513)、未命名變數 `_`、虛擬執行緒(`@RunOnVirtualThread`)與 ScopedValue(JEP 506)、以及現代集合(SequencedCollection)與 Stream Gatherers(JEP 485)。此技能支援任何遵循此 BCE 模式的 Java 後端專案,尤其適合在 Quarkus 環境中透過 AI 代理(如 Claude Code)進行高效、結構嚴謹的開發。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ben-eddy74/agent-skills/tree/HEAD/quarkus-bce-backend

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Quarkus BCE 後端工作流程

範圍與目錄邊界

  • 嚴格邊界: 僅在 backend/ 目錄內操作。絕不碰觸 frontend/ 檔案。
  • 架構: 嚴格遵循 Adam Bien BCE 模式(com.app.<domain>.{boundary, control, entity})。
  • 技術棧: Quarkus、Jakarta EE(僅使用 jakarta.*——絕不使用 javax.* 或 org.springframework.*)。

2 階段執行閘門

階段 1:合約與主幹(暫停供人工審查)

  1. entity: 在 ..<domain>.entity 內創建/更新不可變的 Java record 負載(包含 @NotNull、@NotBlank、@Schema)以及 JPA/Panache 實體。對 control 或 boundary 零依賴。
  2. boundary: 在 ..<domain>.boundary 內創建/更新 JAX-RS @Path 資源簽名(@Transactional、@RolesAllowed、@Operation)。
  3. 測試: 在 backend/src/test/java/..<domain>/boundary/ 內創建/更新失敗的 JUnit @QuarkusTest 或單元測試樁。
  4. 暫停: 向用戶顯示 entity、boundary 及測試的差異。在編寫 control 實作前等待批准。

階段 2:實作與結構匯出

  1. control: 在 ..<domain>.control(@ApplicationScoped)內實作業務邏輯。絕不直接呼叫另一個領域的 control;一律通過其 boundary。
  2. 驗證並匯出合約: 在 backend/ 內執行:
    ./mvnw test
    

Java 25 LTS 語言與 JVM 規則(強制)

目標僅限 Java 25 LTS(<maven.compiler.release>25</maven.compiler.release>)。絕不編寫傳統 Java 8/11/17 樣板:

  1. 窮舉 switch 與記錄解構(control 與 entity):
    • 在 entity 中使用 sealed interface 加 record 實作來建模領域結果與狀態機。
    • 在 control 中,使用帶記錄模式解構與守護 when 子句的窮舉 switch 表達式處理它們(例如,case PaidOrder(var id, var total) when total > 1000 -> ...)。
    • 絕不在 sealed interface 的 switch 中包含 default 分支,這樣 Java 25 編譯器在新增狀態時才會強制窮舉性。
  2. 彈性建構子主體(JEP 513):
    • 直接在建構子內,在呼叫 super(...) 或 this(...) 之前,執行快速失敗驗證與數據正規化,而不是建立龐大的靜態輔助方法。
  3. 未命名變數(_):
    • 對於未使用的 lambda 參數、忽略的例外變數或未使用的解構記錄元件,一律使用 _(例如,case Order(var id, _, _))。
  4. 虛擬執行緒與作用域值(JEP 506):
    • 對於 Quarkus boundary 中的阻塞 I/O 端點,除非需要串流,否則優先使用 @RunOnVirtualThread 而非反應式 Uni<T> 鏈。
    • 絕不使用 ThreadLocal;如果必須在執行緒作用域內傳遞上下文狀態,一律使用 Java 25 的 ScopedValue<T>。
  5. 現代集合與串流收集器(JEP 485):
    • 使用 SequencedCollection 方法(.getFirst()、.getLast()、.reversed())而非索引運算 list.get(list.size() - 1)。
    • 使用 Stream.gather(Gatherers.windowFixed(...)) 而非手動分塊迴圈。
  6. 除非要求,否則不啟用預覽標記:
    • 堅持使用已定案的 Java 25 LTS 功能(除非明確要求,否則不要為 JEP 507 基本類型模式或 JEP 505 結構化並發啟用 --enable-preview)。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能