Software Architecture
How do you avoid making your project a big ball of mud? How do you balance a wide range of design concerns and constraints? How do you map customer requirements to working software? This course provides you with the means and methods to face these challenges.
Audience:
Developers and architects who design systems or assume the role of the architect in a project.
Prerequisites:
A couple of years of development. Preferably in an object oriented language (Java, C#, C++). The course, however, is language and platform independent.
About the instructor: Tore Nestenius
Tore has worked as a consultant since 1997 and is a very knowledgeable system developer and has in the past worked for large companies like Ericsson and Flextronics. Early in his career, Tore Nestenius started Programmers Heaven - a portal with over 750 000 monthly users. He’s behind several other successful projects like CodePedia - a Wiki for developers, the Open Source project TNValidate, and the C# School e-book with over 100 000 downloads.
Course outline:
-
The Role of The Architect
- Why design matters
- Complexity
- The architect's place in the team.
- Why architecture is hard.
Getting feedback
- TDD
- Continuous Integration & deployment
- Refactoring
- Software metrics
Domain Driven Design (DDD)
- Bounded contexts
- Ubiquitous language
- Entity and value objects
- Invariants
- Aggregates
- Event Storming
Data Access Architecture
- CAP theorem
- ORM mapping
- NoSQL databases
- Polyglot persistence
-
CQRS & Event sourcing
- Semantic operations
- Event sourcing
- Read vs Write
- The CQRS pattern
- Commands and events
- Write and read sides
- Integration
- Testing
Architecture patterns
- Sagas and process managers
- Circuit breakers
- Resilience patterns
Services
- Micro-services
- REST APIs
- Hypermedia
- Creating scalable and reliable APIs
- Webhooks
- OpenAPI and Swagger
- GraphQL
Security
- The security challenges
- Hacking your self
- Social engineering
- Securing your architecture