This presentation was recorded at GOTO Berlin 2018. #gotocon #gotober
http://gotober.com
Simon Brown - Creator of C4 Software Architecture model and Author of Software Architecture for Developers @simonbrown4821
ABSTRACT
If you want evidence that the software development industry is susceptible to fashion, just go and take a look at all of the hype around microservices. It's everywhere! For some people microservices is "the next big thing", whereas for others it's simply a lightweight evolution of the big service-oriented architectures that we saw 10 years ago "done right". Microservices is by no means a silver bullet though, and the design thinking required to create a good microservices architecture is the same as that needed to create a well structured monolith. And this begs the question that if you [...]
TIMECODES
0:00 Introduction
2:35 A well structured codebase is easy to visualise
4:43 the component exists conceptually
4:57 Abstractions should reflect the code
7:17 Our architecture diagrams don't match the code.
7:56 The code structure should reflect the architectural intent
8:33 Organise code based upon what the code does from a technical perspective
8:41 Package by layer is a "horizontal" slicing
9:11 Relaxed vs strict layering
11:53 Changes to a layered architecture usually result in changes across all layers
12:42 Organise code based upon what the code does from a functional perspective
12:56 Package by feature is a "vertical" slicing
13:31 Cited benefits include higher cohesion, lower coupling, and related code is easier to find
15:04 The "inside" is technology agnostic, and is often described in terms of a ubiquitous language
20:09 Architectural principles introduce consistency via constraints and guidelines
20:27 web controllers should never access repositories directly
22:51 Tooling? Static analysis tools, architecture violation checking, etc
23:18 types in package **/web should not access types in **/data
23:55 Using tools to assert good code structure seems like a hack
24:38 But Java's access modifiers are flawed...
25:50 Component? a grouping of related functionality behind a nice clean interface, which resides inside an execution environment like an application
27:08 Package by component is about applying component-based or service-oriented design thinking to a monolithic codebase
27:28 Modularity as a principle
27:54 Separating interface from implementation
28:12 Impermeable boundaries
29:21 The devil is in the implementation details
30:15 Organisation vs encapsulation
34:49 Use encapsulation to minimise the number of potential dependencies
35:38 If you're building a monolithic application with a single codebase, try to use the compiler to enforce boundaries
36:01 Or other decoupling modes such as a module framework that differentiates public from published types
39:08 Agility is a quality attribute
39:45 A good architecture enables agility
45:58 Whatever architectural approach you choose, don't forget about the implementation details
46:13 Beware of the model-code gap
Download slides and read the full abstract here:
https://gotober.com/2018/sessions/515
RECOMMENDED BOOK
Simon Brown • Software Architecture for Developers Vol. 2 • https://leanpub.com/visualising-software-architecture
https://twitter.com/GOTOcon
https://www.linkedin.com/company/goto-
https://www.instagram.com/goto_con
https://www.facebook.com/GOTOConferences
#EventDrivenArchitecture #Monoliths #ModularMonoliths #SoftwareArchitecture #SimonBrown
CHANNEL MEMBERSHIP BONUS
Join this channel to get early access to videos & other perks:
https://www.youtube.com/channel/UCs_tLP3AiwYKwdUHpltJPuA/join
Looking for a unique learning experience?
Attend the next GOTO conference near you! Get your ticket at https://gotopia.tech
Sign up for updates and specials at https://gotopia.tech/newsletter
SUBSCRIBE TO OUR CHANNEL - new videos posted almost daily.
https://www.youtube.com/user/GotoConferences/?sub_confirmation=1