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

Whoops! Where did my architecture go?

Whoops! Where did my architecture go?

Slides of the talk I held at 50th meeting of Java User Group Saxony. @springcentral

Oliver Drotbohm

September 04, 2014
Tweet

More Decks by Oliver Drotbohm

Other Decks in Programming

Transcript

  1. Whoops!
    Where did my
    architecture go?
    Architecture management for Java applications
    !
    Oliver Gierke

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. Background
    5 years of consulting
    Lots of code reviews
    Eoin Woods‘ talk on InfoQ
    Lot of input from fellows

    View Slide

  6. "If you think
    architecture is
    expensive, try no
    architecture.

    View Slide

  7. Macro VS. Micro
    Architecture

    View Slide

  8. Macro VS. Micro
    Architecture

    View Slide

  9. View Slide

  10. Orders
    Inventory
    Billing

    View Slide

  11. Orders
    Inventory
    Billing

    View Slide

  12. Orders
    Inventory
    Billing
    Macro-Architecture
    JMS
    REST
    AMQP

    View Slide

  13. Orders
    Inventory
    Billing
    Macro-Architecture
    Micro-Architecture
    JMS
    REST
    AMQP

    View Slide

  14. JRuby
    Java
    Scala
    Macro-Architecture
    Micro-Architecture
    AMQP
    JMS
    REST

    View Slide

  15. Neo4j
    RDBMS
    MongoDB
    Macro-Architecture
    Micro-Architecture
    from Stefan Tilkov -

    Breaking the Monolith
    JMS
    REST
    AMQP

    View Slide

  16. Roadmap
    Divide and conquer
    Of layers and slices
    A plain Java based approach

    View Slide

  17. Architecture 101

    View Slide

  18. Know your
    dependencies

    View Slide

  19. Explicit / Visible
    dependencies

    View Slide

  20. Granularity
    Modules
    Layers
    Vertical slices
    Subsystems

    View Slide

  21. Granularity
    Java ARchive
    Package
    Class

    View Slide

  22. Divide and
    conquer

    View Slide

  23. Component

    View Slide

  24. Component
    Single unit to understand

    View Slide

  25. Component
    Single unit to change

    View Slide

  26. Component
    Scope of risk of change

    View Slide

  27. B
    Smaller unit to understand
    A

    View Slide

  28. B
    Reduced risk of change
    A

    View Slide

  29. B
    Cost of separation
    A

    View Slide

  30. B
    Definition and maintenance
    of dependencies
    A

    View Slide

  31. "Meanwhile, in my
    friend’s project…

    View Slide

  32. How do I add a feature?

    View Slide

  33. How do I add a feature?
    New

    Feature
    © Eberhard Wolff

    View Slide

  34. Of layers
    and slices…

    View Slide

  35. Presentation
    Service
    Data Access

    View Slide

  36. Presentation
    Service
    Data Access
    Account Customer Core

    View Slide

  37. Layers
    Well understood
    Known to developers
    Less important to business

    View Slide

  38. Slices
    Hardly understood
    New to developers
    Key for business requirements

    View Slide

  39. Presentation
    Service
    Data Access
    Account Customer Core

    View Slide

  40. "How to implement
    an architecture
    inside a codebase?

    View Slide

  41. Architecture
    VS.
    Codebase

    View Slide

  42. "How to implement
    an architecture
    inside a codebase?

    View Slide

  43. "How to implement
    an architecture
    inside a codebase?

    View Slide

  44. "How to maintain
    an architecture
    inside a codebase?

    View Slide

  45. Code analysis
    JDepend
    Sonar

    View Slide

  46. Sonargraph
    Formerly known as SonarJ

    View Slide

  47. Demo

    View Slide

  48. jQAssistant
    http://github.com/buschmais/jqassistant

    View Slide

  49. A plain Java
    based approach

    View Slide

  50. "How far can we get
    with plain Java
    means only?

    View Slide

  51. Presentation
    Service
    Data Access
    Account Customer Core

    View Slide

  52. Packages

    View Slide

  53. ….layer.slice
    ….slice.layer
    ….slice

    View Slide

  54. ….web.core
    ….service.core
    ….repository.core

    View Slide

  55. ….core.web
    ….core.service
    ….core.repository

    View Slide

  56. ….core
    ….customer
    ….account

    View Slide

  57. "Why the f#$k
    should I even care?

    View Slide

  58. "Does it make
    a difference?

    View Slide

  59. Dependency
    management

    View Slide

  60. "You only need to
    manage, what you
    can refer to…

    View Slide

  61. Layers first
    Leaks slice internals
    Lower layers visible to everyone

    View Slide

  62. Slices first/only
    Start with package per slice
    Expose interfaces and domain types
    Keep implementations private

    View Slide

  63. Slices first/only
    Encapsulates business module
    Internals understood anyway

    View Slide

  64. "Start with less
    packages and the
    least visibility
    possible…

    View Slide

  65. Presentation
    Service
    Data Access
    Account Customer Core

    View Slide

  66. Presentation
    Service
    Data Access
    Account Customer Core

    View Slide

  67. Demo

    View Slide

  68. Take-aways
    Know your dependencies
    On every granularity
    Start as strict as possible
    Get lenient where necessary

    View Slide

  69. Resources
    Spring Data JPA @ GitHub
    Sonargraph
    jQAssistant
    Blogpost

    View Slide

  70. Sample Code
    http://github.com/olivergierke/

    whoops-architecture

    View Slide

  71. Oliver Gierke
    Spring Data Project Lead
    !
    [email protected]
    olivergierke
    www.olivergierke.de

    View Slide

  72. Thanks & Credits
    Eoin Woods - Talk @ InfoQ
    Stefan Tilkov - Talk @ InfoQ
    Eberhard Wolff - Slides @ Slideshare

    View Slide