Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
@ManfredSteyer
Maintainable Architectures withAngular, Monorepos and Strategic Design
Manfred Steyer
SOFTWAREarchitekt.at
ManfredSteyer
@ManfredSteyer
What do we need for a good architecture ?
Experience
@ManfredSteyer
Sharing Experience for Architectures
BEST PRACTICES PATTERNS METHODOLOGY
@ManfredSteyer
Domain Driven Design
@ManfredSteyer
How can we improve our frontend architectures with ideas from DDD?
@ManfredSteyer
How can we improve our frontend architectures with ideas from DDD?
@ManfredSteyer
Contents
1) Strategic
Design 101
2) Angular
Monorepos
3) Nx Monorepos
and DDD
4) DEMO
@ManfredSteyer
About me…
• Manfred SteyerSOFTWAREarchitekt.at
• Angular Trainings and Consultancy
• Google Developer Expert (GDE)
• Trusted Collaborator in the Angular Team
Page ▪ 9
Manfred Steyer
Public: Frankfurt, Vienna, Munich, Düsseldorf, Stuttgart
In-House: everywhere
http://softwarearchitekt.at/workshops
@ManfredSteyer
Strategic Designin a nutshell
@ManfredSteyer
Domain Driven Design
Strategic Design Tactical Design
Decomposing a SystemDesign Patterns& Practices
@ManfredSteyer
Domain Driven Design
Strategic Design Tactical Design
Decomposing a SystemDesign Patterns& Practices
@ManfredSteyer
This is what Strategic DDD prevents
@ManfredSteyer
Example
e-Procurement System
@ManfredSteyer
Catalog Approval
SpecificationOrdering
ExampleSu
b-D
om
ains
@ManfredSteyer
Request Product
SpecifyOrder
ApproveOrder
Send Order
Request Budget
ApproveBudget
Budget Hierarchy
Manager Manager
Employee Expert Manager Buying Agent
Product
@ManfredSteyer
Catalog Approval
Bounded Cotext
Ubiquitous Language
@ManfredSteyer
Catalog ApprovalSpecification
Ordering
Context Map
@ManfredSteyer
Approval
Specification
Context Map
Catalog
Catalog
Shared Kernel
@ManfredSteyer
Catalog Approval
AP
I
@ManfredSteyer
Catalog Approval
Calc VAT Calc VAT
Seperate Ways
@ManfredSteyer
Lots of additional approaches for cross-domain communication …
@ManfredSteyer
2) Monorepos
@ManfredSteyer
Workspace
@ManfredSteyer
Creating a Workspace
npm install -g @angular/cli
ng new workspace
cd workspace
ng generate app my-appng generate lib my-lib
ng serve --project my-appng build --project my-app
@ManfredSteyer
Advantages
Everyone uses the latest versions
No version conflicts
No burden with distributing libs
Creating new libs: Adding folder
Experience: Successfully used at Google, Facebook, …
@ManfredSteyer
Moving back and forth
Npm Registry
@ManfredSteyer
Tooling & Generator
https://nrwl.io/nx
@ManfredSteyer
Visualize Module
Structure
@ManfredSteyer
Nx Monorepos and Strategic Design
@ManfredSteyer
Catalog Ordering Shared
Feature Feature Feature Feature Feature
UI UI UI UI UI UI UI UI UI
Domain Domain Domain Domain Domain Domain
Util Util Util Util Util Util
Enterprise Monorepo Patterns, Nrwl 2018: https://tinyurl.com/y2jjxld7@ManfredSteyer
Shared Kernel (if really needed) & other libs
@ManfredSteyer
Catalog Ordering Shared
Feature API Feature Feature Feature Feature
UI UI UI UI UI UI UI UI UI
Domain Domain Domain Domain Domain Domain
Util Util Util Util Util Util
@ManfredSteyer
@ManfredSteyer
Application
Domain
Infrastructure
Isolate your domain!
Domain Domain
Infrastructure
e. g. data access
Application
Use case specific facades
@ManfredSteyer
Alternatives to layering
• e. g. Hexagonal Architecture, Clean Architecture
• Anyway: We need to restrict access b/w libraries
@ManfredSteyer
DEMO
@ManfredSteyer
Micro Apps?Short outlook
@ManfredSteyer
Catalog Ordering Shared
Feature Feature Feature Feature Feature
… … … … … … … … …
@ManfredSteyer
Catalog App Ordering App
Option 1: One App per Domain
@ManfredSteyer
Catalog Ordering Shared
Feature Feature Feature Feature Feature
… … … … … … … … …
@ManfredSteyer
Catalog App Ordering App
Option 2: One Monorepo per Domain
Publish shared libsseperately via npm
@ManfredSteyer
Summary
Slicing into sub-domains
Slicing into layers
Non-strict layering
Finegrained libraries
Enforce restrictions
@ManfredSteyer
@ManfredSteyer
Contact and Downloads
[mail] [email protected]
[web] SOFTWAREarchitekt.at
[twitter] ManfredSteyer
d
Slides & Examples
Public: Frankfurt, Vienna, Munich, Düsseldorf, StuttgartIn-House: everywhere
http://softwarearchitekt.at/workshops