Update Example
Overview
This document demonstrates the complete Update flow using the UpdateOrder feature from the EBusiness application. The flow starts with a PUT request to the controller and ends with event publishing and subscriber processing.
Complete Flow Architecture
PUT Request → Controller → Service → PreBus Plugins → Command Handler → Domain Model → Database → Event Publishing → SubscribersDetailed Flow Breakdown
1. PUT Request
↓
2. Controller (API Entry Point)
↓
3. Service Layer (Business Orchestration)
↓
4. PreBus Processing (Validation Pipeline)
├── UpdateOrderSequence (Plugin Registration)
├── UpdateOrderDataPacket (Validation Context)
└── IsValidOrder Plugin (Business Rules)
↓
5. Command Handler (Data Processing)
↓
6. Domain Model (Business Logic)
↓
7. Database (Data Persistence)
↓
8. Event Publishing (Asynchronous Processing)
↓
9. Subscribers (Side Effects)Step-by-Step Implementation
1. API Controller - The Entry Point
File: OrdersController_UpdateOrder.cs
What Happens:
HTTP Method:
PUT /api/Orders/UpdateOrderInput:
UpdateOrderDtofrom request bodyAction: Calls the service layer to process the order update
Response: HTTP 200 OK with success status
2. Service Layer - Business Orchestration
File: ProcessOrdersService_UpdateOrder.cs
What Happens:
PreBus Processing: Executes business rule sequences (plugins)
Validation: Processes business rule sequences
ID Generation: Generates unique key for tracking
Command Creation: Creates
UpdateOrderCommandwith DTOCommand Processing: Calls the command handler
Result: Returns success status
2.1. PreBus Business Rule Sequence - Validation Pipeline
File: UpdateOrderSequence.cs
What Happens:
Plugin Registration: Registers validation plugins in execution order
Sequential Processing: Executes plugins one by one
Error Collection: Collects validation errors from all plugins
Early Exit: Stops processing if any plugin fails
2.2. PreBus Data Packet - Validation Context
File: UpdateOrderDataPacket.cs
What Happens:
Context Container: Holds DTO and application context
Error Collection: Collects validation errors from plugins
Data Sharing: Allows plugins to share data during validation
Logging: Provides logging capabilities for plugins
2.3. PreBus Validation Plugin - Business Rules
File: IsValidOrder.cs
What Happens:
Business Rule Validation: Implements specific validation logic
Database Access: Can access repository for data validation
Error Reporting: Adds errors to the data packet if validation fails
Async Support: Supports asynchronous validation operations
Dependency Injection: Receives logger and repository factory
3. Command Handler - Data Processing
File: UpdateOrderHandler.cs
What Happens:
Context Setup: Initializes application context and repository
Entity Lookup: Finds existing order by ID
Null Check: Ensures order exists before updating
Domain Logic: Calls domain model to process business rules
Database Save: Updates the order in database
Logging: Logs success/failure of database operation
Event Publishing: Fires events for subscribers
4. Domain Model - Business Logic
File: Order/UpdateOrder.cs
What Happens:
Validation: Guards against null commands
Data Mapping: Converts DTO to domain model
Audit Fields: Sets last modified by user
State Management: Marks entity as modified
Child Objects: Processes child object updates
5. NServiceBus Handler - Message Processing
File: UpdateOrderNsbHandler.cs
What Happens:
Message Reception: Receives
UpdateOrderCommandfrom message busLogging: Logs handler execution
Delegation: Calls the actual command handler
Context Bridge: Converts NServiceBus context to FlexBase context
6. Event Publishing - Asynchronous Processing
Event: OrderUpdatedEvent
What Happens:
Event Creation: FlexBase creates event with order data
Message Bus: Event is published to message bus
Subscriber Notification: All subscribers are notified
7. Event Subscribers - Side Effects
File: UpdateManagerOnUpdateOrder.cs
What Happens:
Event Reception: Receives
OrderUpdatedEventfrom message busSide Effects: Executes business logic (notifications, inventory updates, etc.)
Additional Events: Can fire more events if needed
Data Transfer Objects (DTOs)
Input DTO: UpdateOrderDto
UpdateOrderDtoCommand: UpdateOrderCommand
UpdateOrderCommandKey Differences from Insert Flow
Update-Specific Characteristics
Entity Lookup: Must find existing entity before updating
Null Check: Validates entity exists before processing
State Management: Uses
SetModified()instead ofSetAdded()Audit Fields: Updates
LastModifiedByinstead ofCreatedByHTTP Method: Uses
PUTinstead ofPOSTResponse Code: Returns
200 OKinstead of201 Created
PreBus Validation Focus
IsValidOrder: Validates order exists and is in updatable state
Business Rules: Ensures order can be modified (not shipped, not cancelled)
Data Integrity: Validates update doesn't violate business constraints
Flow Summary
Synchronous Flow (Immediate Response)
PUT Request → Controller receives request
Service Processing → Business orchestration and PreBus validation
PreBus Plugins → Sequential validation of business rules
Command Handler → Entity lookup and data processing
Domain Logic → Business rules and state management
Response → HTTP 200 OK with success status
Asynchronous Flow (Event Processing)
Event Publishing → OrderUpdatedEvent published to message bus
Subscriber Processing → UpdateManagerOnUpdateOrder executes
Side Effects → Manager notifications, inventory updates, analytics
Key Benefits
Data Integrity: Ensures entity exists before updating
Audit Trail: Tracks who made changes and when
Business Rules: Validates update is allowed
Event-Driven: Notifies other systems of changes
Testable: Each component can be tested independently
Maintainable: Clear separation of concerns
This UpdateOrder example demonstrates how FlexBase enables clean, maintainable, and scalable update operations with proper validation, audit trails, and event-driven architecture! 🚀
Last updated