Modular Monoliths • Simon Brown • GOTO 2018

Modular Monoliths • Simon Brown • GOTO 2018

101.487 Lượt nghe
Modular Monoliths • Simon Brown • GOTO 2018
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