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

Software Architecture

Software Architecture

The Architecture Hamburger: Layers, Hexagons, Rings with Onion and Clean Architecture. Last held on Update Conf Prague 2021.

Henning Schwentner

November 18, 2021

More Decks by Henning Schwentner

Other Decks in Programming


  1. Starring Directed By Special Appearance Presented by With

  2. None
  3. None
  4. 🇩🇪

  5. Java old! C# ABAP PHP Python

  6. None
  7. Buy it on Amazon.com: https://amzn.to/3nF34nI

  8. @hschwentner “A Short History of Software Architecture”

  9. @hschwentner No Architecture Program

  10. @hschwentner No Architecture Mess

  11. @hschwentner 2 Layer Architecture Program DB “uses” Legend:

  12. @hschwentner Foundation Edsger Dijkstra David Parnas information hiding structured programming

    Programming R. Morris Techniques Editor On the Criteria To Be Used in Decomposing Systems into Modules D.L. Parnas Carnegie-Mellon University This paper discusses modularization as a mechanism for improving the flexibility and comprehensibility of a system while allowing the shortening of its development time. The effectiveness of a "modularization" is dependent upon the criteria used in dividing the system into modules. A system design problem is presented and both a conventional and unconventional decomposition are described. It is shown that the unconventional decompositions have distinct advantages for the goals outlined. The criteria used in arriving at the decom- positions are discussed. The unconventional decomposi- tion, if implemented with the conventional assumption that a module consists of one or more subroutines, will be less efficient in most cases. An alternative approach to implementation which does not have this effect is sketched. Key Words and Phrases: software, modules, modularity, software engineering, KWIC index, software design CR Categories: 4.0 Introduction A lucid statement of the philosophy of modular programming can be found in a 1970 textbook on the design of system programs by Gouthier and Pont [1, ¶I0.23], which we quote below: 1 A well-defined segmentation of the project effort ensures system modularity. Each task forms a separate, distinct program module. At implementation time each module and its inputs and outputs are well-defined, there is no confusion in the intended interface with other system modules. At checkout time the in- tegrity of the module is tested independently; there are few sche- duling problems in synchronizing the completion of several tasks before checkout can begin. Finally, the system is maintained in modular fashion; system errors and deficiencies can be traced to specific system modules, thus limiting the scope of detailed error searching. Usually nothing is said about the criteria to be used in dividing the system into modules. This paper will discuss that issue and, by means of examples, suggest some criteria which can be used in decomposing a system into modules. Copyright @ 1972, Association for Computing Machinery, Inc. General permission to republish, but not for profit, all or part A Brief Status Report The major advancement in the area of modular programming has been the development of coding techniques and assemblers which (l) allow one module to be written with little knowledge of the code in another module, and (2) allow modules to be reas- sembled and replaced without reassembly of the whole Edgar Dijkstra: Go To Statement Considered Harmful
  13. @hschwentner below The One Rule above Acyclic Dependency Principle allowed

  14. @hschwentner 3 Layer Architecture Presentation Logic Data

  15. @hschwentner 4 Layer Architecture

  16. @hschwentner Patterns Ralph Johnson Erich Gamma Richard Helm John Vlissides

    a.k.a.: Gang of Four
  17. @hschwentner Layered Architecture Frank Buschmann et al.

  18. @hschwentner Strictness allowed forbidden non-strict strict

  19. @hschwentner 4 Layer Architecture User Interface Application Domain Infrastructure

  20. @hschwentner The Problem Infrastructure User interface Application Domain allowed

  21. @hschwentner The Problem Domain Infrastructure bank transaction Oracle DB Concrete

  22. @hschwentner below above From above/below to inside/outside out- side inside

  23. @hschwentner port port Hexagonal Architecture Foto: Fotograf Dennis Hamilton/Alistair Cockburn/flickr/CC

    BY 2.0 http://alistair.cockburn.us/Hexagonal%2Barchitecture adapter adapter Alistair Cockburn
  24. @hschwentner Kinds of Ports - For UI etc. - Methods

    to be called - “from above” - For DB and infrastructure - Interfaces to be implemented - “from below”
  25. @hschwentner secondary port primary port adapter adapter Kinds of Ports

    Legend: Flow of control Dependency
  26. @hschwentner Domain The Solution Domain Infrastructure bank transaction Oracle DB

    Infrastructure bank transaction Oracle DB port adapter Step 1
  27. @hschwentner uses implements Legend:

  28. @hschwentner Dependency Inversion Depend on abstractions, not on concretions! Robert

    C. Martin “Uncle Bob”
  29. @hschwentner Onion Architecture U I “application core” domain services domain

    model infra app ture struc serv lication ices 🧅
  30. @hschwentner The 4 Tenets •The application is built around an

    independent object model •Inner layers define interfaces. Outer layers implement interfaces •Direction of coupling is toward the center •All application core code can be compiled and run separate from infrastructure Jeffrey Palermo 🧅
  31. @hschwentner Designed for Testability “All application code can be compiled,

    run, and tested separate from infrastructure” Easy unit tests Plays well with TDD 🧅
  32. Clean Architecture Robert C. Martin “Uncle Bob” interactor = use

    case object U I entities DB devices w eb control use cases gate presenters lers ways
  33. @hschwentner Model—View—Controller controller view model Variants: Model—View—Model Model—View—Viewmodel Trygve Reenskaug

  34. @hschwentner Domain-Driven Design Eric Evans

  35. Entity Value Object Aggregate Service Factory Repository Tactical Design

  36. @hschwentner Entity vs. Value - Identity - Life cycle -

    Can be mutable - No identity - Always immutable Contract Map Name Amount Length 12.5 m $ 100.00 “John Miller”
  37. @hschwentner Repository repository interface repository implementation DB uses impleme port

    adapter Legend:
  38. @hschwentner Architecture Hamburger coarse grained

  39. @hschwentner Architecture Hamburger fine grained

  40. @hschwentner Don’t: Build one Giant 🍔

  41. @hschwentner Do: Make it a Menu 🍟🍔🥗

  42. None
  43. https://domainstorytelling.org/book

  44. None
  45. None
  46. None
  47. Henning Schwentner @hschwentner hs@wps.de DDD DDD Slides: speakerdeck.com/hschwentner Book: domainstorytelling.org

  48. @hschwentner Bibliography Buschmann, Frank, Regine Meunier, Hans Rohnert, Peter Sommerlad,

    and Michael Stal. Pattern- Oriented Software Architecture Volume 1: A System of Patterns. Hoboken, NJ: Wiley, 1996. Cockburn, Alistair. “Hexagonal Architecture.” January 4, 2005. https://alistair.cockburn.us/hexagonal-architecture/. Dijkstra, Edsger. “Go To Statement Considered Harmful.” Communications of the ACM 11, no. 3 (March 1968): 147–48. Evans, Eric. Domain-Driven Design: Tackling Complexity in the Heart of Software. Boston: Addison-Wesley, 2004. Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995. Martin, Robert C. Clean Architecture: A Craftsman’s Guide to Software Structure and Design. Boston: Prentice-Hall, 2017. Palermo, Jeffrey. “The Onion Architecture.” July 28, 2008. https://jeffreypalermo.com/2008/07/the- onion-architecture-part-1. Parnas, David L. “On the Criteria To Be Used in Decomposing Systems into Modules.” Communications of the ACM 15, no. 12 (December 1972): 1053–58. Reenskaug, Trygve. “MVC: Xerox PARC 1978–79.” https://folk.universitetetioslo.no/trygver/themes/mvc/mvc-index.html