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.
Carl Mäsak - instructor of the course
Carl has extensive experience in software development and software architecture, both in active use, blogging, and teaching. He uses a variety of programming languages daily. Carl has worked in the software industry for the last 15 years. His experience spans over a wide range of paradigms and platforms, and he has developed everything from custom web site design and bioinformatics toolkits to grammar engines and compilers. His specialty is to make systems coordinate and systematize large amounts of heterogeneous data - or, more casual, "bringing order out of chaos." He also likes to heal major systems that are in need of an architect.
Course outline:
-
The Role of The Architect
- Why design matters
- Complexity
- The architects 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
Data Access Architecture
- CAP theorem
- ORM mapping
- NoSQL databases
- Polyglot persistence
Event sourcing
- State vs event sourcing
- Building an event store
-
CQRS
- Semantic operations
- Read vs Write
- The CQRS pattern
- Commands and events
- Write and read sides
- Integration
- Testing
Architecture patterns
- Sagas and process managers
- Circuit breakers
Services
- Micro-services
- REST APIs
- Hypermedia
- Creating scalable and reliable APIs
- Webhooks
- GraphQL
Containers
- Container vs Virtual machines
- Docker
- Docker files & images
- Serverless
Security
- The security challenges
- Hacking your self
- Social engineering
- Securing your architecture
Other relevant courses