Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JCConf 2022 - Using ArchUnit to test your architecture

Shihyu Ho
October 15, 2022

JCConf 2022 - Using ArchUnit to test your architecture

Shihyu Ho

October 15, 2022
Tweet

More Decks by Shihyu Ho

Other Decks in Technology

Transcript

  1. Using ArchUnit to
    test your architecture
    Matt Ho

    View Slide

  2. About me
    - Hi, I'm Matt 👋


    - 松凌科技 Architect / R&D


    - JCConf Speaker


    - [email protected]


    - https://github.com/shihyuho

    View Slide

  3. 放⼼, 這不是在講架構

    View Slide

  4. 本節在分享
    架構已經在那了 &&
    該如何確保在持續開發/維運的過程中, 應⽤程式仍
    然遵循著架構走

    View Slide

  5. https://www.archunit.org/

    View Slide

  6. ArchUnit Overview
    - 是⼀個測試套件, 整合了 JUnit 4, JUnit 5 等
    - 良好的 Fluent API
    - 容易延伸擴充
    - Apache-2.0 license

    View Slide

  7. 運作過程

    View Slide

  8. 起⼿式
    決定從哪邊開始匯入 bytecodes

    View Slide

  9. 起⼿式
    定義 Rules

    View Slide

  10. 起⼿式
    ArchUnit 執⾏得到結果

    View Slide

  11. 起⼿式 - Rule Pattern
    ArchRuleDefinition.GIVEN_OBJECTS
    .that(). PREDICATE
    .should(). CONDITION

    View Slide

  12. Controller 命名必須以 ‘Controller’ 結尾
    Class Naming

    View Slide

  13. Controller 命名必須以 ‘Controller’ 結尾
    Class Naming

    View Slide

  14. Class Naming
    Controller 命名必須以 ‘Controller’ 結尾

    View Slide

  15. Class Naming
    Data Access 命名必須以 ‘Dao’ 結尾

    View Slide

  16. Class Naming
    Data Access 命名必須以 ‘Dao’ 結尾

    View Slide

  17. Class Naming
    Data Access 命名必須以 ‘Dao’ 結尾

    View Slide

  18. Layered

    View Slide

  19. Layered

    View Slide

  20. Layered

    View Slide

  21. Layered

    View Slide

  22. Layered
    Architectures.layeredArchitecture()
    .layer(). PREDICATE
    .whereLayer(). CONDITION

    View Slide

  23. Layered
    定義 3 層 layer
    定義依賴關係

    View Slide

  24. General

    View Slide

  25. Freeze
    - 套⽤在舊的系統中, 超多條違規改不動 ;-(

    View Slide

  26. Freeze
    - 套⽤在舊的系統中, 超多條違規改不動 ;-(
    - 好吧, 那就現在開始的程式才檢查 :-)

    View Slide

  27. Freeze
    - 套⽤在舊的系統中, 超多條違規改不動 ;-(
    - 好吧, 那就現在開始的程式才檢查 :-)
    FreezingArchRule.freeze(
    ArchRuleDefinition.GIVEN_OBJECTS
    .that(). PREDICATE
    .should(). CONDITION
    )

    View Slide

  28. Freeze

    View Slide

  29. Code Smells

    View Slide

  30. Long Parameter List
    https://refactoring.guru/smells/long-parameter-list

    View Slide

  31. Large Class
    https://refactoring.guru/smells/large-class

    View Slide

  32. Long Method
    https://refactoring.guru/smells/long-method

    View Slide

  33. Recap
    - 起⼿式
    - Naming Rules
    - Layers Rules
    - General Rules
    - Freezing Rules
    - Custom Rules - Code Smells

    View Slide

  34. Thank you 🙌

    View Slide