| Code: | Arch-patterns |
| Category: | Architectural patterns |
| Format: | 50% lecture / 50% workshop |
| Duration: | 3 days |
| Target audience: |
architekci |
| Enrollment: | Groups, companies |
| Venue: | Client's office. |
This training presents selected Design and Architectural Patterns in a practical and non-textbook approach, set in the context of designing web applications, platforms, systems, and frameworks.
It includes practical examples drawn from real-world systems such as ERP, visual tools, distributed systems, and servers.
Participants will gain integrated knowledge of modern software engineering achievements, enabling them to create advanced systems. The discussed topics underpin modern frameworks and technologies, enhancing understanding and facilitating conscious usage. Techniques for combining patterns into higher-order structures are also presented.
The training is intended for designers and architects seeking to expand their competencies in standard architectural styles.
The program serves as a general framework; its full implementation exceeds 3 days. During the pre-training analysis, we select patterns beneficial for the team and focus on them during the training. Typically, we can address about 70% of the listed patterns within 3 days.
It's all about the content.
- Modern architectures (CQRS – supporting DDD)
- Possibility of basing examples on Kafka
- Matching solution class to problem class
Training Program
The content of our program can be customised during pre-training analysis.-
Documenting Architecture in the 4C Approach - Context, Containers, Components, Classes- Context
- The context in which the system will operate
- Main actors
- Organization-level processes involving the system
- Role of other systems
- The context in which the system will operate
- Containers
- Technical containers in which the system will be deployed
- Integration patterns
- Communication protocols
- Technical containers in which the system will be deployed
- Components
- Components and Services in the SOA context
- Canonical data exchanged between Services
- API design
- Single source of truth principle
- Components and Services in the SOA context
- Classes
- Introduction to design techniques and patterns at the class level
- Introduction to design techniques and patterns at the class level
- Context
-
System Architecture - Overview of Approaches- Modularization
- Levels of separation
- Techniques for integrating modules
- Levels of separation
- Micro Kernel Architecture
- Command + Command Handler
- Ports and Adapters
- Restful
- Four maturity levels
- Rest as an application protocol, not a transport protocol
- Four maturity levels
- Event Driven Architecture
- Architectures based on events
- Events broker
- Events Bus
- Eventual Consistency
- Temporal dependencies between events
- Sagas – orchestration of events
- Architectures based on events
- Modularization
-
Application Architectures- Layered Approach
- Differences between Layer and Tier
- Separation of application logic and domain logic
- Application Logic
- Modeling Use Case/User Story
- Stateful or stateless
- Challenges in module API design
- Domain Logic and Domain Driven Design Techniques - Building Blocks
- Aggregates
- Entities
- Value Objects
- Domain Services
- Policies
- Specifications
- Factories
- Repositories
- Modeling invariants
- Model levels: Capacity, Operations, Policy – model tuning, Decision Support
- Strategic Layer Testing – general approach overview
- Combinatorial explosion of test cases problem
- Testing upper layers using end2end approach
- Testing lower layers using unit approach
- Differences between Layer and Tier
- Practical use of Inversion of Control techniques (DI, Events, AOP)
- Dependency Injection – basic IoC technique
- Use instead of factory patterns
- Building specific Strategies, Decorators, etc. depending on application state (context, configuration)
- Openness to extension via Strategy patterns
- Event-driven systems – stronger IoC technique
- Use for creating extensible plugin-based architectures
- Use for creating scalable high-performance systems (using queues, e.g. JMS)
- Sagas - modeling complex event-driven processes
- Aspect Oriented Programming
- Introduction to AOP
- Interceptor techniques
- Examples of AOP usage
- Dependency Injection – basic IoC technique
- Designing extensible systems
- plugins
- listeners
- injecting extensions
- aspect-oriented approach
- plugins
- Layered Approach
-
Data access layer patterns- DAO
- Repository
- Active Record
- Object-relational Mapping - using Java Persistence API (Hibernate)
- ORM Issues
- Paradigm mismatch
- Object boundary mapping
- Composition or aggregation - mapping
- 3 approaches to optimistic locking
- Versioning
- Locking objects that serve as bases for others (READ)
- Ensuring consistency of object graphs via root locking (WRITE)
- Paradigm mismatch
- DAO
-
Modularization- Separation of Bounded Contexts
- Techniques for defining module boundaries
- Techniques for module encapsulation
- API
- DTO
- Techniques for defining module boundaries
- Module integration - approaches
- Events
- API calls
- Business process engines
- Events
- Separation of Bounded Contexts
-
Command-query Responsibility Segregation – extended layered architecture- Support for Domain Driven Design
- Solving ORM mismatch problems for data viewing in grids
- Oriented toward scalability and extensibility
- Creating dedicated models: for reading, for business operations
- Solving performance issues
- External index architecture using noSQL
- Solving performance issues
- Support for Domain Driven Design
-
noSQL- Use cases
- Types of databases - matching to the problem
- Use cases
-
Testability – designing test-oriented application architectures- Strategic testing
- Combinatorial explosion of test cases
- Mapping application layers to the testing pyramid
- Strategy
- Domain layer - unit testing
- Service layer - end2end testing
- Combinatorial explosion of test cases
- Striving to run logic outside the server – increasing productivity, reducing redeployment time
- Architecture’s susceptibility to testing: problems and pitfalls
- Unit testing techniques: dummy, fake, stub, mock
- Unit and integration testing tools (ex: JUnit, Mockito)
- 3 levels of tests
- Specification by Example - business goals
- Flow - User Story
- Automating UI interaction - Agents as abstraction over test scripts
- Specification by Example - business goals
- Strategic testing
Download PDF